我正在编写一个 WTL Aero 向导,我想将窗口的关闭按钮变灰(它的第一步不需要用户交互并且不能被取消,因此禁用该按钮是非常合适的)。
放置以下代码:
CMenuHandle pMenu = GetSystemMenu(FALSE);
pMenu.EnableMenuItem(SC_CLOSE, FALSE);
inOnInitDialog
不起作用,因为该过程在窗口本身显示在屏幕上之前被调用(ATLASSERT(::IsMenu(m_hMenu));
断言 inEnableMenuItem
在运行时被触发)。
有没有一种优雅的方法来禁用关闭按钮?(我是 WTL 初学者,我希望解决方案尽可能干净)。
这是向导页面代码的最小版本:
#include "stdafx.h"
class MainPage : public CAeroWizardPageImpl<MainPage> {
public:
BEGIN_MSG_MAP(MainPage)
MESSAGE_HANDLER_EX(WM_INITDIALOG, OnInitDialog)
CHAIN_MSG_MAP(__super)
END_MSG_MAP()
enum {
IDD = IDR_MAINFRAME
};
MainPage() : CAeroWizardPageImpl<MainPage>(IDR_MAINFRAME) {
/* Set the wizard's title */
m_headerTitle.LoadString(IDS_INSTALLHEADER);
SetHeaderTitle(m_headerTitle);
}
private:
CString m_headerTitle;
LRESULT OnInitDialog(UINT message, WPARAM wParam, LPARAM lParam) {
UNREFERENCED_PARAMETER(message);
UNREFERENCED_PARAMETER(wParam);
UNREFERENCED_PARAMETER(lParam);
/* Disable the wizard buttons and center the window */
ShowWizardButtons(0, 0);
EnableWizardButtons(PSWIZB_BACK, 0);
CenterWindow();
return TRUE;
}
};