源文件地址:http://blog.csdn.net/yjkwf/archive/2010/03/05/5349574.aspx

UPDATE_COMMAND_UI机制对于动态的把 通过检查 或通过激活或失效 菜单命令和工具栏按钮 而发生变化的应用程序的状态 反馈给用户是非常重要的。不幸的是,ClassWizard并不支持直接为对话框加入UPDATE_COMMAND_UI句柄,然而通过努力还是能够利用UPDATE_COMMAND_UI机制来动态的更新对话框的。

第一步:手工为对话框类增加一个WM_KICKIDLE私有的MFC消息句柄,实现这些,遵循以下步骤:

1a、包含#include <afxpriv.h> ,该头文件里定义了这个消息

1b、在对话框类头文件里加入OnKickIdle()函数原型。

afx_msg void OnKickIdle();

1c、增加该消息的消息映射宏

ON_MESSAGE_VOID(WM_KICKIDLE , OnKickIdle)

1d、实现该函数

void CDemoDlg::OnKickIdle()
{
UpdateDialogControls(this,false);
}

第二步:为每一个需要检查的控件加入UPDATE_COMMAND_UI消息句柄,通过pCmdUI来完成其工作。

2a、在对话框类头文件里加入OnUpdateEmpty()函数原型。

afx_msg void OnUpdateEmpty(CCmdUI* pCmdUI);

2b、增加该消息的消息映射宏

ON_UPDATE_COMMAND_UI(IDC_EMPTY , OnUpdateEmpty)

2c、实现该函数

void CDemoDlg::OnUpdateEmpty(CCmdUI* pCmdUI)
{
pCmdUI->Enable(m_edtEdit.GetWindowTextLength()>0);
}

编码结束......


解释:

在空闲处理过程中,MFC把WM_IDLEUPDATECMDUI消息发送给主框架窗口和其直接子窗口----工具栏、状态栏、其视图----随后它们依次用CN_UPDATE_COMMAND_UI消息更新自身。然而,因为对话框不是主框架窗口的子窗口,所以对话框开始收不到WM_IDLEUPDATECMDUI消息。

为了给对话框一个实现它自己的空闲进程的机会,MFC定义了私有的WM_KICKIDLE消息,当对话框处于空闲进程时,这个消息自动发送给对话框-----只要队列中没有其它的消息在等待。

可以利用WM_KICKIDLE消息来调用UpdateDialogControls(),这个函数依次对 对话框上www.beateas.com,昱昱炎炎的控件发CN_UPDATE_COMMAND_UI消息。UpdateDialogC

内置英特尔至强 联想服务器助力广发证券信息化建设

ontrols()的函数原型:

void CWnd::UpdateDialogControls(CCmdTarget* pTarget ,684153 BOOL bDisableIfNoHandler );

pTarget 标示处理CN_UPDATE_COMMAND_UI消息的窗口,因为这些更新句柄经常是在与对话框自身相关联的C++类中实现的,因此,通常把this赋给该参数。

源文件地址:

http://blog.csdn.net/yjkwf/archive/2010/03/05/5349574.aspx

如何在对话框中使用UPDATECOMMANDUI机制-相关推荐

  1. VC++在对话框中加入属性页

    当一个基于对话框的程序中有相当多的控件时,你一定会想到使用属性页来将这些控件分类放置.本文针对这种方法来讨论几种可能实现的方案. 方案一 本方案的例子请见源代码打包文件中的Property1部分 在对 ...

  2. 【转载】在对话框中加入属性页

    原文地址:http://www.vckbase.com/document/viewdoc/?id=398 在对话框中加入属性页 作者:黄晨量 下载本文全部源代码 当一个基于对话框的程序中有相当多的控件 ...

  3. 利用tab_control控件在对话框中加入属性页的方法详细介绍

    在对话框中加入属性页 方案一 在对话框上放置一个Tab Control的控件,再在对话框上放置所需的控件(本例放置了2个按钮,试图在每个标签中显示一个).然后利用Class Wizard来为Tab C ...

  4. 在对话框中加入属性页

    资料来源 http://www.vckbase.com/document/viewdoc/?id=398 在对话框中加入属性页 作者:黄晨量 下载本文全部源代码 当一个基于对话框的程序中有相当多的控件 ...

  5. 对话框中加入标签页的5种方法

    (2008-07-08 15:25 博客搬家拾遗) 标签页是MFC控件里有一点难用的东西,今天看到了一篇相关文章,觉得写得比较系统,而且浅显易懂,特地转来,与大家分享的同时也留备自己以后查用. (以下 ...

  6. 对话框中WaitForSingleObject等待线程退出导致程序阻塞的原因及解决

    今天在调试程序中发现了程序中出现的一个问题,具体如下: 在对话框中新建一个线程worker thread,当用户点击cancel时,通知该线程函数退出,同时用WaitForSingleObject等待 ...

  7. 在MFC对话框中显示html网页

    最近在写一个小软件,想在MFC对话框中显示帮助文档,都是html格式的,上网找了好多资料,用一个CHtmlCtrl类的东西,但是网上找的这个类放在VS2005下编译不过去,老是提示错误.于是几经修改, ...

  8. java弹出对话框的三个命令_Java中弹出对话框中的几种方式

    Java中弹出对话框中的几种方式 2019年12月06日 阅读数:20 这篇文章主要向大家介绍Java中弹出对话框中的几种方式,主要内容包括基础应用.实用技巧.原理机制等方面,希望对大家有所帮助. 1 ...

  9. 「前端面试题系列7」Javascript 中的事件机制(从原生到框架)

    前言 这是前端面试题系列的第 7 篇,你可能错过了前面的篇章,可以在这里找到: 理解函数的柯里化 ES6 中箭头函数的用法 this 的原理以及用法 伪类与伪元素的区别及实战 如何实现一个圣杯布局? ...

最新文章

  1. Ubuntu中安装sqldeveloper出现的问题及其解决方法
  2. python templates_详解Python的Django框架中的templates设置
  3. mysql怎么禁止远程连接_mysql禁止远程访问
  4. DCMTK:DSRDocumentTree,DSRDocumentSubTree,DSRDocumentTreeNode和DSRContentItem类的测试程序
  5. linearlayout设置最大高度_一句话掌握一消建筑高度计算方法,先收藏!
  6. php模拟环境搭建,PHP环境搭建最新方法
  7. PostgreSQL学习手册(PL/pgSQL过程语言)【转】
  8. 被苹果摆了一道的高通,亮出了一张“小米”牌
  9. 高通又失一员大将,英特尔成功挖角高通CFO
  10. vue php 架构目录,vuex 项目结构目录及一些简单配置介绍
  11. 服务器虚拟化和vcpu介绍
  12. 两金压降两金指什么_什么是两金压降
  13. HDOJ4699 Editor 栈
  14. aspose-word的简单使用以及转pdf线上乱码
  15. 论我是如何被自己搭建的聊天机器人气死的(自己的搞笑经历)
  16. 微信小程序webview内嵌h5页面
  17. uc浏览器怎么看历史记录 uc浏览器网页历史记录查看方法
  18. 金九银十,一个新的王者在8月即将加冕——Treasure project(TPC)重磅来袭,你参与了吗?
  19. C语言求n的阶乘的方法总结
  20. 美国计算机游戏设计专业排名,美国游戏设计专业大学排名TOP5推荐!

热门文章

  1. C4D R19怎么设置为中文
  2. 自动化测试工程师所用软件,【自动化测试工程师(软件)软件工程师面试题目|面试经验】-看准网...
  3. csgo显示服务器怎么办,csgo社区服务器进不去
  4. 身份证处理工具类(java)
  5. Java中如何遍历List , Set, Map
  6. Oracle期末考试复习
  7. php实现单笔转账到支付宝功能
  8. Shell编程~脚本cheo命令
  9. 支付宝沙箱环境使用详解
  10. 无损放大图片怎么做?工具分享