设为首页 加入收藏

TOP

15.15 如何创建"上下文"式右键菜单
2013-10-07 00:34:21 来源: 作者: 【 】 浏览:63
Tags:15.15 如何 创建 " 上下文 菜单

15.15  如何创建"上下文"式右键菜单

菜单常见的形式有两种,一种是在标题栏处的标准菜单样式,另外一种称之为"上下文"菜单,常常在右击时,在鼠标所在的位置弹出一个菜单,可以使用CMenu:: TrackPopupMenu函数来实现这一功能,步骤如下:

(1)创建一个基于对话框的、使用MFC库的Windows应用程序工程。

(2)使用向导实现主对话框类对消息WM_CONTEXTMENU的响应,向导添加类似下面的代码:

afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
void CXXDlg::OnContextMenu(CWnd* pWnd, CPoint point)
{
// TODO: Add your message handler code here
// TODO: Add your control notification handler code here
}

(3)在资源视图中插入一个MENU菜单,资源ID为IDR_MENU1,编辑菜单结构如图15.15所示。其中菜单项A、B、C的ID代码分别为ID_ MENUITEM_A、ID_MENUITEM_B、ID_MENUITEM_C。

(4)实现OnContextMenu函数的代码如下:

void CXXDlg::OnContextMenu(CWnd* pWnd, CPoint point) 
{
// TODO: Add your message handler code here
// TODO: Add your control notification handler code here
CMenu menu;
// 装入菜单
menu.LoadMenu(IDR_MENU1);
// 显示菜单(第一个子菜单项)
menu.GetSubMenu(0)->TrackPopupMenu(
TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_RIGHTBUTTON, 
point.x, point.y, this);
}
(5)实现菜单项A、B、C的事件响应,在CXXDlg类头文件和cpp文件中添加如下代码:
//.h文件
afx_msg void OnMenuitemA();
afx_msg void OnMenuitemB();
afx_msg void OnMenuitemB();
//cpp文件
BEGIN_MESSAGE_MAP(CMFCDlg, CDialog)
//{{AFX_MSG_MAP(CMFCDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_CONTEXTMENU()
ON_COMMAND(ID_MENUITEM_A, OnMenuitemA)
ON_COMMAND(ID_MENUITEM_B, OnMenuitemB)
ON_COMMAND(ID_MENUITEM_C, OnMenuitemC)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CXXDlg::OnMenuitemA() 
{
// TODO: Add your command handler code here
AfxMessageBox("A");
}
void CXXDlg::OnMenuitemB()
{
// TODO: Add your command handler code here
AfxMessageBox("B");
}
void CXXDlg::OnMenuitemC() 
{
// TODO: Add your command handler code here
AfxMessageBox("C");
}

(6)按Ctrl+F5键编译并运行程序。

注意:除了本节中介绍的使用WM_CONTEXTMENU消息响应函数来显示动态创建的菜单之外,还有另外一种方法可以使用,而且更加的灵活,即响应鼠标右击消息,然后处理右击消息的函数体内调用相关函数获得鼠标的位置,再创建CMenu对象,调用成员函数TrackPopupMenu来显示创建的上下文菜单。

【责任编辑:夏书 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇15.11 使用CBitmapButton类 下一篇15.18 如何获取当前屏幕的分辨率

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: