CWndで作るシンプルウィンドウ


■ 概略
ウィンドウアプリケーションを作成する際、ダイアログでなく単なるウィンドウを作成したい場合があります。
例えば、作成するウィンドウ上に絵や図、グラフを表示するだけの場合とかです。
その場合、方法の一つとして何もコントロールの無いダイアログ或いは、ピクチャーコントロールのみのものを作成し、その上に目的の描画を行う方法がありますが、ここではCWndを作成する方法を記します。
■ 作成の手順
このサンプルは、ボタンを1つ持つダイアログプロジェクトで、そのボタンを押すと新しいウィンドウが表示される例です。

1. プロジェクトの作成。
MFCのダイアログプロジェクトを作成します。他の設定はデフォルトのままです。
プロジェクト名は、このサンプルの場合、"swin"です。

2. 画面の作成。
ボタンを一つ追加します。このサンプルの場合、ボタンのタイトルは[ウィンドウの表示]です。

3. CWndクラスの新規作成。
[挿入]の[クラスの新規作成]を選択します。
クラスの種類はMFCのままで、基本クラスを[generic CWnd]に設定します。
クラス名は、このサンプルの場合、"CMyWnd"です。

4. 出来上がったクラスの編集。
CWnd::CreateExにより、ウィンドウを作成します。このサンプルの場合はコンストラクタ内でこの処理を行っています。
ウィンドウの大きさはとりあえず、640x480にしてあります。

LPCTSTR lpszClassName;
CRect rect( 0, 0, 640, 480);
HCURSOR hCursor = 0;
DWORD dwStyle, dwExStyle;

lpszClassName = AfxRegisterWndClass( CS_HREDRAW | CS_VREDRAW, hCursor);
dwExStyle = WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE;
dwStyle = WS_POPUP | WS_CAPTION | WS_VISIBLE | WS_SYSMENU | WS_BORDER | WS_THICKFRAME;

CreateEx( dwExStyle, lpszClassName, _T("Test window"), dwStyle, rect, parent, NULL, NULL);
このサンプルのポイントは、CreateEx内の2つのウィンドウスタイルです。詳細はヘルプのCreateExに載っています。
簡単な描画処理をOnPaint内に追加します。
このサンプルでは、ウィンドウ内を背景色塗りつぶし、中央に文字列を表示します。
また、CMyWndのキャンセルボタンにより自分自身を削除するために、OnNcDestroyの関数を追加し、そこで自分を消去します。

5. ウィンドウ表示処理
あとは、最初に追加したボタンの処理から、新しいウィンドウをnewで作成するだけです。
表示される新しい、ウィンドウですがこのサンプルでは、モーダレスダイアログの様にウィンドウを開いている間も親のウィンドウを操作することができます。
■ ファイルのダウンロード
(MFC6.0 プロジェクトファィル 14KB)