クローズボタンを無効にする.
MFC
CMenu* pSysMenu = GetSystemMenu(FALSE);
pSysMenu->EnableMenuItem(SC_CLOSE, MF_GRAYED);
SDK
EnableMenuItem( GetSystemMenu(Handle, NULL), SC_CLOSE, MF_GRAYED);
タイトルバー右端のボタンはシステムメニューと連動している.
SC_CLOSE 以外は以下のとおり.
SC_MAXIMIZE 最大化
SC_MINIMIZE 最小化
SC_SIZE サイズ変更
また, EnableMenuItem() などに渡すフラグの種類は以下のとおり.
MF_GRAYED 無効化グレー表示
MF_DISABLED 無効化(色変更なし)
MF_DELETE 削除
しかし,最大化ボタンは上記の方法では無効に出来ない.
CMenu* pSysMenu = GetSystemMenu(FALSE);
pSysMenu->EnableMenuItem(SC_CLOSE, MF_GRAYED);
// 最大化を無効化
pSysMenu->EnableMenuItem(SC_MAXIMIZE, MF_GRAYED); // これが無理
最大化ボタンを無効化するには以下の様にする.
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
cs.style &= ~WS_MAXIMIZEBOX;
return TRUE;
}
プログラムの途中で無効化する場合は以下の様にする.
HWND hWnd = AfxGetMainWnd()->m_hWnd;
LONG lStyle = GetWindowLong(hWnd, GWL_STYLE);
lStyle &= ~WS_MAXIMIZEBOX;
SetWindowLong(hWnd, GWL_STYLE, lStyle);
上記では最大化が消去されそうであるが,実際にはグレーダウンする.
参照
MDI 子ウィンドウの閉じるボタン無効
MDI 子ウィンドウの最大化ボタン無効
最大化などの無効