0
点赞
收藏
分享

微信扫一扫

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

MFC的菜单栏介绍_封装

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

运行结果

MFC的菜单栏介绍_菜单栏_02

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

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

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

运行结果:

MFC的菜单栏介绍_MFC_03

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,要修改的模式(选中)
}

运行结果:

MFC的菜单栏介绍_句柄_04

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

 

MFC的菜单栏介绍_句柄_05

MFC的菜单栏介绍_MFC_06

举报

相关推荐

0 条评论