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);
}


目录
相关文章
|
6月前
14 MFC - 普通按钮 CButton
14 MFC - 普通按钮 CButton
22 0
|
3月前
MFC的菜单栏介绍
MFC的菜单栏介绍
17 0
|
3月前
|
索引
MFC工具栏和状态栏
MFC工具栏和状态栏
25 1
|
12月前
|
存储 Linux C++
win32&mfc————win32菜单栏&库(二)
win32&mfc————win32菜单栏&库(二)
84 0
|
12月前
|
编译器 C++
win32&mfc————win32菜单栏&库(一)
win32&mfc————win32菜单栏&库(一)
92 0
|
测试技术 BI 区块链
MFC——对话框的创建及使用(上)
MFC——对话框的创建及使用
965 0
MFC——对话框的创建及使用(上)
|
数据安全/隐私保护
MFC——对话框的创建及使用(下)
MFC——对话框的创建及使用
198 0
MFC——对话框的创建及使用(下)
|
C++
基于MFC实现选项卡控件练习
基于MFC实现选项卡控件练习
54 0
基于MFC实现选项卡控件练习
【QT】QT菜单栏、状态栏、工具栏
【QT】QT菜单栏、状态栏、工具栏