第3章 ウィンドウを作る その3


さて、今回はイントロダクションで紹介した 雛形プログラムのうちCreateWindow関数について解説します。 プロトタイプを次に示します。

HWND CreateWindow( LPCTSTR lpClassName,    //クラス名 LPCTSTR lpWindowName, //ウィンドウの名前 DWORD dwStyle, //ウィンドウスタイル int x, //X座標 int y, //Y座標 int nWidth, //ウィンドウの横幅 int nHeight, //ウィンドウの高さ HWND hWndParent, //親ウィンドウハンドル(親を作るときはNULL) HMENU hMenu, //メニューハンドル、クラスメニューの時はNULL HANDLE hInstance, //インスタンスハンドル LPVOID lpParam //ウィンドウ作成データ );

引数がいっぱいあって大変ですね。 最初のクラス名はプログラムの最初に出てきたszClassNmeです。 次の、ウィンドウの名前はウィンドウのタイトルバーに表示される ものです。

ウィンドウスタイルには「WS_何とか」を指定します。 通常はWS_OVERLAPPEDWINDOW指定しておくと楽です。 これは、「WS_何とか」をいくつも併せて指定したのと同じになります。

X座標からウィンドウの高さまでは特に説明は必要ないでしょう。 自分で指定するのが面倒くさいときは「CW_USEDEFAULT」を指定して下さい。 ウィンドウズが適当にやってくれます。

親ウィンドウのハンドルは、子供ウィンドウを作るとき必要です。 親を作るときはNULLにして下さい。

メニューハンドルはメニューを 付けるとき必要ですが、クラスメニューを使うときはNULLにしておきます。 クラスメニューというのは、WNDCLASSに登録されたメニューですね。

最後の引数はNULLにしておいて下さい。 そして、この関数の戻り値が作り出したウィンドウの ウィンドウハンドルとなります。このウィンドウに対して 何かするときはこのウィンドウハンドルが必要になります。

さて、ウィンドウを作成したらこれを画面上にどのように表示するかを 決めます。これがShowWindow関数です。 VC++4.2のヘルプには次のように出ています。

BOOL ShowWindow( HWND hWnd, // handle of window int nCmdShow // show state of window );

最初の引数はさっき作ったウィンドウのウィンドウハンドルです。 次の引数はウィンドウの状態を示す整数です。 これは、次のようなものがあります。

SW_SHOW //位置、大きさをそのままで SW_SHOWMAXIMIZED //最大表示 SW_SHOWMINIMIZED //アイコン表示 SW_HIDE //隠しウィンドウにする

他にもまだまだいっぱいあります。ヘルプで調べてみて下さい。 通常はSW_SHOWでよいでしょう。

さて、次にすることはUpdateWindow(hWnd)を実行します。 これは、プロシージャにWM_PAINTメッセージを送ります。 WM_PAINTメッセージについてはまだ解説していませんが 今後頻繁に出てきます。簡単にいえばウィンドウを書き直せ という意味です。

あー、こんなこといくらやってもプログラムなんか作れないよ!

うー、もう少し我慢して読んでください。雛形のプログラムは どんなアプリケーションでもほとんど同じです。 その同じ部分の解説ですので退屈です。でも、普通の入門書に 比べると10分の1位にはしょって解説しています。

次がメッセージループです。 送られてくるメッセージをここで翻訳してプロシージャに送ります。

while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); }

これも、決まった書き方ですのでこのようにして下さい。 いつまで、グルグル回しをしているかというと WM_QUIT(終了)メッセージが来るまでです。

これで、WinMain関数でやっていることを 一通り解説しました。あとは、プロシージャ部分ですが これは、また次回のお楽しみです。


[SDK Index] [総合Index] [Previous Chapter] [Next Chapter]

Update Mar/18/1997 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。