CTreeCtrl类的选择消息的处理方式是:在当前树结点点击其他结点时,发出一个WM_SELCHANGED消息,假如再次点击当前结点时,则不响应(即不发出消息)。问题是当我有两个树时,比如tree1和tree2。我先点击tree1上的a结点 ,这时候tree1发消息响应我,然后我点tree2上的b结点,tree2也响应我。可是当我再去点击tree1的a结点时,由于对于tree1来说,我选择的上次结点和这次结点相同,它就不在响应我,可是对我来说,是从tree2的b结点变到了tree1的a结点,我需要知道这个变化,请高手指点一下。
例如:
void CLeftView::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
CDataManageDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CTreeCtrl& eepromtree=GetTreeCtrl();
HTREEITEM hItem; //树型目录中被选中的Item句柄
hItem = eepromtree.GetSelectedItem();
pDoc->m_strFlag = eepromtree.GetItemText(hItem); //得到选中Item的文本//根据选中的Item执行相应的操作
if(pDoc->m_strFlag ==tree1)
{ }
else if(pDoc->m_strFlag ==tree2)
{ }
*pResult = 0;
}
if( hItem )
{
pDoc->m_strFlag = eepromtree.GetItemText(hItem); //得到选中Item的文本//根据选中的Item执行相应的操作
if(pDoc->m_strFlag ==tree1)
{ }
else if(pDoc->m_strFlag ==tree2)
{ }
}
我的理解是需要分别调用tree1,tree2的属性GetSelectedItem去获得他们当前选择的项目(也就是a节点,b节点),通过上一个左键事件记录所选择的项目对比来判断,问题出现,我只知道tree1选择的是a节点,tree2选择的是b节点,但是我并不知道这次选择的是a还是b。想问一下,我能不能在选择tree2的时候,把tree1的选择项置空?
HTREEITEM hItem; //树型目录中被选中的Item句柄
hItem = eepromtree.GetSelectedItem();
pDoc->m_strFlag = eepromtree.GetItemText(hItem); //得到选中Item的文本
就可以得到选中的文本,然后根据此文本执行相应操作啊。
从CTreeCtrl继承,添加即使你要添加到 CMainFrame里面,NM_CLICK可以分别对两个控件增加事件
ON_NOTIFY(NM_CLICK,IDC_TREE1,OnClickTree1)
ON_NOTIFY(NM_CLICK,IDC_TREE2,OnClickTree2)OnClickTree2()
{
m_tree1.DeleteAllItems();
}
}