OnKickIdle使用详解

      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赋给该参数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值