CMenu 菜单操作
来源:互联网 发布:java xss防御 编辑:程序博客网 时间:2024/05/24 16:16
一. 方法1: 直接添加菜单资源到对话框资源
首先你先在资源视图中添加并创建一个菜单的资源,然后打开对话框,在MENU中选择你创建的菜单的ID,运行程序,当你打开该对话框时就可以发现你的菜单出现在对话框中。
二. 方法2: 代码直接添加菜单资源
再在CTestDialog::OnInitDialog() 中添加如下代码:
// 加载菜单资源m_menu.LoadMenu(IDR_MENU1);// 设置当前菜单SetMenu(&m_menu);// 当你不需要菜单时可以用 SetMenu(NULL); // 来取消当前菜单
三. 方法3: 代码生成菜单, 代码直接添加菜单
例如要产生如下的菜单
1. 菜单说明
这里有A, B, C, D共4个菜单; 其中B是A.2的子菜单, C是B.2的子菜单, D是A.6的子菜单.
2. 定义资源
在Resource.h中添加一些ID值, 不要与其他ID值相同.
#define ID_ITEM_A1 400#define ID_ITEM_A 2 401#define ID_ITEM_A 3 402#define ID_ITEM_A 4 403#define ID_ITEM_A 5 404#define ID_ITEM_B1 405#define ID_ITEM_B 2 406#define ID_ITEM_B 3 407#define ID_ITEM_C1 408#define ID_ITEM_C 2 409#define ID_ITEM_C 3 410#define ID_ITEM_D1 411#define ID_ITEM_D 2 412#define ID_ITEM_D 3 413
3. 添加菜单变量
CMenu m_menuA;CMenu m_menuB;CMenu m_menuC;CMenu m_menuD;
4. 添加菜单创建代码
// Dm_menuD.CreateMenu();m_menuD.AppendMenu(MF_STRING | MF_POPUP, ID_ITEM_D1, "D.1"); // 第一项菜单项m_menuD.AppendMenu(MF_STRING | MF_POPUP, ID_ITEM_D2, "D.2"); // 第二项菜单项m_menuD.AppendMenu(MF_SEPARATOR | MF_POPUP, 0, "");// 分割线m_menuD.AppendMenu(MF_STRING | MF_POPUP, ID_ITEM_D3, "D.3"); // 第三项菜单项// Cm_menuC.CreateMenu();m_menuC.AppendMenu(MF_STRING | MF_POPUP, ID_ITEM_C1, "C.1"); // 第一项菜单项m_menuC.AppendMenu(MF_STRING | MF_POPUP, ID_ITEM_C2, "C.2"); // 第二项菜单项m_ menuC.AppendMenu(MF_SEPARATOR | MF_POPUP, 0, "");// 分割线m_menuC.AppendMenu(MF_STRING | MF_POPUP, ID_ITEM_C3, "C.3"); // 第三项菜单项// Bm_menuB.CreateMenu();m_menuB.AppendMenu(MF_STRING | MF_POPUP, ID_ITEM_B1, "B.1");// 第一项菜单项m_menuB.AppendMenu(MF_STRING | MF_POPUP, (UINT)m_menuC.m_hMenu, "B.2"); // 子菜单绑定到父菜单m_menuB.AppendMenu(MF_STRING | MF_POPUP, ID_ITEM_B3, "B.3");// 第三项菜单项// Am_menuA.CreateMenu();m_menuA.AppendMenu(MF_STRING | MF_POPUP, ID_ITEM_A1, "A.1");// 第一项菜单项m_menuA.AppendMenu(MF_STRING | MF_POPUP, (UINT)m_menuB.m_hMenu, "A.2"); // 子菜单绑定到父菜单m_menuA.AppendMenu(MF_STRING | MF_POPUP, ID_ITEM_A3, "A.3");// 第三项菜单项m_menuA.AppendMenu(MF_STRING | MF_POPUP, ID_ITEM_A4, "A.4");// 第四项菜单项m_menuA.AppendMenu(MF_STRING | MF_POPUP, (UINT)m_menuD.m_hMenu, "A.5");// 子菜单绑定到父菜单SetMenu(&m_menuA);
5. 菜单响应
A. 响应函数
afx_msg void OnMenuA1();afx_msg void OnMenuB3();void CTestDialog::OnMenuA1(){MessageBox(_T("A1"));}void CTestDialog::OnMenuB3(){MessageBox(_T("B3"));}
B. 消息映射
BEGIN_MESSAGE_MAP(CTestDialog, CDialog)//{{AFX_MSG_MAP(CTestDialog)…ON_COMMAND(ID_ITEM_A1, OnMenuA1)ON_COMMAND(ID_ITEM_B3, OnMenuB3)//}}AFX_MSG_MAPEND_MESSAGE_MAP()
6. 菜单的修改
现在修菜单要改为这样
CMenu* pCMenu = GetMenu();pCMenu->ModifyMenu(4, MF_BYPOSITION | MF_STRING | MF_POPUP, (UINT)m_menuD.m_hMenu, "A.5_C");pCMenu->ModifyMenu(5, MF_BYPOSITION | MF_STRING | MF_POPUP, ID_ITEM_A6, "A.6_C");// 为了更新菜单SetMenu(0);SetMenu(&m_menuA);
7. 菜单的删除
菜单项的动态增加/删除
CMenu* pCMenu = GetMenu();pCMenu->DeleteMenu(3, MF_BYPOSITION);// 为了更新菜单SetMenu(0);SetMenu(&m_menuA);
四. 右键菜单
…五. 小结
1. 菜单的结构也是一种树的结构, 在菜单的动态创建中, 先创建叶子, 再创建树枝, 然后把叶子绑定到树枝上.// B
m_menuB.CreateMenu();
m_menuB.AppendMenu(MF_STRING | MF_POPUP, ID_ITEM_B1, "B.1");// 第一项菜单项
m_menuB.AppendMenu(MF_STRING | MF_POPUP, (UINT)m_menuC.m_hMenu, "B.2"); // 子菜单绑定到父菜单
m_menuB.AppendMenu(MF_STRING | MF_POPUP, ID_ITEM_B3, "B.3");// 第三项菜单项
在这里 m_menuB.GetSubMenu(0)和m_menuB.GetSubMenu(2)都会返回0; m_menuB.GetSubMenu(1)才会返回有SubMenu.
(SubItem与SubMenu是不同的)
(或者说AppendMenu只是创建菜单项, 而子菜单需要独立创建并附加)
2. 可以动态创建菜单, 那就可以很灵活了, 你可以根据程序的各种状态(例如不同权限的用户), 来动态的创建菜单.
例如你可以使用XML来配置菜单, 程序启动的时候来动态加载菜单.
0 0
- CMenu 菜单操作
- zz:VC CMenu / 菜单操作
- CMenu-关于菜单的销毁操作
- CMenu菜单自绘
- CMenu创建弹出菜单
- 【转】菜单设计 CMenu
- CMenu 菜单隐藏
- MFC CMenu<菜单>
- [MFC]菜单CMenu用法
- CMenu(弹出式菜单)
- MFC-CMenu(菜单)
- 菜单设计 CMenu
- CMenu 类操作
- 如何使用菜单类CMenu
- 如何使用菜单类CMenu
- Yii Zii.widgets.Cmenu 操作
- cMenu
- CMenu
- DRIVER_OBJECT
- Linux下给mysql创建用户分配权限(基于改动)
- lldb 的一小步 调试器的一大步
- Sdut 2164 Binomial Coeffcients (组合数学) (山东省ACM第二届省赛 D 题)
- UltraEdit 设置
- CMenu 菜单操作
- Android ImageView图片自适应
- 文档注释javadoc
- XCODE调试技巧收集
- java基础加强
- win7+64位+Oracle+11g+64位下使用PLSQL+Developer+的解决办法
- 支持模糊查询的替代html中select的jquery插件
- 怎样从数组中删除某个值?
- 面试经典(25)--二叉查找树(搜索树)