请问如何让CTreeView相应双击某一结点的消息和ContextMenu消息 如果用简单的WM_Message效果很不正常。例如我在WM_CONTEXTMENU消息里写弹出一个对话框,实际上就得双击才能弹出来。如果写弹出一个菜单,代码是执行了,但菜单没出来。另外如何让CTreeView接受双击某一节点的消系? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 右击显示菜单:void CLayerVisibleDlg::OnRclickLayersTree(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Add your control notification handler code here CPoint pt; ::GetCursorPos(&pt); UINT uFlags=0; RECT rect; m_pTree.GetWindowRect( &rect ); CPoint ptTest; ptTest.x = pt.x - rect.left ; ptTest.y = pt.y - rect.top ; HTREEITEM hItem = m_pTree.HitTest(ptTest,&uFlags); if (hItem!=NULL) { if( uFlags & TVHT_ONITEMLABEL ) //选中了Label { int count = -1; for (int i = 0 ;i < 3 ; i++) { if (hItem == m_hRoot[i]) { count = i; break; } } if (count == -1)//选中非根节点 { LyrName = m_pTree.GetItemText(hItem); CMenu menu; menu.LoadMenu(IDR_LyrZoom); CMenu* p = menu.GetSubMenu(0); CPoint pt; ::GetCursorPos(&pt); p->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_VERTICAL,pt.x, pt.y, this); *pResult = 0; } } }}双击:直接使用WM_LBUTTONLCLK事件,然后检测点击中的节点:{ CPoint pt; ::GetCursorPos(&pt); UINT uFlags=0; RECT rect; m_pTree.GetWindowRect( &rect ); CPoint ptTest; ptTest.x = pt.x - rect.left ; ptTest.y = pt.y - rect.top ; HTREEITEM hItem = m_pTree.HitTest(ptTest,&uFlags); if (hItem!=NULL) { if( uFlags & TVHT_ONITEMSTATEICON ) { int count = -1; for (int i = 0 ;i < 3 ; i++) { if (hItem == m_hRoot[i]) { count = i; break; } } if (count != -1)//选中根节点 { } else//非根节点 {...... 有没有办法识别系统的硬件 函数调用 有没有直接的函数计算线段是否在矩形区域内? 在vc(mfc)内如何使用vb脚本 在一个程序中实现C/S模型的问题 C++中使用定时器的问题 2000元,寻找北京的vc的在校学生兼职做项目 请教关于状态栏的高度 说,我用鼠标左键拖拽一个文件,用什么函数或方法可以知道此文件的路径? 做钩子的高手们进来呀!!!!!!!!!!!!!! 请问用ADO连接并操作Excel文件的方法VC++6.0(提供源码者给至少100分) vc如何访问mysql,请给我驱动下在地址及其一个查询实例 (急!马上结帖)(50分)
void CLayerVisibleDlg::OnRclickLayersTree(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
CPoint pt;
::GetCursorPos(&pt);
UINT uFlags=0;
RECT rect;
m_pTree.GetWindowRect( &rect );
CPoint ptTest;
ptTest.x = pt.x - rect.left ;
ptTest.y = pt.y - rect.top ;
HTREEITEM hItem = m_pTree.HitTest(ptTest,&uFlags);
if (hItem!=NULL)
{
if( uFlags & TVHT_ONITEMLABEL ) //选中了Label
{
int count = -1;
for (int i = 0 ;i < 3 ; i++)
{
if (hItem == m_hRoot[i])
{
count = i;
break;
}
} if (count == -1)//选中非根节点
{
LyrName = m_pTree.GetItemText(hItem);
CMenu menu;
menu.LoadMenu(IDR_LyrZoom);
CMenu* p = menu.GetSubMenu(0); CPoint pt;
::GetCursorPos(&pt);
p->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_VERTICAL,pt.x, pt.y, this);
*pResult = 0;
}
}
}
}双击:
直接使用WM_LBUTTONLCLK事件,然后检测点击中的节点:
{
CPoint pt;
::GetCursorPos(&pt);
UINT uFlags=0;
RECT rect;
m_pTree.GetWindowRect( &rect );
CPoint ptTest;
ptTest.x = pt.x - rect.left ;
ptTest.y = pt.y - rect.top ;
HTREEITEM hItem = m_pTree.HitTest(ptTest,&uFlags);
if (hItem!=NULL)
{
if( uFlags & TVHT_ONITEMSTATEICON )
{
int count = -1;
for (int i = 0 ;i < 3 ; i++)
{
if (hItem == m_hRoot[i])
{
count = i;
break;
}
} if (count != -1)//选中根节点
{
}
else//非根节点
{
......