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

原创 2001年06月16日 13:10:00
命令更新机制

命令更新机制

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处理。
版权声明:本文为博主原创文章,未经博主允许不得转载。

浅析Linux 5 种关机命令

㈠ shutdown                    shutdown 参数说明:[-t] 在改变到其它runlevel之前﹐告诉init多久以后关机 [-r] 重启计算机 [-k] 并不真正关...
  • linwaterbin
  • linwaterbin
  • 2013年03月08日 00:09
  • 2345

浅谈HTML5 WebSocket的机制

回顾上一章      在上一章《为什么我们需要HTML5 WebSocket》中,我简单的介绍了下WebSocket的前世今生。相信大家已对WebSocket有了初步的了解。那么今天我们继续深入学习W...
  • xmt1139057136
  • xmt1139057136
  • 2016年03月22日 15:05
  • 4467

孙鑫VC++深入详解:Lesson6 Part2 -- MFC菜单更新机制 用该机制实现 Enable or Disable MenuItem

MFC菜单命令更新机制---用该机制实现 Enable or Disable  MenuItem 方法: 1)用资源中的菜单项"剪切"的ClassWizard添加一个UPDATE_COMMAND_U...
  • sergery
  • sergery
  • 2013年07月05日 12:22
  • 4091

【UI更新机制】handler

handler是android给我们提供用来更新UI的一套机制,也是一套消息处理机制,我们可以通过它发送消息,也可以通过它处理消息,如果不遵循这样的机制就没有办法更新UI信息的,就会抛出异常信息。Ha...
  • qq_16580279
  • qq_16580279
  • 2016年09月08日 17:57
  • 151

Log4j2中RollingFile的文件滚动更新机制 一、什么是RollingFile RollingFileAppender是Log4j2中的一种能够实现日志文件滚动更新(rollover)的

http://www.cnblogs.com/yeyang/p/7944899.html Log4j2中RollingFile的文件滚动更新机制 一、什么是RollingFile Rollin...
  • strawbingo
  • strawbingo
  • 2017年12月04日 15:15
  • 152

coreseek索引更新机制 (如果没有文档被索引,则$maxid会设置为0)

coreseek索引更新机制 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明 http://fatal.blogbus.com/logs/45153968.html   = ...
  • u013699800
  • u013699800
  • 2015年08月31日 17:05
  • 331

ui更新机制杂谈

主要是想到了 之前的问题,android 2.2时候 的系统和现在的系统,2.2之前即使直接在子线程更新也是可以的,现在除了个别的控件其他的都要放在主线程里面更新。就分析一下 ProgressBa...
  • u010013687
  • u010013687
  • 2016年03月28日 20:05
  • 648

Android 时间更新机制之网络更新时间

综述:Android网络时间更新,大体分两类。1、moderm相关更新,2、网络更新。本次主要介绍android设备网路时间同步。...
  • hailushijie
  • hailushijie
  • 2015年05月13日 22:36
  • 3403

开源一个适用iOS的数据库表结构更新机制的代码

在iOS上,提供一个数据库表结构更新的机制,保证用户无论从哪个版本安装程序,数据库结构保证适配。 如:用户A的数据库版本是v1,用户B是v2,用户C没装过App;现在,所有用户安装并运行最新App(数...
  • cooldragon
  • cooldragon
  • 2015年06月28日 00:02
  • 3191

Android更新机制(自己服务器和GooglePlay更新)

本片文章主要介绍了自己服务器更新和GooglePlay更新的解决方案,不包含其他第三方(如Umeng、其他应用市场等)更新...
  • duanbokan
  • duanbokan
  • 2016年05月13日 16:30
  • 3148
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC浅析(5) 命令更新机制
举报原因:
原因补充:

(最多只允许输入30个字)