使用上下文菜单
Windows 95应用程序支持单击鼠标右键弹出上下文菜单的功能,这可通过处理
WM_CONTEXTMENU消息来实现。当在窗口内单击鼠标右键时,窗口将接收到
WM_CONTEXTMENU消息,在该消息的处理函数内装载上下文菜单,并调用
CMenu::TrackPopupMenu函数便可显示上下文菜单。CMenu::TrackPopupMenu函数的
原型如下:
BOOL TrackPopupMenu( UINT nFlags,// 显示和选取方式标志
int x,
int y, // 显示菜单的左上角坐标
CWnd* pWnd, // 接收菜单操作的窗口对象
LPCRECT lpRect = NULL ); // 敏感区域
为了使用上下文菜单,首先应在资源编辑器中编制好上下文菜单,假设上下文菜单名
为IDR_MENU_CONTEXT;其次,用ClassWizard给窗口增加处理消息WM_CONTEXTMENU的
函数OnContextMenu,以及各菜单命令的处理函数;然后编写相应的代码。
下面的是OnContextMenu函数的代码实例:
void CEllipseWndDlg::OnContextMenu(CWnd* pWnd, CPoint point)
{
CMenu menu;
// 装入菜单
menu.LoadMenu(IDR_MENU_CONTEXT);
// 显示菜单
menu.GetSubMenu(0)->TrackPopupMenu(
TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_RIGHTBUTTON,
point.x, point.y, this);
}
以上代码可以实现其功能但是,菜单所弹出的位置不合适,可以用以下代码在鼠标处弹出菜单
void CMyDlg::OnContextMenu(CWnd* pWnd, CPoint point)
{
// TODO: Add your message handler code here
CMenu menu;
menu.LoadMenu(IDR_MENU_POP);
CMenu *pop = menu.GetSubMenu(0);
POINT ptMouse;
GetCursorPos(&ptMouse);
pop->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,ptMouse.x,ptMouse.y,this);
}