偽SDIスタイル

in

WindowsアプリにあるMDIというインタフェースは個人的には大嫌いなので(Accessの使いにくさっていったらない)できる限りSDIとして設計するようこころがけているのですが、いま、仕掛かり中のアプリケーションは政治的理由もあってMDIテンプレートから作成しています。まぁ、プログラマが社内の政治的問題を気にしているようではおしまいですが仕方がない。状況によっては簡単に機能要件がひっくり返ってしまうのでその場合どうしても新しいWindowを作らざるを得ず最初からこっそりMDIで作っておくが得策なんで...

まあ、それで必要があるまで偽SDIスタイルにしておくためのダミーコード。

BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs)
{
  // TODO: CREATESTRUCT cs を変更して、Window クラスまたはスタイルを変更します。
  if( !CMDIChildWnd::PreCreateWindow(cs) )
    return FALSE;
  
  // ----------------------------------------------------
  // とりあえず必要があるまでSDIスタイルにしておく
  // ----------------------------------------------------
  cs.style &= ~(WS_MAXIMIZEBOX|WS_MINIMIZEBOX|WS_SYSMENU);
  return TRUE;
}

最初は最大小化ボタンと閉じるボタンを外せば簡単にできると思っていたのですが、子ウィンドウが最大化されている状態では、最大化ボタンは「元に戻る」のチップスがでているとおり、disableになってくれませんでした。いろいろ試してWS_SYSMENUを追加することでうまくいきました。もちろん、偽SDIスタイルですから子ウィンドウは最大化しておく必要があります。

以上、つまらないチップスメモでした。まあ、見た目ができてりゃそれでいい人たちばっかりですから...

この記事のトラックバックURL:

http://hippos-lab.com/blog/trackback/295

Comments