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

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

运行结果

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

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

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

运行结果:

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

运行结果:

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

 

欢迎关注公众号:顺便编点程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

web安全工具库

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值