MFC で作成したウィンドウのスタイル変更
WinMain の関数のバージョンでは、 MFC を使用すると、複数の標準のウィンドウ クラスを登録します。通常、 MFC の WinMainを編集しないため、この機能は、 MFC の既定のペインのフォームを変更する機会はありません。この技術情報では、既存のアプリケーションの非常に登録済みウィンドウ クラスの形式を変更する方法について説明します。
新しい MFC アプリケーションの変更のフォーム
Visual C++ 2.0 以降を使用している場合、アプリケーションの作成時にアプリケーション ウィザードの既定のペインの形式を変更できます。アプリケーション ウィザードのユーザー インターフェイス機能ページで、メイン フレーム ウィンドウ、 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) アプリケーションでは、フレームワークの既定のペインの形式は WS_OVERLAPPEDWINDOW と FWS_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) アプリケーションの子ウィンドウのウィンドウ スタイルを変更する必要があります。既定では、アプリケーション ウィザードで作成される MDI アプリケーションは、 MFC で定義されている既定の CMDIChildWnd のクラスを使用します。MDI 子ウィンドウのウィンドウ スタイルを変更するには、 CMDIChildWnd から新しいクラスを派生し、新しいクラスへの参照とプロジェクトの CMDIChildWnd へのすべての参照を置き換えます。多くの場合、アプリケーションの InitInstance のメンバー関数のアプリケーションの CMDIChildWnd への参照はにあります。
MDI アプリケーションで使用される既定のウィンドウの形式は WS_CHILD、 WS_OVERLAPPEDWINDOWと FWS_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 子ウィンドウを作成します。