求助,关于鼠标右键弹出菜单
在一个对话框panel上“List Box控键区域”,选中一行,单击右键,然后弹出菜单(在菜单项中做一些事情),看了一些例子不是很清楚, 请大家帮助一下,说说怎么来实现。 问题点数:50、回复次数:5Top
1 楼vcmute(BCare4 H1Rest Good9!)回复于 2006-03-04 12:56:27 得分 5
首先是需要一个MENU,然后
TrackPopupMenu
The TrackPopupMenu function displays a shortcut menu at the specified location and tracks the selection of items on the menu. The shortcut menu can appear anywhere on the screen.
To specify an area of the screen the menu should not overlap, use the TrackPopupMenuEx function.
BOOL TrackPopupMenu(
HMENU hMenu, // handle to shortcut menu
UINT uFlags, // options
int x, // horizontal position
int y, // vertical position
int nReserved, // reserved, must be zero
HWND hWnd, // handle to owner window
CONST RECT *prcRect // ignored
);
Top
2 楼psi555(thunder)回复于 2006-03-04 13:14:36 得分 0
能说得具体点吗,比如怎么实现响应鼠标右键,不好意思, 以前没做过mfc开发。Top
3 楼sinkileu(小心)回复于 2006-03-04 13:28:59 得分 5
CMenu menu;
menu.LoadMenu(IDM_MENU1);
menu.SubMenu(0).TrackPopupMenu(...)Top
4 楼ysjjsj(有时间就睡觉)回复于 2006-03-04 14:05:55 得分 10
void CGridCtrl::OnRButtonDown(UINT nFlags, CPoint point)
{
//MessageBox("right button down");
CMenu pp; //加载菜单
pp.LoadMenu (IDR_MENU_ZKBH);
CMenu* pSubMenu;
//加载子菜单
pSubMenu = pp.GetSubMenu(0);
//显示菜单
ClientToScreen(&point);
pSubMenu->TrackPopupMenu(TPM_RIGHTBUTTON, point.x, point.y,this);
pSubMenu->DestroyMenu();
}
正好有加载代码,也许有点作用。当然加载的前提是要求加入资源!三楼先!Top
5 楼nodefault(永不言败)回复于 2006-03-04 14:20:27 得分 30
这个问题和我的项目一样。
1)需要一个MENU资源;
2)创建一个自己的List Box类,比如CMyList类,加入下面的事件
void CMyList::OnContextMenu(CWnd* pWnd, CPoint point)
{
GetParent()->SendMessage(WM_UserStepEditPopUp,(WPARAM)pWnd,(LPARAM)&point);
}
在上面是事件中加一个自定义消息。
#define WM_UserStepEditPopUp WM_USER+9
3)把自定义消息引入对话框类。在加如下代码:
LRESULT Cxxxx::OnEditPopUp(WPARAM wParam,LPARAM lParam)
{
CPoint *point = (CPoint* )lParam;
m_pOperList.ShowControls(HIDDEN_CONTROL);
CMenu menu;
SetFocus();
if(menu.LoadMenu(MAKEINTRESOURCE(IDR_STEP_OPER)))
{
CMenu *pMenu = menu.GetSubMenu(1);
if(NULL != pMenu)
{
pMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTALIGN|TPM_RIGHTBUTTON,point->x,point->y,this);
}
}
return 0;
}
就可以了!
Top




