私は 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;
}
};