VC++深入详解笔记---第6章_菜单---6.4 动态菜单操作
来源:互联网 发布:用友erp软件价格 编辑:程序博客网 时间:2024/05/20 02:23
6.4
对菜单的动态操作,包括:1、针对弹出菜单的动态操作
2、针对菜单项的动态操作
6.4.1 添加菜单项目
函数:BOOL AppendMenu(UNIT nFlags, UNIT_PTR nIDNewItem =0, LPCTSTR lpszNewItem=NULL);
参数:nFlags:指定新添加的菜单项目的状态信息;
nIDNewItem:取值决定于第一个参数;
1、如果第一个参数是MF_POPUP,那么nIDNewItem为顶层菜单句柄;
2、否则是所要添加的新菜单项的命令ID。
lpszNewItem:取值同样取决于第一个参数
1、第一个参数是MF_STRING,则lpszNewItem就是指向要添加的这个新菜单项目的文本的指针。
2、第一个参数是MF_OWNERDRAW,则lpszNewItem就是指向该菜单项目的一个附加数据指针。
3、第一个参数是MF_SEPARATOR,则lpszNewItem的值将被忽略。
6.4.2 插入菜单项目
函数:BOOL InsertMenu(UINT nPosition, UINT nFlags, UINT_PTR nIDNewItem = 0, LPCTSTR lpszNewItem = NULL);
参数:nPositon :指定新菜单项目的插入位置,采参数2利用或运算与MF_BYCOMMAND或MF_BYPOSITION标志组合,为MF_BYCOMMAND标志时,第一个参数是一个菜单的命令标识,为MF_BYPOSITION标志时,那么新菜单项目将在第一个参数指定的位置所表示的菜单项目之前插入。
nFlags:指定新添加的菜单项目的状态信息;
nIDNewItem:取值决定于第一个参数;
1、如果第一个参数是MF_POPUP,那么nIDNewItem为顶层菜单句柄;
2、否则是所要添加的新菜单项的命令ID。
lpszNewItem:取值同样取决于第一个参数
1、第一个参数是MF_STRING,则lpszNewItem就是指向要添加的这个新菜单项目的文本的指针。
2、第一个参数是MF_OWNERDRAW,则lpszNewItem就是指向该菜单项目的一个附加数据指针。
3、第一个参数是MF_SEPARATOR,则lpszNewItem的值将被忽略。
6.4.3删除菜单
函数:BOOL DeleteMenu(UINT nPosition, UINT nFlags)
6.4.4动态添加的菜单的命令响应
Step1:在Resource.h中定义资源ID
Step2:1、在响应这个菜单的程序类的头文件中添加响应这个函数的原型
afx_msg void OnHello();
DECLARE_MESSAGE_MAP()
2、在响应这个菜单项命令的程序类的源文件中的消息映射表中添加消息映射。位置:
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
.....
ON_COMMAND(IDM_HELLO, OnHello)
END_MESSAGE_MAP()
3、实现菜单命令消息响应函数的定义体
代码:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("未能创建工具栏\n");
return -1; // 未能创建
}
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("未能创建状态栏\n");
return -1; // 未能创建
}
// TODO: 如果不需要可停靠工具栏,则删除这三行
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
CMenu menu;
menu.CreateMenu();
GetMenu()->InsertMenuW(2, MF_POPUP | MF_BYPOSITION, (UINT)menu.m_hMenu, _T("TEST"));
menu.AppendMenu(MF_STRING, 111, _T("hello"));
menu.AppendMenu(MF_STRING, 112, _T("bye"));
menu.AppendMenu(MF_STRING, 113, _T("mybole"));
GetMenu()->GetSubMenu(0)->AppendMenu(MF_STRING, 114, _T("Welcome"));
GetMenu()->GetSubMenu(0)->InsertMenu(ID_FILE_OPEN, MF_BYCOMMAND | MF_STRING, 115, _T("VC 编程"));
menu.Detach();
return 0;
}
- VC++深入详解笔记---第6章_菜单---6.4 动态菜单操作
- VC++深入详解笔记---第6章_菜单---6.3_基本菜单操作---6.3.7_快捷菜单
- VC++深入详解 第6章 菜单
- 《VC++深入详解》学习笔记[5]——第6章 菜单
- 《VC++深入详解》学习笔记 第六章 菜单
- VC++深入详解笔记——6.菜单编程
- VC++深入详解笔记(2)之菜单
- 孙鑫VC++第6章菜单
- VC++深入详解第六章——菜单编程
- 孙鑫VC++深入详解(5):菜单
- 孙鑫VC++深入详解:Lesson6 Part5--- 给自建的动态子菜单配置COMMAN消息响应函数
- vc 动态菜单
- VC 动态生成菜单
- VC 动态创建菜单
- vc++菜单操作日记
- 《VC++深入详解》学习笔记[9]——第12章 文件和注册表操作
- VC++ 菜单详解
- VC++深入详解(4):MFC菜单设计
- 搭建 Android 开发环境,初试HelloWorld (win7) (上)
- HEU The message
- goldengate veridata 数据库表-通过监控软件实现邮件、短信报警
- poj 1160
- 小米2在Eclipse 调试,要注意下列步骤。
- VC++深入详解笔记---第6章_菜单---6.4 动态菜单操作
- opencv+VS2005安装说明
- linux kernel 启动性能优化
- POJ3204( Ikki's Story I - Road Reconstruction)
- 为什么static修饰的方法能不能调用非static方法和属性,请讲详细点
- 【解题报告】NYOJ 679 贪婪的商店 -- 树形dp 裸的很
- 第六周周赛 lca 强连通 最小生成树 最短路
- 有重复的组合计数 By ACReaper
- (转)SQL 优化原则