MFC中动态添加菜单项和响应菜单事件
来源:互联网 发布:零基础学大数据算法pdf 编辑:程序博客网 时间:2024/05/17 22:10
新建一个单文档程序
在查看菜单项中增加两个子菜单,分别为隐藏工具栏(ID_HIDE),新建菜单(ID_NEWMENU)
在Resource.h中增加一个ID_NEWMENU宏
#define ID_NEWMENU
操作工具栏和状态栏
使用GetDescendantWindow函数获取工具栏和状态栏的指针
为ID_HIDE添加消息映射,编辑代码如下
static bool m_Hide=false;
m_Hide=!m_Hide;
//获取工具栏指针
CWnd* pWndToolBar=(CWnd*)GetDescendantWindow(AFX_IDW_TOOLBAR);
//获取状态栏指针
CWnd* pWndStatusBar=(CWnd*)GetDescendantWindow(AFX_IDW_STATUS_BAR);
CMenu* pMenu=GetMenu();
CMenu* pSubMenu=pMenu->GetSubMenu(2);
if(m_Hide)
{
pSubMenu->ModifyMenu(ID_HIDE,MF_BYCOMMAND,ID_HIDE,"显示工具栏");
if(pWndStatusBar!=NULL) pWndStatusBar->SetWindowText("隐藏工具栏");
if(pWndToolBar!=NULL) pWndToolBar->ShowWindow(SW_HIDE);
}
else
{
pSubMenu->ModifyMenu(ID_HIDE,MF_BYCOMMAND,ID_HIDE,"隐藏工具栏");
if(pWndStatusBar!=NULL) pWndStatusBar->SetWindowText("显示工具栏");
if(pWndToolBar!=NULL) pWndToolBar->ShowWindow(SW_SHOW);
}
动态添加子菜单
为ID_NEWMENU增加消息映射,编辑代码如下
static UINT m_NewMenu=ID_NEWMENU+1;
//获取菜单
CMenu* pMenu=GetMenu();
//获取索引为2的菜单项,即第3列菜单
CMenu* pSubMenu=pMenu->GetSubMenu(2);
char buffer[1];
itoa(m_NewMenu-ID_NEWMENU,buffer,10);
if(m_NewMenu<=ID_NEWMENU+5)
{
pSubMenu->AppendMenu(MF_SEPARATOR); //分隔线
pSubMenu->AppendMenu(MF_STRING | MF_ENABLED,m_NewMenu++,
CString("新的菜单 ")+buffer);
}
//如果m_bAutoMenuEnable为true,则会依次检查View、Document、Frame的
//消息映射表是否有这个弹出菜单中每个菜单项的处理函数,如果没有就会把那一项改为灰的
m_bAutoMenuEnable=false;
添加OnCommand的消息映射用来响应添加的子菜单项,代码如下
UINT uMsg=LOWORD(wParam);
for(UINT i=ID_NEWMENU+1;i<=ID_NEWMENU+5;i++)
if(uMsg==i)
{
char buffer[1];
itoa(i-ID_NEWMENU,buffer,10);
MessageBox(CString("新的菜单 ") + buffer);
}
右键菜单
在View类中添加OnRButtonDown的消息映射,代码如下
CMenu pPopMenu;
pPopMenu.CreatePopupMenu();
if(pPopMenu==NULL);
pPopMenu.AppendMenu(MF_STRING,ID_NEWMENU+6,"右键菜单");
this->ClientToScreen(&point);
pPopMenu.TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this);
在View类中添加OnCommand的消息映射用来响应右键菜单的事件
UINT uMsg=LOWORD(wParam);
if(uMsg==ID_NEWMENU+6)
MessageBox(CString("右键菜单"));
- MFC中动态添加菜单项和响应菜单事件
- MFC中动态添加菜单项和响应菜单事件
- MFC中动态创建N级菜单以及响应事件——续——动态添加菜单/菜单项、子菜单、右键菜单
- MFC中菜单项的动态添加、删除与响应
- MFC中菜单项的动态添加、删除与响应
- MFC中动态创建N级菜单以及响应事件
- MFC中动态创建N级菜单以及响应事件
- 如何在MFC中动态添加菜单/菜单项、子菜单、右键菜单
- MFC 添加动态菜单
- 关于MFC菜单事件响应
- MFC对话框添加菜单及鼠标响应事件步骤详解
- MFC单文档添加菜单并响应事件
- MFC中动态添加菜单项是灰色的解决办法
- VB.net 动态添加菜单响应单击事件
- MFC之动态添加菜单项
- C++ MFC中的CMenu---动态添加菜单/菜单项
- MFC中的CMenu---如何动态添加菜单/菜单项、子菜单、右键菜单
- MFC中的CMenu---如何动态添加菜单/菜单项、子菜单、右键菜单
- webbrowser控件属性介绍
- qemu
- 如何让窗口重画——Invalidate()、SendMessage(WM_PAINT)和UpdateWindow()
- IOS使用UIImageView显示gif动画的例子
- 笔记本安装系统常见问题
- MFC中动态添加菜单项和响应菜单事件
- 利用maven创建spring-osgi powered 多bundle工程
- object-c 内存里面压缩与解压缩的函数
- MFC中动态创建N级菜单以及响应事件
- Common下StringHelper.cs
- 程序开发规范
- 我使用过的Linux命令之dot - 绘制DOT语言脚本描述的图形
- 数据库中字段的转换(varchar转换成datetime)
- 多工程Maven工程的创建