OnKickIdle使用详解
来源:互联网 发布:老虎证券 是人工智能 编辑:程序博客网 时间:2024/06/05 04:42
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赋给该参数。
- OnKickIdle使用详解
- [转]OnKickIdle使用
- pdf详解 iTextSharp 使用详解
- 【Git使用详解】EGit使用详解
- POI使用详解 Apache POI使用详解
- function对象使用使用详解
- CheckStyle使用详解
- VSS使用详解释
- JDom使用详解
- JCoverage使用详解
- 正则表达式使用详解
- showModalDialog(),showModelessDialog()使用详解
- Ghost 使用详解
- SSI使用详解
- GDB使用详解
- SSI使用详解
- SSI使用详解1
- 正则表达式使用详解
- Windows XP + Apache 2.2.4 + PHP 5.2 + MySQL 5.0.18 +eclipse3.2+wampp-2.2.zip+HardCore环境配置说明
- Throughput 吞吐量 和 latency 延迟
- progma 语法
- 谈谈对Java中Unicode、编码的理解
- js实现前台动态添加文本框,后台获取文本框内容
- OnKickIdle使用详解
- 批处理插入数据
- Oracle 動態取周次
- linq to sql 学习(7)linq的分组汇总操作
- STDIN_FILENO与stdio的区别
- MFC的对话框中怎样加入背景音乐
- 看了很多人的面试经验,我也来一段:这段时间的几个面试
- 读取指定网页某区域内链接内容
- Tomcat配置优化