list control的右键菜单通过什么消息或函数进行控制? 该list control在一个子窗口里,在WM_COMMAND消息里截获不到右键菜单,该怎么控制呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 //ON_WM_CONTEXTMENU()消息void CTestMenuDlg::OnContextMenu(CWnd* pWnd, CPoint point) { CPoint cp; GetCursorPos(&cp); CRect rectLeftListBox; CListBox *m_pLeftListBox = (CListBox*)GetDlgItem(IDC_TESTMENU_LIST); m_pLeftListBox->GetClientRect(&rectLeftListBox); ClientToScreen(rectLeftListBox); if(PtInRect(&rectLeftListBox, cp)) { m_pRightMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON, cp.x, cp.y, this) ; }} 处理错了吧,你应该在listctrl 的NM_RCLICK 事件里面处理 [Quote=引用 5 楼 oh_my_god 的回复:]处理错了吧,你应该在listctrl 的NM_RCLICK 事件里面处理同意在BEGIN_MESSAGE_MAP END_MESSAGE_MAP()之间添加ON_NOTIFY(NM_RCLICK, IDC_LIST, OnNMRclickList),IDC_LIST是需要处理的list controlID,OnNMRclickList是处理函数void CMyDlg::OnNMRclickList(NMHDR *pNMHDR, LRESULT *pResult){ *pResult = 0; NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; CPoint point; ::GetCursorPos(&point); CMenu menu; menu.LoadMenu(IDR_MENU); //读取资源,IDR_MENU为弹出的菜单ID menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON, point.x,point.y,this);}至于菜单上命令的完成是通过另外一个消息函数处理,如你想处理菜单命令ID为ID_TESTON_COMMAND(ID_POP_TRAYRETURN, OnTest)void CMyDlg::OnTest(){} NM_RCLICK可以生成右键菜单COMMAND消息处理不了右键菜单的ID,我用的是SDK编的 你的ON_COMMAND菜单消息映射正确吗? mfc 背景色问题 农历到底是计算出来的,还是查询出来的? 怎样在MDI中加入COMBOBOX 请问VC中如何用MSCHART作图呢? 新手求助 再问hook的问题。100分 我要取某个字段的最大值,能直接用ADO,SQL写为“select max(menu_id) from sub_menu”? 散分100:哪位有这个头文件? B/S架构和C/S架构谁更有前途? 新手求教,有没有详细讲解MFC通过ODBC操作Access数据库的书? 关于MFC中位图显示,对话框上的图片只有在移动或调整对话框大小后才能全部显示出来,怎样解决? 散分
//ON_WM_CONTEXTMENU()消息void CTestMenuDlg::OnContextMenu(CWnd* pWnd, CPoint point)
{
CPoint cp;
GetCursorPos(&cp); CRect rectLeftListBox;
CListBox *m_pLeftListBox = (CListBox*)GetDlgItem(IDC_TESTMENU_LIST);
m_pLeftListBox->GetClientRect(&rectLeftListBox);
ClientToScreen(rectLeftListBox); if(PtInRect(&rectLeftListBox, cp))
{
m_pRightMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON, cp.x, cp.y, this) ;
}
}
处理错了吧,你应该在listctrl 的NM_RCLICK 事件里面处理同意
在BEGIN_MESSAGE_MAP END_MESSAGE_MAP()之间添加ON_NOTIFY(NM_RCLICK, IDC_LIST, OnNMRclickList),IDC_LIST是需要处理的list controlID,OnNMRclickList是处理函数
void CMyDlg::OnNMRclickList(NMHDR *pNMHDR, LRESULT *pResult)
{
*pResult = 0;
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
CPoint point;
::GetCursorPos(&point);
CMenu menu;
menu.LoadMenu(IDR_MENU); //读取资源,IDR_MENU为弹出的菜单ID
menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON, point.x,point.y,this);
}至于菜单上命令的完成是通过另外一个消息函数处理,如你想处理菜单命令ID为ID_TEST
ON_COMMAND(ID_POP_TRAYRETURN, OnTest)
void CMyDlg::OnTest()
{}
COMMAND消息处理不了右键菜单的ID,我用的是SDK编的