我有一个树控件,它正在填充一些值。在这几个树节点中,由复选框组成,而很少有。我的问题是最初枚举树时,默认选择位于第一个根节点上,并且该根节点由三个子节点组成,每个子节点由复选框组成。这正是我的问题,
现在,当我展开树并尝试单击由复选框组成的子项时(单击复选框)直到鼠标左键向下,焦点到达我们正在检查的项目,当左键单击时,然后选择正在恢复到根项目(或之前选择的项目)。
为了解决这个问题,这是我尝试过的,
//TVN_ITEMCHANGED
void CDriverSetupView::OnTvnItemChangedTree(NMHDR *pNMHDR, LRESULT *pResult)
{
NM_TREEVIEW* pNewTreeView = (NM_TREEVIEW*)pNMHDR;
if(NULL != pNewTreeView->itemNew.hItem)
{
m_TreeCtrl.Select(pNewTreeView->itemNew.hItem,TVGN_CARET | TVGN_FIRSTVISIBLE | TVGN_DROPHILITE);
m_TreeCtrl.SelectItem(pNewTreeView->itemNew.hItem);
m_TreeCtrl.SelectDropTarget(pNewTreeView->itemNew.hItem);
}
}
如果我这样做,那么我可以选择任何我正在检查的孩子都很酷。但是最初当启动我的应用程序时,树正在扩展,选择不在根项目上,它正在移动到最后一个项目。
请找到下面的图片以便更好地理解,当枚举树时没有 OnTvnItemChangedTree 中的那段代码,树看起来像这样,
现在,当鼠标左键按下第一个复选框时,选择似乎已更改为复选框项目,
现在,当鼠标左键按下复选框时,选择再次恢复到上一个节点,
现在,当我在 OnTvnItemChangedTree 中使用这段代码时,我可以将选择项放到选中的节点上,但最初当我启动我的应用程序时,树会展开,并且选择会出现在最后一个子项上,如下所示,
在上图中,我能够得到我想要的东西,但是树正在扩展并且选择在最后一项上,我知道这是因为在pNewTreeView->itemNew.hItem
最后初始化之后,该项目包含对最后一项的句柄,但是当我检查任何节点时,我们如何才能使树最初不应该扩展并且选择应该正常工作,然后选择应该更改为选中的项目。
任何人都可以让我知道如何使选择保留在根项目上,并且树初始状态应该是未扩展。