这样的情况如何响应右键菜单的消息
再一个继承自CFormView的view中,加入了dlg.然后再该dlg上放了一个listctrl,该listctrl室report形式的
然后我需要在该listctrl上响应右键弹出菜单
菜单已经做好了,我在资源管理中加入了一个菜单资源test,其下有三个子菜单
void OnRclickListSection(NMHDR* pNMHDR, LRESULT* pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
int index = pNMLV->iItem;
if (index == -1)
return;
CPoint pt;
CRect rc;
GetWindowRect(&rc);
GetCursorPos(&pt); //鼠标位置
CMenu *pMenu = new CMenu;
pMenu->LoadMenu(IDR_MENU1);
CMenu* pMenu1 = pMenu->GetSubMenu(0);
pMenu1->TrackPopupMenu(TPM_LEFTALIGN|TPM_RETURNCMD,pt.x,pt.y,this);
*pResult = 0;
}
然后我对这三个子菜单都使用classwaizd加入了右键单击消息,但是没有响应阿
我使用
void OnContextMenu(CWnd* pWnd, CPoint point)
函数,但是这只能响应一个子菜单的消息阿,怎么样可以控制和响应这三个菜单的消息
谢谢
问题点数:20、回复次数:5Top
1 楼hdqqq(小西瓜)回复于 2006-03-10 18:28:20 得分 0
我是这样写的, 响应的是鼠标右键点击.
void COwnFileListView::OnRclick(NMHDR* pNMHDR, LRESULT* pResult)
{
CPoint curpos,tmppos;
GetCursorPos(&curpos);
tmppos = curpos;
ScreenToClient(&tmppos);
if (GetListCtrl().HitTest(tmppos) != -1) {
CMenu lmenu;
CMenu* pmenu;
if (lmenu.LoadMenu(IDR_MENU_LIST)) {
pmenu = lmenu.GetSubMenu(0);
pmenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RIGHTBUTTON, curpos.x, curpos.y, this);
}
}
}Top
2 楼Cadillac(努力学好C++发奋学好English)回复于 2006-03-10 19:31:14 得分 0
我的意思是说,如何响应pop菜单的左键点击事件
谢谢Top
3 楼chehw(chehw)回复于 2006-03-10 20:36:00 得分 0
在WM_COMMAND里响应Top
4 楼Mackz(在相互)回复于 2006-03-10 20:38:29 得分 0
如果你弄不清楚消息流程的话,这个弹出菜单中的菜单所属窗口(你这里是this)和菜单处理消息应该是同一个。Top
5 楼Cadillac1()回复于 2006-03-23 17:03:49 得分 20
void COwnFileListView::OnRclick(NMHDR* pNMHDR, LRESULT* pResult)
{
CPoint curpos,tmppos;
GetCursorPos(&curpos);
tmppos = curpos;
ScreenToClient(&tmppos);
if (GetListCtrl().HitTest(tmppos) != -1) {
CMenu lmenu;
CMenu* pmenu;
if (lmenu.LoadMenu(IDR_MENU_LIST)) {
pmenu = lmenu.GetSubMenu(0);
pmenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RIGHTBUTTON, curpos.x, curpos.y, this);
}
}
}
Top




