
MFC-菜单
框架类处理消息:首先,MFC框架会处理菜单相关的初始事件,如创建菜单。 应用程序类处理消息:随后,应用程序类会对菜单事件进行进一步处理。
发布日期:2025-04-13 23:43:30
浏览次数:12
分类:精选文章
本文共 2014 字,大约阅读时间需要 6 分钟。
MFC菜单处理指南
在MFC开发中,菜单的创建与管理是常见操作。本文将详细讲解菜单的创建方法及其事件处理顺序。
一、菜单的创建
方法一:直接挂接菜单
在MFC项目中,菜单可以通过类的挂接方式来创建。以下是一个典型的实现步骤:
#include "afxwin.h"#include "resource.h"class MyFrameWnd : public CFrameWnd{public: MyFrameWnd() {} virtual BOOL InitInstance() { MyFrameWnd* pFrame = new MyFrameWnd; pFrame->Create(NULL, "Test", WS_OVERLAPPEDWINDOW, CFrameWnd::rectDefault, NULL, (CHAR*)IDR_MENU1); m_pMainWnd = pFrame; pFrame->ShowWindow(SW_SHOW); pFrame->UpdateWindow(); return TRUE; }};MyWinApp mainApp;
方法二:通过消息映射
另一种方法是通过消息映射来处理菜单事件。这种方法通常用于更复杂的菜单逻辑:
#include "afxwin.h"#include "resource.h"class MyFrameWnd : public CFrameWnd{ DECLARE_MESSAGE_MAP()public: afx_msg int OnCreate(LPCREATESTRUCT pcs); afx_msg void OnNew(); CMenu menu;};BEGIN_MESSAGE_MAP(MyFrameWnd, CFrameWnd) ON_WM_CREATE() ON_COMMAND(Create_NewFile, OnNew)END_MESSAGE_MAP()void MyFrameWnd::OnNew(){ AfxMessageBox("新建");}int MyFrameWnd::OnCreate(LPCREATESTRUCT pcs){ menu.LoadMenuA(IDR_MENU1); this->SetMenu(&menu); //::SetMenu(this->m_hWnd, menu.m_hMenu); return CFrameWnd::OnCreate(pcs);}class MyWinApp : public CWinApp{ DECLARE_MESSAGE_MAP()public: afx_msg void OnNew(); virtual BOOL InitInstance() { MyFrameWnd* pFrame = new MyFrameWnd; pFrame->Create(NULL, "Test"); m_pMainWnd = pFrame; pFrame->ShowWindow(SW_SHOW); pFrame->UpdateWindow(); return TRUE; }};BEGIN_MESSAGE_MAP(MyWinApp, CWinApp) ON_COMMAND(Create_NewFile, OnNew)END_MESSAGE_MAP()void MyWinApp::OnNew(){ AfxMessageBox("应用程序-新建");}MyWinApp mainApp;
二、菜单事件处理顺序
在MFC中,菜单的事件处理遵循特定的顺序。具体来说:
这种处理顺序确保了菜单的创建和命令的响应能够高效且有序地进行。
三、菜单项状态设置
菜单项的状态可以通过菜单管理器来设置。例如,可以通过以下方式设置菜单项的启用状态:
if (menu.GetItemID() == ID_ITEM1){ menu.EnableItem(ID_ITEM1, TRUE);}
这种设置可以根据具体需求,灵活配置菜单项的显示状态。
通过以上方法,开发者可以轻松创建和管理MFC应用程序中的菜单,充分发挥MFC框架的优势。
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2025年05月11日 01时07分34秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
live和on的区别
2025-04-11
li下的ul----多级列表
2025-04-11
LLM;超越记忆《第 2 部分 》
2025-04-11
LLVM 简介-ChatGPT4o作答
2025-04-11
localhost:5000在MacOS V12(蒙特利)中不可用
2025-04-11
localStorage使用总结
2025-04-11
Lock 锁底层实现
2025-04-11
Lock和synchronized区别(以及Lock的使用)
2025-04-11
Log4j2 中format增加自定义的参数
2025-04-11
log4j补充
2025-04-11
Log4j输出到控制台成功,写入文件失败 - Log4j和commons log的整合
2025-04-11
logback.xml 配置详解(1)
2025-04-11
logback的使用和logback.xml详解
2025-04-11
logback配置文件详解
2025-04-11
Logback配置输出sql
2025-04-11
logging.config报错FileNotFoundError
2025-04-11
Logstash input jdbc连接数据库
2025-04-11
logstash mysql 准实时同步到 elasticsearch
2025-04-11
Logstash是什么,干什么用的?带你详细认识
2025-04-11
Logstash简介和部署---ElasticStack(ELK)工作笔记019
2025-04-11