powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / передача структуры в CTReeCtrl
2 сообщений из 2, страница 1 из 1
передача структуры в CTReeCtrl
    #33901589
дед Макар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в глобальном модуле
Код: plaintext
1.
2.
3.
4.
struct MY_STRUCT{
		int a;
		CString str;
	};

где-то в коде...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
void CLeftView::OnTreeLoad()
{
	MY_STRUCT ms;
	ms.a =  123456777 ;
	ms.str = "STRUCT";

	TV_INSERTSTRUCT tvstruct;
	tvstruct.hParent = NULL;
	tvstruct.hInsertAfter = NULL;
	tvstruct.item.mask = TVIF_TEXT | TVIF_PARAM;
	tvstruct.item.pszText = "Item text";
	tvstruct.item.lParam = (LPARAM) &ms;

	HTREEITEM root = GetTreeCtrl().InsertItem(&tvstruct);	
}

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
void CWinExpView::TreeSelChange(CTreeCtrl *tree)
{
	HTREEITEM item;
	if ((item = tree->GetSelectedItem()) != NULL) {
		GetListCtrl().DeleteAllItems();

		MY_STRUCT ms;

		TVITEM tvItem;
		HTREEITEM hCur = tree->GetSelectedItem();
		TCHAR szText[ 1024 ];
		tvItem.mask = TVIF_PARAM | TVIF_TEXT | TVIF_HANDLE;
		tvItem.hItem = hCur;
		tvItem.pszText = szText;
		tvItem.cchTextMax =  1024 ;

		tree->GetItem(&tvItem);		

		ms = *((struct MY_STRUCT *)tvItem.lParam); //Здесь access violation

		GetListCtrl().InsertItem( 0 , ms->str);
	}
}

как мне теперь получить эти данные?
...
Рейтинг: 0 / 0
передача структуры в CTReeCtrl
    #33901631
дед Макар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
void CLeftView::OnTreeLoad()
{
	MY_STRUCT *ms = new MY_STRUCT();
	ms->a =  123456777 ;
	ms->str = "STRUCT";

	HTREEITEM root = GetTreeCtrl().InsertItem("ROOT", TVI_ROOT);
	GetTreeCtrl().SetItemData(root, (DWORD_PTR) ms);

	//delete ms;  //если откомментировать - будет access violation (оно и понятно)
}

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
void CWinExpView::TreeSelChange(CTreeCtrl *tree)
{
	HTREEITEM item;
	if ((item = tree->GetSelectedItem()) != NULL) {
		GetListCtrl().DeleteAllItems();

		MY_STRUCT ms;

		DWORD ptr = (DWORD)tree->GetItemData(tree->GetSelectedItem());
		ms = *((MY_STRUCT *)ptr);

		GetListCtrl().InsertItem( 0 , ms.str);
	}
}
Работает.

Почему в функции OnTreeLoad() Нельзя написать
Код: plaintext
1.
2.
3.
4.
5.
6.
MY_STRUCT ms;
	ms.a =  123456777 ;
	ms.str = "STRUCT";

	HTREEITEM root = GetTreeCtrl().InsertItem("ROOT", TVI_ROOT);
	GetTreeCtrl().SetItemData(root, (DWORD_PTR) &ms);

?
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / передача структуры в CTReeCtrl
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]