MFC浅析(5) 命令更新机制

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

命令更新机制

FMD(http://www.fmdstudio.net)

MFC框架结构中,可以用ON_UPDATE_COMMAND_UI( id, memberFxn )
宏指定菜单或工具条按钮等对应的状态设置函数
在memberFxn中通过传入的CCmdUI对象指针就可以设置菜单项,
工具钮的使用、禁用、标记等属性。
所有在memberFxn中指定条件的变化,都将实时的反映到界面上去。
其实现机理如下
一 工具条按钮的更新
由于工具条一直可见,故要实时更新,就得不断调用memberFxn检查更新条件
这是通过在CWinApp::OnIdle(),以及WM_IDLEUPDATECMDUI消息实现的.
①在程序空闲时,OnIdle将被调用
在其基类CWinThread 中的OnIdle() 将调用主窗口的消息处理函数处理WM_IDLEUPDATECMDUI消息,
同时给所有下级窗口发送WM_IDLEUPDATECMDUI消息。
②框架窗口相应WM_IDLEUPDATECMDUI消息
void CMDIFrameWnd::OnIdleUpdateCmdUI()
void CFrameWnd::OnIdleUpdateCmdUI()
需要时,将调用OnUpdateFrameMenu,更新菜单各项
③各控制条,对话框接收到WM_IDLEUPDATECMDUI消息
调用CControlBar::OnIdleUpdateCmdUI()进行相应
在其中调用CControlBar::OnUpdateCmdUI进行更新
④OnUpdateCmdUI是控制条类的虚函数,对不同的控制条将有不同实现方式
以工具条为例:
将针对其上各个按钮调用特定窗口的命令处理函数
首先看是否有对反射消息的处理
另外也支持自己处理
一般情况下将调用DoUpdate进行更新。
DoUpdate 将调用宿主窗口的OnCmdMsg进行处理
OnCmdMsg(m_nID, CN_UPDATE_COMMAND_UI, this, NULL);
其nCode参数为CN_UPDATE_COMMAND_UI,表示是界面更新,将调用ON_UPDATE_COMMAND_UI所制定的成员,同时工具条的信息通过
CmdUI传给处理函数。
最后工具条将调用UpdateDialogControls以更新其上的其他控制。

二 菜单的更新
①再空闲时OnUpdateFrameMenu被调用,用来更新菜单。
过程大致与工具条更新类似。
②将菜单被打开时,也作更新。
 CFrameWnd::OnInitMenuPopup()中
其间将调用窗口的OnCmdMsg(m_nID, CN_UPDATE_COMMAND_UI, this, NULL);
对各菜单项进行更新。
三 其他
在窗口接到命令时,将试探性的调用命令的更新函数,测试命令是否被禁止了。
若该命令为激活状态,将交由OnCmdMsg处理。
MFC实现FTP客户机制 需要应用:IIS(FTP网站制作)、visual stadio 2019 第一步:打开Visual stadio,新建项目(c++,MFC应用) 第二步:点击视图->其他窗口->资源视图,在资源视图中选择Dialog第三步:点击视图->工具箱。选择相应的控件,通过右击的属性来改变ID和文字 第四步: ... 阅读详情

相关推荐

MFC框架原理以及消息运行机制

1,Windows程序内部运行机制       (1)windows程序设计是种事件驱动方式的程序设计,主要基于消息的。当用户需要完成某种功能时,需要调用OS某种支持,然后OS将用户的需要包装成消息,并投入到消息队列中,最后应用程序从消息队列中取走消息并进行响应。 2,消息结构: typedef struct tagMSG {     // msg      HWND   hwnd;

ufe_1的专栏 3775

MFC消息映射的实现

关于MFC框架下消息映射的实现,主要介绍消息机制的实现~

VC/MFC实现大文件MD5命令工具

MD5算法的C++实现通常包含以下几个核心步骤:1.数据填充:将待处理的消息填充到448位模64的倍数,同时在填充的最后一位加入原始消息的长度信息。2.初始化MD5缓冲区:使用固定的十六进制数值初始化MD5的四个缓冲区ABC和D。3.分组处理:将填充后的消息分成512位的块进行处理。对每个块执行四轮操作,每轮操作包括16次的基本运算。4.最终输出:将最后得到的四个缓冲区的值拼接起来,形成最终的128位MD5哈希值。

weixin_35751412的博客 701

MFC的消息机制的实现原理和消息处理的过程

MFC的消息机制的实现原理和消息处理的过程 对于MFC初学者可以很好了解其内部的运行机制 很好的资源

MFC教程(4)消息映射的实现

消息映射的实现 Windows消息概述 Windows应用程序的输入由Windows系统以消息的形式发送给应用程序的窗口。这些窗口通过窗口过程来接收和处理消息,然后把控制返还给Windows。消息的分类 队列消息和非队列消息 从消息的发送途径上看,消息分两种:队列消息和非队列消息。队列消息送到系统消息队列,然后到线程消息队列;非队列消息直接送给目的窗口过程。这里,对消息队列阐述如下:Windows

3407

WM_IDLEUPDATECMDUI,WM_KICKIDLE消息

#define WM_IDLEUPDATECMDUI 0x0363 消息处理ui更新。.net对应得是Applicaton得onidle事件void XMainFrame::IdleUpdateCmdUI(){    SendMessageToDescendants(WM_IDLEUPDATECMDUI, TRUE, 0);    }如果工具条浮动,不是属于framewnd得子窗体需要显示调用

su317的专栏 2963

CToolBar的使用总结(转2)

4、工具条的停靠位置(1)标准工具条的停靠位置工具条类CToolBar是控制条类CControlBar 的派生类,其显示的初始停靠位置是通过调用继承的函数CControlBar::EnableDocking(DWORD dwStyle)来确定的,其参数dwStyle用来指定停靠具体位置,与本文有关的风格如下,其余请参阅VC5的联机帮助:CBRS_ALIGN_TOP 工具条停靠在客户区域

2724

error C2101: '&' on constant

VC++6.0 编译 深入浅出MFC 2e frame7 出现错误 error C2101: '&' on constant 的解决办法 1。在MFC.H 中找到 class CObject 定义将其上面的 //#include 改为 #include "afxmsg_.h" 2。将AFXMSG.H 中的 #define ON_COMMAND(id, memberFxn) \

artmcu的专栏 4519

MFC中处理更新命令UI消息控制函数的调用

OnUpdateDrawCircle(CCmdUI* pCmdUI) 更新命令UI消息控件函数主要是用来对菜单项进行禁止和复选的。当某菜单项所在的弹出式菜单在屏幕上出现时,对菜单项继续拧处理的更新命令UI消息控制函数才会被调用。更新命令UI消息控制函数用FALSE参数来调用CCmdUI::Enable成员函数,那么相应的按钮就会被置成禁止(变灰)状态,从而该按钮就不再会对作用于其上的鼠标按键作出

黑客之路 1705

MFC消息机制详细剖析

本文详细剖析了MFC的消息机制全流程,帮助你分析MFC的消息派发是如何一步步走到控件自己定义的函数

Tandy12356_的博客 1765

mfc 的图片显示机制

mfc 图片显示机制

furtherli的专栏 2039

MFC教程(Visual C++ 6.0)|合集 |更新

前言 C++语言是最主要的软件开发语言,几乎所有的计算机软件、手机软件以及嵌入式软件等都是使用C++语言进行开发的。在Windows桌面上的全部软件几乎都是使用C++语言开发的,例如,QQ、360、迅雷、各种Office办公软件以及各种网络游戏和播放器软件等。 Visual C++ 简称VC或VC++,是由微软提供的C++语言开发工具,它是一个编译器而且是一个集成开发环境包括编辑器、调试器和编译器等。除了VC之外还有gcc也是C++语言编译器,VC主要用于开发Windows桌面软件;gcc主要针对UNIX和

w_lin_jie的博客 1万+

MFC常见面试问题(持续更新

1)说说mfc中的类继承图的基本框架, 2)说说CView类的子类都有什么。 视图类(CView)的三个子类 CScrollView类提供视图的滚动显示;CEditView类支持在视图中的文本编辑操作;CHtmlView类支持在视图中显示和操作html文件。 3)DLL的三种调用形式。 DLL的概念 可以向程序提供一些函数、变量或 类 。 静态链接库

zxccaoya的博客 1万+

MFC中在子线程中如何更新控件的值

以下以vs2013+opencv2.4.9的开发环境做出演示:文章通过MFC+opencv使用多线程的方法实现视频的播放暂停和结束这个demo来说 http://blog.csdn.net/davebobo/article/details/51123853线程函数DWORD WINAPI PlayVideo(LPVOID lpParam)DWORD WINAPI PlayVideo(LPVOID

Ethan的博客 3680

MFC程序版本自动升级更新工具

MFC程序版本自动升级更新工具 去发现同类优质开源项目:https://gitcode.com/ 欢迎使用MFC程序版本自动升级更新工具。本工具旨在为您提供一种高效、便捷的方式,帮助您的MFC程序实现自动升级和更新功能。 功能简介 本工具具备以下功能: 版本自动升级更新:根据预设的版本号,自动检测并下载最新版本的程序文件。 文件MD5校验:在下载文件前,会对目标文件进行MD5校验,确保文件完整性...

gitblog_06714的博客 429

mfc 更新服务器文件,MFC程序版本自动升级更新

1、自动升级需要实现两个exe程序的交替启动,需要一个主程序和一个升级程序;在一个解决方案中创建两个项目,一个是你的主程序,另一个为你的升级程序;第二个程序创建选择添加到解决方案,同时选中你要添加的位子(即主程序路径)。 2、创建成功后的解决方案;Agent为我的升级程序,AutoUpdate为我的主程序。 3、创建本地版本文件和服务端版本文件;本地版本文件:VersionInfo.ini[INI...

weixin_39661129的博客 1193

MFCMFC消息处理和映射

00. 目录 文章目录00. 目录01. 概述02. 框架中的消息和命令2.1 消息2.2 消息处理程序2.3 消息类别2.4 映射消息2.5 命令ID2.6 标准命令2.7 命令目标03. 框架如何调用处理程序3.1 消息发送和接收3.2 非命令消息如何到达其处理程序3.3 命令路由3.4 命令路由示例3.5 OnCmdMsg 处理程序3.6 重写标准命令传送04. 框架如何搜索消息映射4.1 消息映射的位置4.2 派生消息映射05. 声明消息处理程序函数5.1 标准 Windows 消息的处理程序5.2

C/C++软件工程师、嵌入式软件工程师、物联网研发工程师、C/C++讲师、物联网讲师、嵌入式讲师、鸿蒙讲师---欢迎大家一起交流(私信添加博主微信) 2045
上一篇: MFC浅析(4) CObject浅析
下一篇: MFC浅析(6) 对话框数据交换及验证
FMD
FMD
博客等级 码龄26年 10粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值