我发现只有用左键点击树中某个项目时,被点中项才会变成选中项(背景被加亮)
但我想在右键点击树中某个项目时,将被点中的项设为选中(背景被加亮)!
我拦下了 树控件的NM_RCLICK事件,代码如下:
CPoint point;
CTreeCtrl* pTree=(CTreeCtrl*) GetDlgItem(IDC_TREE1);
GetCursorPos(&point);
ScreenToClient(&point);
hItem=pTree->HitTest(point,&m_uFlags); //hItem 总是为NULL,怎么办?
pTree->SelectItem(hItem);
后来我又尝试了其它代码
CPoint point;
TVHITTESTINFO HitTestInfo;
GetCursorPos(&point);
m_Tree_Directory.ScreenToClient(&point);
HitTestInfo.pt = point;
HTREEITEM hItem = m_Tree_Directory.HitTest(&HitTestInfo); //hItem仍然为NULL
但我想在右键点击树中某个项目时,将被点中的项设为选中(背景被加亮)!
我拦下了 树控件的NM_RCLICK事件,代码如下:
CPoint point;
CTreeCtrl* pTree=(CTreeCtrl*) GetDlgItem(IDC_TREE1);
GetCursorPos(&point);
ScreenToClient(&point);
hItem=pTree->HitTest(point,&m_uFlags); //hItem 总是为NULL,怎么办?
pTree->SelectItem(hItem);
后来我又尝试了其它代码
CPoint point;
TVHITTESTINFO HitTestInfo;
GetCursorPos(&point);
m_Tree_Directory.ScreenToClient(&point);
HitTestInfo.pt = point;
HTREEITEM hItem = m_Tree_Directory.HitTest(&HitTestInfo); //hItem仍然为NULL
hItem=pTree->HitTest(point,&m_uFlags); //hItem 总是为NULL,怎么办?
你这里光ScreenToClient是不够的。这时的point相对的原点是你的对话框,而不是树控件的起点。所以要再进行一步坐标变换。参考如下:
void CAboutDlg::OnClickTree1(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
CPoint pt;
GetCursorPos(&pt);
ScreenToClient(&pt);
CRect rc;
m_Tree1.GetWindowRect(rc);
ScreenToClient(rc);
pt.x -= rc.left;
pt.y -= rc.top;
HTREEITEM hItem = m_Tree1.HitTest(pt);
CString sInfo = m_Tree1.GetItemText(hItem);
AfxMessageBox(sInfo);
*pResult = 0;
}
DING 需要转换到树控件窗口
CTreeCtrl* pTree=(CTreeCtrl*) GetDlgItem(IDC_TREE1);
GetCursorPos(&point); pTree->ScreenToClient(&point); hItem=pTree->HitTest(point,&m_uFlags); //hItem 总是为NULL,怎么办?
pTree->SelectItem(hItem);