listview控件选中其中的某条记录右键单击后怎样弹出一个自定义的菜单? listview控件选中其中的某条记录右键单击后怎样弹出一个自定义的菜单?有没有朋友做过? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1..h文件中添加 afx_msg void OnRclick(NMHDR* pNMHDR, LRESULT* pResult);2.cpp文件BEGIN_MESSAGE_MAP/BEGIN_MESSAGE_MAP之间添加ON_NOTIFY_REFLECT(NM_RCLICK, OnRclick)void CXXView::OnRclick(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Add your control notification handler code here CListCtrl* pList = &GetListCtrl(); CPoint point; UINT Flags; ::GetCursorPos(&point); Flags = TVHT_ONITEM | TVHT_ABOVE | TVHT_BELOW; pList->ScreenToClient(&point); int hitem = pList->HitTest(point,&Flags); if(hitem == -1) return; pList->ClientToScreen(&point); CString str; CMenu menu; menu.CreatePopupMenu(); str.LoadString(IDS_STATUS_LOG_DELETE); menu.AppendMenu(MF_STRING,IDM_DELETE_STATUSLOG_BYITEM,str); menu.TrackPopupMenu(TPM_LEFTALIGN ,point.x,point.y,this); *pResult = 0;} 响应ListView的NM_RCLICK消息。在里面通过SubItemHitTest找到点击的Item。然后通过CMenu的LoadMenu,GetSubMenu,TrackPopupMenu等函数调用自定义的菜单。 void Dlg_OnNotify(HWND hwnd,WPARAM wParam,LPARAM lParam){ HMENU hMenu; POINT point; hMenu = LoadMenu(g_hinst, MAKEINTRESOURCE(IDR_MONSETMENU)); hMenu = GetSubMenu(hMenu, 0); switch((int)wParam) { case IDC_MSLIST: //获取与处理TabCtrl控件的通知消息 switch(code) { case NM_RCLICK: //用 ListView_HitTest获取当前项的信息 GetCursorPos(&point); SetForegroundWindow(hwnd); // 修正当用户按下ESCAPE 键或者在菜单之外单击鼠标时菜单不会消失的情况 TrackPopupMenu(hMenu, TPM_RIGHTBUTTON, point.x, point.y, 0, hwnd, NULL); break; } break; }}INT_PTR WINAPI Dlg_Proc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam){ switch(uMsg) { case WM_NOTIFY: Dlg_OnNotify(hwnd,wParam,lParam); break; break; } return FALSE;} VC网页查询编程 各位高手, 每次发UPD包出去时, 都会跑一遍ARP协议吗? 如何判读truetype字体中缺失字符? 控件中调用上层程序其他控件函数的问题 [求助] 关于修改窗口的CAPTION属性 callback函数 调用SetWindowLong为什么失败? 我有一段代码,有谁帮我讲讲ado+Field用法? 请问使用最新的Platform SDK有什么好处?居然有几百兆 ? 连夜打造非客户区自绘类CSkinWndHelper支持MFC,WTL版本 IWebBrowser2接口显示内存中网页乱码问题!! 请各位大侠帮忙看看!! 如何创建一个系统用户并且可以把他放到指定的用户组中??
afx_msg void OnRclick(NMHDR* pNMHDR, LRESULT* pResult);2.cpp文件
BEGIN_MESSAGE_MAP/BEGIN_MESSAGE_MAP之间添加
ON_NOTIFY_REFLECT(NM_RCLICK, OnRclick)void CXXView::OnRclick(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
CListCtrl* pList = &GetListCtrl();
CPoint point;
UINT Flags;
::GetCursorPos(&point);
Flags = TVHT_ONITEM | TVHT_ABOVE | TVHT_BELOW;
pList->ScreenToClient(&point);
int hitem = pList->HitTest(point,&Flags);
if(hitem == -1)
return;
pList->ClientToScreen(&point);
CString str;
CMenu menu;
menu.CreatePopupMenu();
str.LoadString(IDS_STATUS_LOG_DELETE);
menu.AppendMenu(MF_STRING,IDM_DELETE_STATUSLOG_BYITEM,str); menu.TrackPopupMenu(TPM_LEFTALIGN ,point.x,point.y,this); *pResult = 0;
}
HMENU hMenu;
POINT point;
hMenu = LoadMenu(g_hinst, MAKEINTRESOURCE(IDR_MONSETMENU));
hMenu = GetSubMenu(hMenu, 0);
switch((int)wParam)
{ case IDC_MSLIST: //获取与处理TabCtrl控件的通知消息 switch(code)
{
case NM_RCLICK:
//用 ListView_HitTest获取当前项的信息
GetCursorPos(&point);
SetForegroundWindow(hwnd); // 修正当用户按下ESCAPE 键或者在菜单之外单击鼠标时菜单不会消失的情况
TrackPopupMenu(hMenu, TPM_RIGHTBUTTON, point.x, point.y, 0, hwnd, NULL);
break;
}
break;
}
}
INT_PTR WINAPI Dlg_Proc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam){ switch(uMsg)
{ case WM_NOTIFY:
Dlg_OnNotify(hwnd,wParam,lParam);
break;
break;
}
return FALSE;
}