次の方法で共有


MFC で作成したウィンドウのスタイル変更

WinMain 関数のバージョンでは、MFC によって複数の標準のウィンドウ クラスを登録します。 通常、MFC の WinMainを編集しないため、この機能は、MFC の既定のウィンドウ スタイルを変更することはありません。 ここでは、既存のアプリケーションにとって非常に登録済みクラスのウィンドウ スタイルを変更する方法について説明します。

新しい MFC アプリケーションのスタイル

Visual C++ 2.0 以降を使用している場合は、アプリケーションを作成するときは、アプリケーション ウィザードの既定のウィンドウ スタイルを変更できます。 アプリケーション ウィザードの User Interface Features ページで、メイン フレーム ウィンドウで MDI 子ウィンドウのスタイルを変更できます。 いずれかのウィンドウの種類ごとに、フレームの太さ (または薄く太いするため)、次のどちらかを指定する:

  • ウィンドウがコントロールを最小化または最大化されているかどうか。

  • ウィンドウが最初に最小化、最大化されて、またはどちらが必要かどうか。

メイン フレーム ウィンドウの場合、ウィンドウがシステム メニューがあるかどうかを指定できます。 MDI 子ウィンドウの場合、ウィンドウが分割ペインをサポートするかどうかを指定できます。

既存のアプリケーションのスタイル

既存のアプリケーションのウィンドウの属性を変更する場合は、この記事の他の手順に従います。

アプリケーション ウィザードで作成したアプリケーション フレームワークで使用される既定のウィンドウの属性を変更するには、ウィンドウの PreCreateWindow の仮想メンバー関数をオーバーライドします。 PreCreateWindow は アプリケーションが CDocTemplate クラスによって内部的に管理される作成プロセスには、アクセスできるようにします。 フレームワークは、ウィンドウを作成する前に、PreCreateWindow を呼び出します。 PreCreateWindowに渡される CREATESTRUCT の構造の変更によってアプリケーションには、ウィンドウを作成するために使用する属性を変更できます。 たとえば、ウィンドウのキャプションを使用していないことを確認するには、次のビットごとのな操作を使用する:

// cs has been declared as CREATESTRUCT& cs;
cs.style &= ~WS_CAPTION;

CTRLBARS サンプル アプリケーションはウィンドウの属性を変更するには、この方法を示します。 アプリケーションは PreCreateWindowで変更内容によって、関数の基本クラス実装を呼び出す必要がある場合があります。

以下の説明は、SDI の例と MDI のケースについて説明します。

SDI の例

シングル ドキュメント インターフェイス (SDI (SDI) アプリケーションでは、フレームワークの既定のウィンドウ スタイルは WS_OVERLAPPEDWINDOWFWS_ADDTOTITLE のスタイルの組み合わせです。 FWS_ADDTOTITLE は ウィンドウのキャプションに文書のタイトルを追加するようフレームワークに指示する MFC 固有のスタイルです。 SDI アプリケーション ウィンドウの属性を変更するには、アプリケーション ウィザードで CMainFrameという) から派生したクラスの PreCreateWindow 関数 CFrameWnd をオーバーライドします。 たとえば、次のようになります。

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
    // Call the base-class version 
   if( !CFrameWnd::PreCreateWindow(cs) )
      return FALSE;

    // Create a window without min/max buttons or sizable border 
    cs.style = WS_OVERLAPPED | WS_SYSMENU | WS_BORDER;

    // Size the window to 1/3 screen size and center it 
    cs.cy = ::GetSystemMetrics(SM_CYSCREEN) / 3; 
    cs.cx = ::GetSystemMetrics(SM_CXSCREEN) / 3; 
    cs.y = ((cs.cy * 3) - cs.cy) / 2; 
    cs.x = ((cs.cx * 3) - cs.cx) / 2;

   return TRUE;
}

このコードによって、大きな境界なしで外部のメイン フレーム ウィンドウを最小化、最大化ボタンを作成します。 ウィンドウが画面に重点を置いています。

MDI の例

少しより多くの作業がマルチ ドキュメント インターフェイス アプリケーション (MDI) の子ウィンドウのウィンドウ スタイルを変更する必要があります。 既定では、MFC のアプリケーション ウィザードで作成される MDI アプリケーション定義された既定の CMDIChildWnd クラスを使用します。 MDI 子ウィンドウのウィンドウ スタイルを変更するには、CMDIChildWnd から新しいクラスを派生し、新しいクラスへの参照をプロジェクトに CMDIChildWnd へのすべての参照を置き換える必要があります。 多くの場合、アプリケーションの CMDIChildWnd への参照はアプリケーションの InitInstance のメンバー関数です。

MDI アプリケーションで使用される既定のウィンドウ スタイルは WS_CHILDWS_OVERLAPPEDWINDOWFWS_ADDTOTITLE のスタイルの組み合わせです。 MDI アプリケーションの子ウィンドウのウィンドウの属性を変更するには、CMDIChildWndから派生したクラスの PreCreateWindow 関数をオーバーライドします。 たとえば、次のようになります。

BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs)
{
   // Create a child window without the maximize button 
    cs.style &= ~WS_MAXIMIZEBOX; 

   return CMDIChildWnd::PreCreateWindow(cs);
}

このコードは、最大化ボタンなしで MDI 子ウィンドウを作成します。

さらに詳しくは次のトピックをクリックしてください

参照

概念

フレーム ウィンドウ スタイル (C++)