对话框内控件更新

afxpriv.h has a message, WM_KICKIDLE, that is sent during idle processing. To get dialogs to work with the ON_UPDATE_COMMAND_UI message maps, you need to trap the kick idle message and call UpdateDialogControls.

In a dalog class header, add the following in the message map:

afx_msg LRESULT OnKickIdle(WPARAM , LPARAM );

In the implementation file:

#include <afxpriv.h>

 

In the message map add:

ON_MESSAGE(WM_KICKIDLE, OnKickIdle)

Implement the function:

LRESULT CMyDlg::OnKickIdle(WPARAM wParam, LPARAM lParam)
{
	UpdateDialogControls(this, FALSE);
	return 0;
}

I leave the bDisableIfNoHndler flag as FALSE so buttons without message map entries are not disabled.

You can now use ON_UPDATE_COMMAND_UI message maps for enabling/disabling controls, setting static text, etc.

It works really well when you have two or more radio buttons that enable/disable different groups of controls. Just have one OnUpdate... function for each group of controls that enables/disables depending on the radio button selected, use IsDlgButtonChecked. Then add a message map entry for each control.

To use ON_UPDATE_COMMAND_UI in form views.

The kick idle message doesn't work in form views, but there's another message in afxpriv.h called WM_IDLEUPDATECMDUI, that does.

In a form view class header, add the following in the message map:

afx_msg LRESULT OnIdleUpdateCmdUI(WPARAM , LPARAM );

In the implementation file:

#include <afxpriv.h>

In the message map add:

ON_MESSAGE(WM_IDLEUPDATECMDUI, OnIdleUpdateCmdUI)

Implement the function:

LRESULT CMyFormView::OnIdleUpdateCmdUI(WPARAM wParam, LPARAM)
{
	UpdateDialogControls(this, FALSE);
	return 0L;
}

ON_UPDATE_COMMAND_UI can now be used as described above.

 

Form: http://www.codeguru.com/Cpp/W-D/dislog/commandui/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值