MFC的菜单栏介绍

简介: MFC的菜单栏介绍

一、菜单栏


1、CMenu:封装了关于菜单的各种操作,还封装了一个非常重要的成员变量,m_hMenu(菜单句柄)


2、创建框架


#include <afxwin.h>
//创建自己的框架类
class CMyFrameWnd :public CFrameWnd  //CCmdTarget是CFramWnd的子类
{
};
class CMywinApp :public CWinApp
{
public:
       virtual BOOL InitInstance();
};
CMywinApp theApp;
BOOL CMywinApp::InitInstance()
{
       CMyFrameWnd* pFrame = new CMyFrameWnd;
       pFrame->Create(NULL, "aiyou");
       m_pMainWnd = pFrame;
       pFrame->ShowWindow(SW_SHOW);
       pFrame->UpdateData();
       return TRUE;
}


3、添加菜单资源,修改属性ID


0a2653c851af460fa595bd959398a8f1.png


4、将菜单显示到窗口


包含资源头文件,#include "resource.h"


第一种方法:在创建框架窗口传参数


Create(NULL, "aiyou",

             WS_OVERLAPPEDWINDOW,//显示风格

             CFrameWnd::rectDefault,//默认的位置大小

             NULL,

             (char*)IDR_MENU1);//菜单ID

第二种方法:利用消息机制


内部外部分别添加类


重写OnCreate方法


class CMyFrameWnd :public CFrameWnd  //CCmdTarget是CFramWnd的子类
{
       DECLARE_MESSAGE_MAP()
public:
       CMenu menu;//为了延长生命周期
       afx_msg int OnCreate(LPCREATESTRUCT IpCreateStruct);
};
int CMyFrameWnd::OnCreate(LPCREATESTRUCT IpCreateStruct) {
       //CMenu menu;
       menu.LoadMenu(IDR_MENU1);//加载菜单,将菜单句柄和menu对象建立绑定关系
       SetMenu(&menu);//显示
       return CFrameWnd::OnCreate(IpCreateStruct);
}


运行结果


0eacb84100b54626af849e6b562bf92a.png


5、命令消息(WM_COMMAND)的处理


框架类不处理会找应用类处理


//添加要处理的宏信息
ON_COMMAND(ID_XJ,xinjian)
//声明xinjian函数
afx_msg void xinjian();
//重写xinjian函数
void CMyFrameWnd::xinjian() {
       AfxMessageBox("框架类处理信件被点击发出COMMAND消息");
}

运行结果:


2d65d23f6d4748949b924e4057485923.png


6、设置菜单项状态


//添加处理状态的宏
ON_WM_INITMENUPOPUP()
//声明函数
afx_msg void OnInitMenuPopup(CMenu* pPopup, UINT nPos, BOOL i);
//重写函数
void CMyFrameWnd::OnInitMenuPopup(CMenu* pPopup, UINT nPos, BOOL i) {
       ::CheckMenuItem(pPopup->m_hMenu,ID_XJ,MF_CHECKED);//第一个要修改的菜单句柄,修改的id,要修改的模式(选中)
}

运行结果:


2e9b90b2ca334476abebe75bafe6eeaa.png


7、上下文菜单(右键菜单)


//添加处理上下文菜单的宏
ON_WM_CONTEXTMENU()
//声明函数
afx_msg void OnConTextMenu(CWnd* pWnd,CPoint pt);
//重写函数
void CMyFrameWnd::OnContextMenu(CWnd* pWnd, CPoint pt)
{
       CMenu menu;
       menu.LoadMenu(IDR_MENU1);
       CMenu* pPopup= menu.GetSubMenu(0);//文件的索引为0
       ::TrackPopupMenu(pPopup->m_hMenu, TPM_CENTERALIGN |  TPM_VCENTERALIGN,pt.x,pt.y,0,this->m_hWnd,NULL);
}


目录
相关文章
|
XML 存储 开发框架
《IntelliJ IDEA 插件开发》第 五 节:IDEA工程右键菜单,自动生成ORM代码
一、前言 二、需求目的 三、案例开发 1. 工程结构 2. 拖拽Swing面板 3. 配置鼠标右键弹窗 4. 给窗体添加功能 5. 代码生成领域服务 四、测试验证 五、总结 六、系列推荐
1615 0
《IntelliJ IDEA 插件开发》第 五 节:IDEA工程右键菜单,自动生成ORM代码
|
测试技术
Junit单元测试为什么不能有返回值?
Junit单元测试为什么不能有返回值?
147 0
|
存储 机器学习/深度学习 Java
顺序二叉树
顺序二叉树 树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。
215 0
|
10月前
|
存储 Java 程序员
cpu与指令集
cpu与指令集
158 0
|
9月前
|
存储 缓存 安全
详解CPU的态
详解CPU的态
61 0
|
10月前
MFC消息映射机制
MFC消息映射机制
72 0
|
存储 索引
数据结构各结构特点(数组、链表、栈、队列、树)(上)
数据结构各结构特点(数组、链表、栈、队列、树)
294 0
|
编译器 C++
win32&mfc————win32菜单栏&库(一)
win32&mfc————win32菜单栏&库(一)
167 0
【数据结构实践】手把手带你快速实现自定义二叉树
什么是树 在学习二叉树之前.我们先来了解什么是树,跟我们现实生活中的树有什么联系,又有什么区别,树是一种很简单的结构,他是非线性的结构.在这种结构中,所有的元素之间的关系具有明显的层次特性,节点(Node)是树的基本构成部分,每个节点只有一个前件,成为父节点,没前件的父节点只有一个,那就是树的根节点(Root).每个节点可以有多个后件,这就是树的子节点(Children).没有后件(没有子节点)的节点称为叶子节点(Leaf Node),在树结构中,一个节点拥有的后件(子节点)个数称为节点的度,最大的度称为树的度,最大的层次(Level)称为树的深度(Height).
162 1
MFC消息映射机制
MFC消息映射机制
203 0
MFC消息映射机制