如何在对话框中使用UPDATE_COMMAND_UI机制?
来源:互联网 发布:zbrush 4r8 for mac 编辑:程序博客网 时间:2024/05/29 06:58
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(),这个函数依次对 对话框上的控件发CN_UPDATE_COMMAND_UI消息。UpdateDialogControls()的函数原型:
void CWnd::UpdateDialogControls(CCmdTarget* pTarget , BOOL bDisableIfNoHandler );
pTarget 标示处理CN_UPDATE_COMMAND_UI消息的窗口,因为这些更新句柄经常是在与对话框自身相关联的C++类中实现的,因此,通常把this赋给该参数。
源文件地址:
http://blog.csdn.net/yjkwf/archive/2010/03/05/5349574.aspx
- 如何在对话框中使用UPDATE_COMMAND_UI机制?
- 4.12--如何在对话框中使用UPDATE_COMMAND_UI机制?
- 3.30--如何在 程序清单视图内 使用UPDATE_COMMAND_UI机制?
- 3.30如何在程序清单视图内使用UPDATE_COMMAND_UI机制?
- 如何在对话框中使用UPDATECOMMANDUI机制-
- 如何在SVG中使用对话框
- 如何在对话框中使用IsKindOf函数
- 如何在ajax中使用弹出对话框
- 如何在ASP.NET中使用弹出对话框?
- 如何在动态库中使用对话框资源(转)
- 如何在MFC中创建和使用对话框
- 如何在动态库中使用对话框资源(转) .
- 让对话框对UPDATE_COMMAND_UI生效
- 让对话框对UPDATE_COMMAND_UI生效
- 让对话框对UPDATE_COMMAND_UI生效
- 让对话框对UPDATE_COMMAND_UI生效
- 让对话框对UPDATE_COMMAND_UI生效
- 让对话框对UPDATE_COMMAND_UI生效
- JavaScript弹出窗口DIV层效果代码
- 在Flex几个通用Chart图形中画指定值的线条(指定刻度的线条)
- 802.11基本传输方式-信道竞争机制及QoS的实现机制
- 判断元素是否为HTMLElement元素
- 闲着,说点事
- 如何在对话框中使用UPDATE_COMMAND_UI机制?
- 网站开发人员应该知道的62件事
- WinCE5.0中文模拟器SDK(VS2005)的配置
- HP(惠普)大中华区总裁孙振耀退休感言 (zz)
- 千军易得一将难求!
- 使用 ipmitool 实现 Linux 系统下对服务器的 ipmi 管理
- 01背包问题(动态规划DP)
- 关于log对数运算的笔记
- MyEclipse_8.5+flex_4+Blazeds配置