Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Странное поведение CTreeViewCtrl и SetCheckState / 3 сообщений из 3, страница 1 из 1
18.12.2014, 19:33
    #38837526
13th
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странное поведение CTreeViewCtrl и SetCheckState
VS2008, 2010.

Есть примитивный WTL-диалог с деревом на нём. У дерева включено свойства "показывать чек-боксы".

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
class CMainDlg : public CDialogImpl<CMainDlg>
{
public:

	enum { IDD = IDD_MAINDLG };
	// разное....
	// ......


	HTREEITEM htiRoot;
};



при инициализации делаю так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
LRESULT CMainDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
	WTL::CTreeViewCtrl tree;
	tree.Attach( GetDlgItem(IDC_TREE1) );
	htiRoot = tree.InsertItem( L"All Items", TVI_ROOT, TVI_LAST);
	// добавляю ещё итемы
	tree.Expand( htiRoot );
	tree.SetCheckState( htiRoot, TRUE );
	tree.Detach();
	return TRUE;
}



по идее, должен выбраться корневой итем. Этого не происходит. А вот если отложить установку флажка на несколько миллисекунд, например, сделать так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
LRESULT CMainDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
	WTL::CTreeViewCtrl tree;
	tree.Attach( GetDlgItem(IDC_TREE1) );
	htiRoot = tree.InsertItem( L"All Items", TVI_ROOT, TVI_LAST);
	tree.Detach();

	// заводим будильник
	SetTimer(99, 250);

	return TRUE;
}

LRESULT CMainDlg::OnTimer(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
	if( wParam != 99 ) return 0;
	KillTimer(99);
	WTL::CTreeViewCtrl tree;
	tree.Attach( GetDlgItem(IDC_TREE1) );
	tree.SetCheckState( htiRoot, TRUE );
	tree.Detach();
	return 0;
}


то итем выбирается. Почему итем не выбирается из OnInitDialog?
...
Рейтинг: 0 / 0
18.12.2014, 20:06
    #38837549
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странное поведение CTreeViewCtrl и SetCheckState
13th,

выскажу предположение, что в момент работы первой функции еще не создан контрол дерева.
...
Рейтинг: 0 / 0
19.12.2014, 13:50
    #38838094
13th
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странное поведение CTreeViewCtrl и SetCheckState
MasterZiv, ну да, такое предположение у меня тоже было. Однако ж IsWindow возвращает TRUE, и если поставить брекпоинт, то диалог и дерево видно Spy-ем.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Странное поведение CTreeViewCtrl и SetCheckState / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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