Last Updated 2004/07/06
Programming Tips Visual C++ MFC MDI  索 引 
MDI 子ウィンドウの最大化ボタン無効
2004/07/06

MDI 子ウィンドウの閉じるボタンは「MDI 子ウィンドウの閉じるボタン無効」で可能である.
しかし,最大化最小化ボタンは同じ方法では実現できない.

SDI の最大化最小化ボタンを削除するには以下の方法で行う.
    lwsStyle = GetWindowLong(hWnd, GWL_STYLE);
    lwsStyle = lwsStyle & ~(WS_MAXIMIZEBOX | WS_MINIMIZEBOX);
    lRet = SetWindowLong(hWnd, GWL_STYLE, lwsStyle);

これを MDI の子ウィンドウにあてはめると,
    DWORD dwStyle = ::GetWindowLong(m_hWnd, GWL_STYLE);
    dwStyle  = dwStyle & ~(WS_MAXIMIZEBOX | WS_MINIMIZEBOX);
    DWORD dwRet = ::SetWindowLong(m_hWnd, GWL_STYLE, dwStyle);

    GetMDIFrame()->DrawMenuBar();

最大化最小化ボタンは見た目変化なしだが,ボタンの機能は削除されている.
(最大化の場合に無効にすると変化なしで機能はありとなる)

なんとも中途半端である.

MDI の子ウィンドウ全てのシステムメニューを消してよければ,CChildFrame クラス
(CMDIChildWnd クラスから派生したクラス)の PreCreateWindow() に以下を追加する.

cs.style = WS_CHILD | WS_VISIBLE | WS_OVERLAPPED | WS_CAPTION 
           | FWS_ADDTOTITLE | WS_THICKFRAME | WS_MINIMIZEBOX 
           | WS_MAXIMIZEBOX | WS_MAXIMIZE;

最後の WS_MINIMIZEBOX と WS_MAXIMIZEBOX を付けるか否かは子ウインドウの使われ方による.
MDI で SDI ぽく見せるのであれば付ける.


参照
MDI 子ウィンドウの閉じるボタン無効
コントロールボタン無効
前後のTips
MDI 子ウィンドウの最大化ボタン無効

DSS ProgrammingTipsCGI Ver2.02