Я пишу мастер WTL Aero, и я хотел бы седеть из окна Close (первый шаг не требует взаимодействия с пользователем и не может быть отменен, поэтому отключение кнопки отлично подходит).Окрашивание кнопки закрытия мастера в WTL
Собираем следующий код:
CMenuHandle pMenu = GetSystemMenu(FALSE);
pMenu.EnableMenuItem(SC_CLOSE, FALSE);
в OnInitDialog
не работает, так как процедура вызывается перед само окно выводится на экран (ATLASSERT(::IsMenu(m_hMenu));
утверждение EnableMenuItem
будет запнуться во время выполнения).
Есть ли элегантный способ отключения кнопки «Закрыть»? (Я начинаю 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;
}
};