Saturday, January 05, 2008

3.ウィンドウの作成

RegisterClassEx()関数で定義したウィンドウクラスをシステムに登録し終わったら,次にウィンドウを作成する.CreateWindow()関数またはCreateWindowEx()関数を使用:(後者は拡張スタイルも使用できる点だけ前者と異なる.)

HWND CreateWindow(

  • LPCTSTR lpClassName, // クラス名
  • LPCTSTR lpWindowName, // ウィンドウ名,タイトル
  • DWORD dwStyle, // ウィンドウスタイル
  • int x, // x位置
  • int y, // y位置
  • int nWidth, // 幅
  • int nHeight, // 高さ
  • HWND hWndParrent, // 親ウィンドウのハンドル
  • HMENU hMenu, // メニューハンドルまたは子ウィンドウID
  • HINSTANCE hInstance, // インスタンスハンドル
  • LPVOID lpParam // ウィンドウ作成データ

);

まず,...
lpClassNameはWNDCLASSEX構造体のlpszClassNameメンバに指定したウィンドウクラス名を指定.自分で登録したウィンドウクラス以外に,システムで定義されたクラスを使うことができる.(後述)

続いて,...
lpWindowNameはウィンドウの名前,タイトル

続いて,...
dwStyleはウィンドウスタイルを指定.サイズ変更可能,タイトルバーにコントロールメニューボックス,最大化,最小化ボタンを持つ一般的なオーバーラップウィンドウであるWS_OVERLAPPEDWINDOWを指定.

続いて,...
x, yはウィンドウが表示される座標を指定.

続いて,...
nWidth, nHeightはウィンドウの幅,高さ.x,y,nWidth,nHeightそれぞれCW_USEDEFAULTを指定することができる.そうすると適当な位置とサイズをシステムが決めてくれる.

続いて,...
hWndParrentには親ウィンドウのウィンドウハンドルを指定.親がないときはNULL.

続いて,...
hMenuにはメニューを指定.そのほかの使い方もあるが後述.

続いて,...
hInstanceにはインスタンスハンドルを指定.Windows NT/2000/XPは無視される.

続いて,...
lpParamはいろいろ面白い使い方があるが後述.ここではNULL.気になる~

これで登録を行い失敗したらNULLが返ってくる.成功するとウィンドウのハンドルを返される.以後,このウィンドウを操作するにはこのハンドルをいじる

登録が終わるとウィンドウが表示されない.表示するにはShowWindow()関数を使用:

ShowWindow(

  • HWND hWnd, // ウィンドウハンドル
  • int nCmdShow // 表示状態

);

nCmdShowは次の値をとる:

オプション 意味
SW_HIDE 非表示
SW_MAXIMIZE 最大表示
SW_MINIMIZE 最小表示
SW_RESTORE 最大化または最小化されたウィンドウを元のサイズに戻す
SW_SHOW ウィンドウをアクティブにして,現在の位置とサイズで表示
SW_SHOWNORMAL ウィンドウをアクティブにして表示.初めてウィンドウを表示するときはこれを指定.

UpdateWindow()関数はウィンドウを更新する.

BOOL UpdateWindow(

  • HWND hWnd;

);
この関数はどのような役割をもつのかな?プログラムをこの部分をコメントアウトしてもウィンドウは普通に表示された.

その3.p28~p31

No comments: