VS2008, 2010.
Есть примитивный WTL-диалог с деревом на нём. У дерева включено свойства "показывать чек-боксы".
class CMainDlg : public CDialogImpl<CMainDlg>
{
public:
enum { IDD = IDD_MAINDLG };
// разное....
// ......
HTREEITEM htiRoot;
};
при инициализации делаю так:
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;
}
по идее, должен выбраться корневой итем. Этого не происходит. А вот если отложить установку флажка на несколько миллисекунд, например, сделать так:
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?