您的位置:首页 > 其它

MFC Tree Control对鼠标右击的响应.

2012-11-09 15:26 323 查看
在做聊天程序的时候,想对树形控件进行右键响应.只响应用户,不响应在线用户那一行.

void CClientDlg::OnNMRClickUserTree(NMHDR *pNMHDR, LRESULT *pResult)

{
// TODO: Add your control notification handler code here
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
POINT point;
GetCursorPos(&point);
//把显示器坐标转换为客户区坐标,一定要是tree控件的句柄.主要用来测试用户有没有选中某项.
::ScreenToClient(pNMTreeView->hdr.hwndFrom,&point);
UINT uFlags;
uFlags=TVHT_ONITEM;
HTREEITEM hItem = m_UserTree.HitTest(point, &uFlags);

CMenu menu;

int nID;
//就像上图一样,我只想当用户选中walking时才会有效,选中在线用户也没有用.m_hRoot在我的程序里就是保存在线用户的树.
if ((hItem != NULL) && (TVHT_ONITEM & uFlags)&&(hItem!=m_hRoot))
{
m_UserTree.Select(hItem, TVGN_CARET);
menu.LoadMenu(IDR_FILE_TRANSFER);
//控制弹出菜单的位置,要用到和上面相反的函数.
::ClientToScreen(pNMTreeView->hdr.hwndFrom,&point);
CMenu* pContextMenu = menu.GetSubMenu(0);
nID = pContextMenu->TrackPopupMenu( TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RETURNCMD,
point.x, point.y,this);
}
//下面就是你具体要做的事了,根据菜单项来具体安排.
switch (nID)
{
......
}

*pResult = 0;
}

原文地址:MFC Tree Control对鼠标右击的响应.作者:walking
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐