void CTreeListView::OnClickTreeList(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
CAddEditDelDlg AddEditDelDlg; HTREEITEM hItem=m_TreeList.GetSelectedItem(); if(hItem != NULL && m_TreeList.ItemHasChildren(hItem) == NULL )
{
if( hItem == hAddEditDel)
{
AddEditDelDlg.DoModal();
}
}
*pResult = 0;
}我在2个if语句上加上断点,调试发现,我点击鼠标第一下时,并没有进入下面的if语句,点击第二下时才进入。然后我再点击别的选项,他还是会出现那个对话框,点击第二下时他才没有出现。这也就是说他延迟了一下。请问原因何在?应该怎么改进?谢谢!
void CTreeListView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
// TODO: Add your specialized code here and/or call the base class
HTREEITEM hPrep,hSubPrep, hSubElem;
//Preprocessor
hPrep = m_TreeList.InsertItem("Preprocessor",TVI_ROOT);
hSubPrep = m_TreeList.InsertItem("Element Type",hPrep);
hAddEditDel = m_TreeList.InsertItem("Add/Edit/Delete",hSubPrep);
hSubElem = m_TreeList.InsertItem("Switch Elem Type",hSubPrep,hSubElem);
}
这是添加树形节点的代码。hAddEditDel我定义的是public成员变量。难道这个地方有问题?希望帮我看看。不好意思隔了这么长时间,双休有点别的事要做,就没上网站看了。
{
// TODO: Add your control notification handler code here
*pResult = 0;
DWORD dwpos = GetMessagePos();
TVHITTESTINFO ht = {0}; ht.pt.x = GET_X_LPARAM(dwpos);
ht.pt.y = GET_Y_LPARAM(dwpos);
::MapWindowPoints(HWND_DESKTOP,pNMHDR->hwndFrom,&ht.pt,1); //把屏幕坐标转换成控件坐标 TreeView_HitTest(pNMHDR->hwndFrom,&ht); //确定点击的是哪一项 MessageBox(mTree.GetItemText(ht.hItem));} 包含头文件 "windowsx.h" 通过上面的代码;就在树形控件的单击确定选中当前项;
HTREEITEM hItem=m_TreeList.GetSelectedItem();
这一句
第一下选中了以后,你点第二下,才会进入if语句,逻辑应该是这样吧?
所以我觉得你获取item的方法可以换一下,用HitTest()这个函数看看.
所以通过GetSelectedItem()选择的是前一个的项