ITメモ
Make SiteMap C++




【C++】ウィンドウの生成

【C++】
ウィンドウの生成




Windowsウィンドウ作成プログラム


#include <windows.h>
#include <tchar.h>

// プロトタイプ宣言
HWND Create(HINSTANCE hInst);
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp);


// 開始位置
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, int showCmd)
{
HWND hWnd;
MSG msg;

// ウィンドウを作成する
hWnd = Create( hInst );
if( hWnd == NULL )
{
MessageBox( NULL, _T("ウィンドウの作成に失敗しました"), _T("エラー"), MB_OK );
return 1;
}

// ウィンドウを表示する
ShowWindow( hWnd, SW_SHOW );
UpdateWindow( hWnd );

// メッセージループ
while( 1 )
{
BOOL ret = GetMessage( &msg, NULL, 0, 0 ); // メッセージを取得する
if( ret == 0 || ret == -1 )
{
// アプリケーションを終了させるメッセージが来ていたら、
// あるいは GetMessage() が失敗したら( -1 が返されたら )、ループを抜ける
break;
}
else
{
// メッセージを処理する
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}

return 0;
}



// ウィンドウを作成する
HWND Create(HINSTANCE hInst)
{
WNDCLASSEX wc;

// ウィンドウクラスの情報を設定
wc.cbSize = sizeof(wc); // 構造体サイズ
wc.style = CS_HREDRAW | CS_VREDRAW; // スタイル
wc.lpfnWndProc = WndProc; // ウィンドウプロシージャ
wc.cbClsExtra = 0; // 拡張情報1
wc.cbWndExtra = 0; // 拡張情報2
wc.hInstance = hInst; // インスタンスハンドル
wc.hIcon = (HICON)LoadImage( // アイコン
NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON,
0, 0, LR_DEFAULTSIZE | LR_SHARED
);
wc.hIconSm = wc.hIcon; // 子アイコン
wc.hCursor = (HCURSOR)LoadImage( // マウスカーソル
NULL, MAKEINTRESOURCE(IDC_ARROW), IMAGE_CURSOR,
0, 0, LR_DEFAULTSIZE | LR_SHARED
);
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // ウィンドウ背景
wc.lpszMenuName = NULL; // メニュー名
wc.lpszClassName = _T("Default Class Name");// ウィンドウクラス名

// ウィンドウクラスを登録する
if( RegisterClassEx( &wc ) == 0 ){ return NULL; }

// ウィンドウを作成する
return CreateWindow(
wc.lpszClassName, // ウィンドウクラス名
_T("Sample Program"), // タイトルバーに表示する文字列
WS_OVERLAPPEDWINDOW, // ウィンドウの種類
CW_USEDEFAULT, // ウィンドウを表示する位置(X座標)
CW_USEDEFAULT, // ウィンドウを表示する位置(Y座標)
CW_USEDEFAULT, // ウィンドウの幅
CW_USEDEFAULT, // ウィンドウの高さ
NULL, // 親ウィンドウのウィンドウハンドル
NULL, // メニューハンドル
hInst, // インスタンスハンドル
NULL // その他の作成データ
);
}

// ウィンドウプロシージャ
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
switch( msg )
{
case WM_DESTROY:
PostQuitMessage( 0 );
return 0;
}

return DefWindowProc( hWnd, msg, wp, lp );
}



ウィンドウ生成の方法



ウィンドウの生成
ウィンドウクラスの登録
ウィンドウの生成



ウィンドウクラスの登録
ウィンドウクラスの登録にはWNDCLASS構造体型変数を用いる。

typedef struct _WNDCLASS {
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HANDLE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR lpszMenuName;
LPCTSTR lpszClassName;
} WNDCLASS;



_WNDCLASS

UINT style; ウィンドウクラスの基本スタイルを表す定数を指定
この場は、よく使われる CS_HREDRAW と CS_VREDRAWを用いましょう
CS_HREDRAW は水平に、ウィンドウサイズが変更されるとウィンドウの内容を再描画
CS_VREDRAW は垂直に、ウィンドウサイズが変更されるとウィンドウの内容を再描画
WNDPROC lpfnWndProc; WNDPROC 型とは、ウィンドウプロシージャと呼ばれる関数のポインタ型です
lpfnWndProc にウィンドウプロシージャを設定します
int cbClsExtra; 次の二つの引数 cbClsExtra と cbWndExtra は
クラス構造体、ウィンドウ構造体の追加領域をバイト単位で予約するものです
通常はその必要がないので、多くの場合ここは 0 を指定
int cbWndExtra; 次の二つの引数 cbClsExtra と cbWndExtra は
クラス構造体、ウィンドウ構造体の追加領域をバイト単位で予約するものです
通常はその必要がないので、多くの場合ここは 0 を指定
HANDLE hInstance; インスタンスハンドルを渡します
HICON hIcon; タスクバーやタイトルバーに表示されるアイコンのビットマップを指定。
HICON 型は、アイコンのハンドルです
アイコンのビットマップを渡すにはLoadIcon()関数を使用します
HICON LoadIcon(HINSTANCE hInstance , LPCTSTR lpIconName); hInstance には、アイコンのリソースが入っているモジュールのインスタンスを指定。が
システム定義のアイコンの場合は NULL にします
HCURSOR hCursor; ウィンドウのクライアントエリア上のマウスカーソルを指定。
HCURSOR 型 とは、カーソルのハンドルです
定義済みのカーソルは LoadCursor() 関数で取得します
HCURSOR LoadCursor(HINSTANCE hInstance , LPCTSTR lpCursorName); カーソルのリソースが入っているモジュールのインスタンスを指定。
アイコン同様に、システム定義のカーソルの場合は NULL を指定。
カーソルの名前を指定。
第一引数が NULL であれば、定義されているマウスカーソルの定数を指定。
HBRUSH hbrBackground; クライアントエリアの背景色を指定。
ここで渡すのは HBRUSH 型の、ブラシのハンドルです
ブラシとは、グラフィックスの概念なので詳しくは後記します

ブラシのハンドルはGetStockObject()関数を使用します
この関数は、定義済みのブラシやフォントのハンドルを取得できます
HGDIOBJ GetStockObject( int fnObject ); fnObject に、取得したいハンドルの定数を指定。
この関数はブラシのほかにも、ペン、パレットといったハンドルも取得できます
グラフィックス関係の説明の時に、さらに詳しく解説します
白いブラシはWHITE_BRUSHを指定。

この関数の戻り値は HBRUSH ではありません
HGDIOBJ 型 は、グラフィック関連のハンドルです
先ほど説明した通り、この関数はペンやフォントのハンドルも返します
要求する型、HBRUSH にキャストすれば問題ありません(しなくても良いです)
LPCTSTR lpszMenuName; クラスメニューを指定。が
今回のプログラムにメニューはないので、ここは NULL としましょう
LPCTSTR lpszClassName; このウィンドウクラスの名前です
CreateWindow() 関数の第一引数で指定しましたね

これで、WNDCLASS 型変数の初期化ができますね
しかし、この時点ではまだウィンドウクラスは登録されていません
次に、ここで初期化した変数をRegisterClass()関数に渡します
この関数にウィンドウクラスを渡して、はじめて登録されます
ATOM RegisterClass(CONST WNDCLASS *lpwcx); lpwcx に、WNDCLASS型の変数のポインタを渡します
成功すると登録されたクラスを一意的に識別するアトムというものが返ります
アトムについて、この場では説明しません
ただ、失敗すると 0 が返って来るので、基本的にエラーチェックしましょう



WNDCLASSEX(構造体)

UINT cbSize; WNDCLASSEXのメモリサイズを指定。sizeof(WNDCLASSEX)を代入する。
UINT style; 表示するウインドウのスタイルを設定します。CSで始まる値を指定。。"|"で複数指定することもできる。
例::CS_HREDRAW|CS_VREDRAW;
水平垂直方向にウインドウサイズが変更されたときウインドウを再作画する。 
WNDPROC lpfnWndProc ウィンドウプロシージャのアドレスを指定する。
(WNDPROC)プロシージャ名;等を代入する。
WNDPROC lpfnWndProc; 通常は使わないのでとりあえず0を設定
int cbClsExtra; 通常は使わないのでとりあえず0を設定
HANDLE hInstance; WinMainのパラメータのインスタンスハンドルを設定。
HICON hIcon; 使用するアイコンを指定する。LoadIcon関数を使用して行う。
LoadIcon(HINSTANCE hInstance,LPCTSTR lpIconName) 第1パラメータは、Windowsがもっているアイコンを使うならNULL。自作のアイコンを使う場合は、インスタンスハンドル(WinMainの第1パラメータと同じ)を指定する。
第2パラメータはアイコンの名前を指定。
Windowsがもっているアイコンを使用する場合は以下のものを使用。
名称
説明
IDI_APPLICATION
アプリケーションアイコン
IDI_ASTERISK
アスタリスクのアイコン (吹き出しの中に i の文字)
IDI_EXCLAMATION
感嘆符のアイコン
IDI_HAND
ストップ印のアイコン
IDI_QUESTION
疑問符のアイコン
IDI_WINLOGO
Windows ロゴアイコン
自作の場合は、名前に(MAKEINTRESOURCE)をつけて型変換を行うこと。

wndclass.hIcon = LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON1));
HCURSOR hCursor; マウスカーソルを指定する。Windowsが提供するマウスカーソルを使う場合は以下のようにする。
LoadCursor(NULL,IDC_ARROW); 自作したマウスカーソルを使用することも可能。
HBRUSH hbrBackground; ウインドウのクライアント領域の背景色を設定する。
(HBRUSH)(COLOR_WINDOW + 1);
で、白色を表す。
LPCTSTR lpszMenuName; Windowにつけるメニューを設定する。
メニューがなければNULLを設定。
LPCTSTR lpszClassName; Windowクラスの名前。適当につけてください。
HICON hIconSm; HICON hIconを参照。



小さいアイコンが設定された場合の情報を記述。

ウィンドウの生成 - CreateWindow()

HWND CreateWindow(
LPCTSTR lpClassName ,
LPCTSTR lpWindowName,
DWORD dwStyle ,
int x ,
int y ,
int nWidth ,
int nHeight ,
HWND hWndParent ,
HMENU hMenu ,
HANDLE hInstance ,
LPVOID lpParam
);



戻り値 HWND型
これはウィンドウハンドルと呼ばれるもの
LPCTSTR lpClassName 重要
ウィンドウクラスの名前を指定
LPCTSTR lpWindowName ウィンドウの名前を指定
DWORD dwStyle 重要
ウィンドウのスタイルを設定します
これは用意された多くの定数パラメータのいずれかを指定。
例えば、境界線を持つウィンドウならWS_BORDER
タイトルバーを持つウィンドウならWS_CAPTIONをここで指定します
int x ウィンドウの初期位置です。xはX軸、yはY軸を表します
この初期位置は、デスクトップの左上を 0 , 0 としてピクセルで指定します
int y ウィンドウの初期位置です。xはX軸、yはY軸を表します
この初期位置は、デスクトップの左上を 0 , 0 としてピクセルで指定します
int nWidth nWidth , nHeight は、ウィンドウ幅をピクセルで指定します
nWidth は横幅、nHeight は縦幅です
int nHeight nWidth , nHeight は、ウィンドウ幅をピクセルで指定します
nWidth は横幅、nHeight は縦幅です
HWND hWndParent 親ウィンドウ、またはオーナーウィンドウとなるハンドルを指定。
親ウィンドウを持つ子ウィンドウの表示は、親ウィンドウのクライアントエリアに限定され
オーナーウィンドウを持つ場合、オーナーが破棄されるとそのウィンドウも破棄されます
ウィンドウの親子関係は、後ほど詳しく解説します
今はトップレベルのウィンドウだけなので NULL を指定してください
HMENU hMenu メニューのハンドルを渡します
メニューについても後記します。今はないので NULL を指定してください
因みに HMENU 型 は、メニューのハンドルです
HANDLE hInstance インスタンスハンドルを渡します
LPVOID lpParam 今は NULL とします
これは、メッセージと呼ばれるものに渡されるパラメータを指定するものです
LPVOID 型 は、 void * に相当する汎用ポインタ型 です



定数 解説
BUTTON ユーザーがクリックできるボタンを表す、小さな長方形の子ウィンドウです
ボタンコントロールは単独またはグループの両方で使え
ラベルを付けることもテキストなしで表示することもできます
COMBOBOX コンボボックスです
リストボックスの部分は、常に表示させておくか
ユーザーの指示によってドロップダウンするようにします
コンボボックスのスタイルによって、ユーザーが選択フィールドの内容を
編集できるかできないかが決まります
EDIT キーボードからテキストを入力できる、長方形の子ウィンドウです
エディットコントロールは可変ピッチのシステムフォントを使用し
ANSI 文字セットの文字を表示します
フォントを変更するよう、WM_SETFONT メッセージを
エディットコントロールに送ることもできます
エディットコントロールは、タブ文字をタブ長と同じ長さの空白文字列に展開します
タブストップは 8 文字間隔で設定されているものとみなされます
LISTBOX 文字列のリスト (一覧) です
クリックで文字列を選択できます
また、このとき、親ウィンドウに通知メッセージが送られます
コントロールウィンドウより長いリストをスクロールするには
リストボックスのスクロールバーを使います
リストボックスは、スクロールバーを必要に応じて
自動的に表示したり消したりします
MDICLIENT MDI クライアントウィンドウです
このウィンドウは、MDI アプリケーションの子ウィンドウを
制御するメッセージを受け取ります
推奨されるスタイルビットは、WS_CLIPCHILDREN と WS_CHILD です
スクロールバーを付けるときは、WS_HSCROLL と WS_VSCROLL を使います
SCROLLBAR つまみを持ち、両端に矢印ボタンがある長方形です
ユーザーがコントロールをクリックするたびに
スクロールバーは親ウィンドウに通知メッセージを送ります
つまみの位置の更新は、必要に応じて親ウィンドウが行います
スクロールバークラスは、サイズボックスコントロールも含みます
STATIC 簡単なテキストのフィールド、ボックス
または他のコントロールにラベルを付けたり、囲んだり
分離したりするときに使う長方形です
スタティックコントロールは入出力を行いません
dw パラメータでは、次のウィンドウスタイルが指定できます
スタイル
WS_BORDER 境界線を持つウィンドウを作成。
WS_CAPTION タイトルバーを持つウィンドウを作成します
WS_BORDER スタイルも含みます
WS_CHILD 子ウィンドウを定義します
WS_POPUP スタイルとは使えません
WS_CHILDWINDOW WS_CHILD スタイルと同じ。
WS_CLIPCHILDREN 親ウィンドウ内部を描画するとき
子ウィンドウが占める領域を除外します
このスタイルは、親ウィンドウを作成するときに使います
WS_CLIPSIBLINGS 兄弟関係にある子ウィンドウをクリップします
つまり、ある特定の子ウィンドウが WM_PAINT メッセージを受け取ると
WS_CLIPSIBLINGS スタイルは、更新する子ウィンドウの領域から
オーバーラップする他のすべての子ウィンドウをクリップします
WS_CLIPSIBLINGS が指定されていない場合に
子ウィンドウがオーバーラップしていると
子ウィンドウのクライアント領域内を描画するときに
重なっている子ウィンドウのクライアント領域内にも描画されます
WS_DISABLED 無効 (使用不能) なウィンドウを作成します
無効なウィンドウは、有効にするまで
ユーザーからの入力を受け取りません
WS_DLGFRAME ダイアログボックスで一般的に使われるスタイルの
境界を持つウィンドウを作成。
WS_GROUP コントロールグループの最初のコントロールを指定。
このコントロールから、次に WS_GROUP スタイルのコントロールがくるまでに定義されたコントロールが、コントロールグループになる
各グループの最初のコントロールは、たいてい、グループからグループへユーザーが移動できる
WS_TABSTOP スタイルを持ちます
ユーザーは、方向キーで、グループ内のあるコントロールから
次のコントロールに入力フォーカスを変更。
WS_HSCROLL 水平スクロールバーを持つウィンドウを作成。
WS_ICONIC WS_MINIMIZE スタイルと同じ。
WS_MAXIMIZE ウィンドウを最大化の状態で作成します
WS_MAXIMIZEBOX 最大化ボタンを持つウィンドウを作成します
WS_SYSMENU スタイルも指定する必要があります
WS_EX_CONTEXTHELP スタイルと組み合わせることはできません
WS_MINIMIZE ウィンドウを最小化の状態で作成します
WS_ICONIC スタイルと同じ。
WS_MINIMIZEBOX 最小化ボタンを持つウィンドウを作成します
WS_SYSMENU スタイルも指定する必要があります
WS_EX_CONTEXTHELP スタイルと組み合わせることはできません
WS_OVERLAPPED オーバーラップウィンドウを作成します
オーバーラップウィンドウはタイトルと枠を持ちます
WS_TILED スタイルと同じ。
WS_OVERLAPPEDWINDOW WS_OVERLAPPED スタイル、WS_CAPTION スタイル
WS_SYSMENU スタイル、WS_THICKFRAME スタイル
WS_MINIMIZEBOX スタイル、WS_MAXIMIZEBOX スタイルを持つ
オーバーラップウィンドウを作成。
WS_POPUP ポップアップウィンドウを作成します
このスタイルは、WS_CHILD スタイルと一緒には使えません
WS_POPUPWINDOW WS_BORDER スタイル、WS_POPUP スタイル
WS_SYSMENU スタイルを持つポップアップウィンドウを作成します
ウィンドウメニューを可視化するには、WS_CAPTION スタイルと
WS_POPUPWINDOW スタイルを組み合わせる必要があります
WS_SIZEBOX WS_THICKFRAME スタイルと同じ。
WS_SYSMENU タイトルバー上にウィンドウメニューボックスを持つウィンドウを作成します
WS_CAPTION スタイルも指定する必要があります
WS_TABSTOP ユーザーが[Tab]キーを押すと
入力フォーカスを受け取るコントロールを指定。
[Tab]キーを押すと、WS_TABSTOP スタイルを持つ次のコントロールに
入力フォーカスが移動します
WS_THICKFRAME サイズ変更境界を持つウィンドウを作成します
WS_SIZEBOX スタイルと同じ。
WS_TILED WS_OVERLAPPED スタイルと同じ。
WS_TILEDWINDOW WS_OVERLAPPEDWINDOW スタイルと同じ。
WS_VISIBLE 可視状態のウィンドウを作成。
WS_VSCROLL 垂直スクロールバーを持つウィンドウを作成。
BUTTON専用スタイル
BS_3STATE 選択された状態、選択されていない状態
グレー表示の状態を持つチェックボックスを作成します
グレーの状態は、チェックボックスの状態が
決められていないことを示すときなどに使います
BS_AUTO3STATE BS_3STATE と同じボタンを作成します
ただし、ユーザーがチェックボックスを選択すると
ボックスの状態が自動的に変わります
BS_AUTOCHECKBOX チェックボックスを作成します
ただし、ユーザーがチェックボックスを選択すると
ボックスの状態が自動的に変わります
BS_AUTORADIOBUTTON ラジオボタンを作成します
ただし、ユーザーがボタンを選択すると
Windows が自動的にボタンを選択状態にし
同じグループのほかのボタンを非選択状態にします
BS_CHECKBOX チェックボックスを作成します
デフォルトでは、テキストはボックスの右側に表示されます
テキストをボックスの左側に表示するには
このフラグと BS_LEFTTEXT スタイル
または BS_RIGHTBUTTON スタイル を組み合わせます
BS_DEFPUSHBUTTON プッシュボタンを作成します
ただし、黒色の太い境界も持ちます
このボタンがダイアログボックスにある場合は
ボタンが入力フォーカスを持っていなくても
[Enter]キーを押せばボタンを選択できます
BS_GROUPBOX グループボックスを作成します
ほかのコントロールを、このコントロールの中にグループ化できます
BS_LEFTTEXT ラジオボタンスタイルやチェックボックススタイルと組み合わせると
ラジオボタンの円やチェックボックスの四角の左側にテキストが置かれます
BS_RIGHTBUTTON スタイルを同じです
BS_OWNERDRAW オーナー描画ボタンを作成します
オーナーウィンドウは、ボタンが作成されると
WM_MEASUREITEM メッセージを受け取り
ボタンの外観が変わると
WM_DRAWITEM メッセージを受け取ります
他のボタンスタイルと組み合わせることはできません
BS_PUSHBUTTON プッシュボタンを作成します
ユーザーがボタンを選択すると
オーナーウィンドウに WM_COMMAND メッセージがポストされます
BS_RADIOBUTTON ラジオボタンを作成します
デフォルトでは、テキストはボタンの右側に表示されます
テキストをボタンの左側に表示するには
このフラグと BS_LEFTTEXT スタイル
または BS_RIGHTBUTTON スタイル を組み合わせます
BS_USERBUTTON 使われなくなりました
BS_OWNERDRAW スタイルを使ってください
BS_BITMAP ビットマップを表示するボタンを作成。
BS_BOTTOM ボタンの下部にテキストを置きます
BS_CENTER ボタンの中央にテキスト置きます
BS_ICON アイコンを表示するボタンを作成。
BS_LEFT ボタンの中にテキストを左寄せします
ボタンが BS_RIGHTBUTTON スタイルを持たない
チェックボックス (またはラジオボタン) の場合
テキストはチェックボックスやラジオボタンの右側に左寄せされます
BS_MULTILINE テキストが長すぎてボタンの中に一行で収まらないとき
テキストを複数行に折り返します
BS_NOTIFY 親ウィンドウに、ボタンが BN_DBLCLK
BN_KILLFOCUS 、BN_SETFOCUS 通知メッセージを送ることを可能にします
このスタイルを持つかどうかに関わらず
ボタンは BN_CLICKED 通知メッセージを送ります
BS_PUSHLIKE プッシュボタンのような概観と機能を持つ
チェックボックスまたはラジオボタンを作ります
BS_RIGHT ボタンの中にテキストを右寄せします
ボタンが BS_RIGHTBUTTON スタイルを持たない
チェックボックス (またはラジオボタン) の場合は
テキストはチェックボックスやラジオボタンの右側に右寄せされます
BS_RIGHTBUTTON BS_LEFTTEXT スタイルと同じ。
BS_TEXT ボタンがテキストを表示するよう指定します
BS_TOP ボタンの最上部にテキストを置きます
BS_VCENTER ボタンの (垂直方向の) 中央にテキストを置きます
COMBOBOX専用スタイル
CBS_AUTOHSCROLL ユーザーが行末に文字を入力すると
エディットコントロール内のテキストが自動的に右スクロールします
CBS_DISABLENOSCROLL スクロールするほどの項目数がない場合
リストボックスの垂直方向のスクロールバーが無効状態で表示されます
通常は表示されません
CBS_DROPDOWN ドロップダウンコンボボックスを作成します
CBS_SIMPLE に似ていますが
ユーザーがエディットコントロールの
横にあるアイコンを選択しないとリストボックスが表示されません
CBS_DROPDOWNLIST ドロップダウンリストボックスを作成します
CBS_DROPDOWN に似ていますが
テキストの編集はできません
CBS_HASSTRINGS オーナー描画コンボボックスの持つ項目が
文字列であることを指定。
コンボボックスが文字列用のメモリとアドレスを管理するので
アプリケーションは CB_GETLBTEXT メッセージを使用して
特定項目のテキストを取り出すことができます
CBS_LOWERCASE コンボボックスのエディットコントロールに入力された大文字を
小文字に変換します
CBS_NOINTEGRALHEIGHT コンボボックスのサイズを指定。
通常は、項目が途中で切れないように
Windows システムがコンボボックスのサイズを調整します
CBS_OEMCONVERT コンボボックスのエディットコントロールに
入力されたテキストを変換します
テキストは Windows 文字セットから OEM 文字セットに変換され
その後にまた Windows 文字セットに変換されます
この動作は、CharToOem 関数の変換が正しく行われることを保証します
このスタイルはファイル名を項目とする
コンボボックスにおいて便利ですが
CBS_SIMPLE か CBS_DROPDOWN スタイルにしか適用できません
CBS_OWNERDRAWFIXED 各項目の高さがすべて同じ
オーナー描画コンボボックスを作成します
オーナーウィンドウは、コンボボックスが作成されると
WM_MEASUREITEM メッセージを受け取り、コンボボックスの外観が変わると
WM_DRAWITEM メッセージを受け取ります
CBS_OWNERDRAWVARIABLE 各項目の高さが可変の
オーナー描画コンボボックスを作成します
オーナーウィンドウは、コンボボックスの各項目について
WM_MEASUREITEM メッセージを受け取り、コンボボックスの外観が変わると
WM_DRAWITEM メッセージを受け取ります
CBS_SIMPLE 常時リストボックスが表示されるコンボボックスを作成します
リストボックス内の現在の選択項目は
エディットコントロール内に表示されます
CBS_SORT リストボックスに追加された文字列を自動的に並べ替えます
CBS_UPPERCASE コンボボックスのエディットコントロールに入力された小文字を
大文字に変換します
EDIT専用スタイル
ES_AUTOHSCROLL ユーザーが行末に文字を入力すると
エディットコントロール内のテキストが自動的に右スクロールします
ES_AUTOVSCROLL ユーザーが最下行で[Enter]キーを押すと
テキストを自動的に上にスクロールします
ES_CENTER 複数行エディットコントロールにおいて
テキストを中央揃えで表示します
ES_LEFT テキストを左揃えで表示します
ES_LOWERCASE エディットコントロールに入力された文字を小文字に変換します
ES_MULTILINE 複数行エディットコントロールを作成します
デフォルトは一行のエディットコントロールです
ダイアログボックス内の複数行エディットコントロールで[Enter]キーを押すと
デフォルトのボタンがアクティブになる
[Enter]キーを改行のために使うには
ES_WANTRETURN スタイルを使用します
ES_NOHIDESEL エディットコントロール内の
選択文字列のデフォルトの動作を無効にします
デフォルトでは、コントロールが
入力フォーカスを失うと選択項目が表示されなくなり
入力フォーカスを受け取ると反転表示されます
ES_NOHIDESEL を指定すると、選択されたテキストは
コントロールがフォーカス持っていない場合も反転表示されます
ES_NUMBER 数字だけが入力できるようにします
ES_OEMCONVERT エディットコントロールに入力されたテキストを変換します
テキストは Windows 文字セットから OEM 文字セットに変換され
その後にまた Windows 文字セットに変換されます
この動作は、CharToOem 関数の変換が正しく行われることを保証します
このスタイルはファイル名を項目とするコンボボックスにおいて便利です
ES_PASSWORD エディットコントロールに入力された文字を
アスタリスク (*) で置き換えて表示します
表示する文字を変更するには
EM_SETPASSWORDCHAR メッセージを使います
ES_READONLY ユーザーによるテキストの入力や編集をできなくします
ES_RIGHT 複数行エディットコントロールにおいて、テキストを右揃えで表示します
ES_UPPERCASE エディットコントロールに入力された文字を、大文字に変換します
ES_WANTRETURN ダイアログボックス内の複数行エディットコントロールに
テキストを入力しているときに[Enter]キーが押されると
改行が挿入されるようにします
このスタイルを指定していないと
ダイアログボックスのデフォルトのプッシュボタンが押されます
このスタイルは、一行のエディットコントロールでは効果がありません
LISTBOX専用スタイル
LBS_DISABLENOSCROLL スクロールするほどの項目数がない場合
リストボックスの垂直スクロールバーが無効状態で表示されます
通常はスクロールバーは表示されません
LBS_EXTENDEDSEL [Shift]キーとマウス、または特殊なキーの組み合わせで
複数の項目を選択できるようにします
LBS_HASSTRINGS リストボックスの項目が、文字列であることを指定。
リストボックスが文字列用のメモリとアドレスを管理するので
アプリケーションは LB_GETTEXT メッセージを使用して
特定項目のテキストを取り出すことができます
デフォルトでは、オーナー描画のリストボックス以外の
すべてのリストボックスが、このスタイルを持ちます
LBS_MULTICOLUMN 水平にスクロールする複数列のリストボックスを指定。
LB_SETCOLUMNWIDTH メッセージで列の幅を設定します
LBS_MULTIPLESEL 項目をクリックまたはダブルクリックして
複数の項目を選択できるようにします
LBS_NODATA データを持たないリストボックスを指定。
リストボックス内の項目数が
1000 を超えるときにこのスタイルを指定。
データを持たないリストボックスには
LBS_OWNERDRAWFIXED スタイルが必要です
LBS_SORT スタイルや LBS_HASSTRINGS スタイルは設定できません
項目に文字列やビットマップデータを持たないことを除くと
データを持たないリストボックスはオーナー描画リストボックスに似ています
項目の追加、挿入、削除のコマンドは常に無視されます
文字列の検索は、常に失敗します
Windows は、項目を描画する必要があると
オーナーウィンドウに WM_DRAWITEM メッセージを送ります
WM_DELETEITEM メッセージと一緒に送られる
DRAWITEMSTRUCT 構造体の itemID メンバは
描画する項目の行数を指定。
データを持たないリストボックスは
WM_DELETEITEM メッセージを送りません
LBS_NOINTEGRALHEIGHT リストボックスのサイズを指定。
通常は、項目が途中で切れないように
Windows システムがリストボックスのサイズを調整します
LBS_NOREDRAW 項目が変更されても
リストボックスの外観を更新しないように指定します
このスタイルは、WM_SETREDRAW メッセージを送ることでいつでも変更。
LBS_NOSEL 表示するだけで選択できない項目を持つリストボックスを指定。
LBS_NOTIFY ユーザーがリストボックス内の
文字列をクリック (またはダブルクリック) するたびに
親ウィンドウに入力メッセージを通知します
LBS_OWNERDRAWFIXED 各項目の高さがすべて同じ
オーナー描画リストボックスを作成します
オーナーウィンドウは、リストボックスが作成されると
WM_MEASUREITEM メッセージを受け取り
リストボックスの外観が変わると WM_DRAWITEM メッセージを受け取ります
LBS_OWNERDRAWVARIABLE 各項目の高さがすべて可変の
オーナー描画リストボックスを作成します
オーナーウィンドウは、リストボックス内の各項目について
WM_MEASUREITEM メッセージを受け取り
リストボックスの外観が変わると WM_DRAWITEM メッセージを受け取ります
LBS_SORT リストボックス内の文字列をアルファベット順にソートします
LBS_STANDARD リストボックス内の文字列をアルファベット順にソートします
ユーザーが文字列をクリック (またはダブルクリック) するたびに
親ウィンドウは入力メッセージを受け取ります
リストボックスは四方に境界を持ちます
LBS_USETABSTOPS 文字列を描画するときに
リストボックスがタブ文字を認識し、展開できるようにします
デフォルトのタブ位置は 32 ダイアログボックス単位です
GetDialogBaseUnits 関数は、ダイアログボックスで
使用される単位をピクセル単位で返します
LBS_WANTKEYBOARDINPUT ユーザーがキーを押してリストボックスが入力フォーカスを持つたびに
リストボックスのオーナーが WM_VKEYTOITEM メッセージを受けるようにします
これにより、キーボード入力に特殊な処理を行えるようになる
SCROLLBAR専用スタイル
SBS_BOTTOMALIGN スクロールバーの下端をCreateWindow 関数の
x、y、nWidth、nHeight パラメータで
指定した長方形の下端にそろえます
スクロールバーの高さはデフォルトの高さになる
このスタイルは SBS_HORZ スタイルと一緒に使います
SBS_HORZ 水平スクロールバーを作成します
SBS_BOTTOMALIGN スタイルも
SBS_TOPALIGN スタイルも指定しないと
スクロールバーは CreateWindow 関数の
x、y、nWidth、nHeight パラメータで
指定した位置とサイズになる
SBS_LEFTALIGN スクロールバーの左端を
CreateWindow 関数の x、y、nWidth、nHeight パラメータで
指定した長方形の左端にそろえます
スクロールバーの幅は、デフォルトの幅になる
このスタイルは SBS_VERT スタイルと一緒に使います
SBS_RIGHTALIGN スクロールバーの右端を
CreateWindow 関数の x、y、nWidth、nHeight パラメータで
指定した長方形の右端にそろえます
スクロールバーの幅は、デフォルトの幅になる
このスタイルは SBS_VERT スタイルと一緒に使います
SBS_SIZEBOX サイズボックスを作成します
SBS_SIZEBOXBOTTOMRIGHTALIGN スタイルも
SBS_SIZEBOXTOPLEFTALIGN スタイルも指定しないとサイズボックスは
CreateWindow 関数の x、y、nWidth、nHeight パラメータで
指定した位置とサイズになる
SBS_SIZEBOXBOTTOMRIGHTALIGN
サイズボックスの右下隅を
CreateWindow 関数の x、y、nWidth、nHeight パラメータで
指定した長方形の右下隅にそろえます
サイズボックスのサイズは、デフォルトのサイズになる
このスタイルは SBS_SIZEBOX スタイルと一緒に使います
SBS_SIZEBOXTOPLEFTALIGN サイズボックスの左上隅を
CreateWindow 関数の x、y、nWidth、nHeight パラメータで
指定した長方形の左上隅にそろえます
サイズボックスのサイズは、デフォルトのサイズになる
このスタイルは SBS_SIZEBOX スタイルと一緒に使います
SBS_SIZEGRIP SBS_SIZEBOX スタイルと同じ。
ただし、縁が盛り上がります
SBS_TOPALIGN スクロールバーの上端を
CreateWindow 関数の x、y、nWidth、nHeight パラメータで
指定した長方形の上端にそろえます
スクロールバーの高さは、デフォルトの高さになる
このスタイルは SBS_HORZ スタイルと一緒に使います
SBS_VERT 垂直スクロールバーを作成します
SBS_RIGHTALIGN スタイルも
SBS_LEFTALIGN スタイルも指定しないと
スクロールバーは CreateWindow 関数の x、y、nWidth、nHeight パラメータで
指定した位置とサイズになる
STATIC専用スタイル
SS_BITMAP ビットマップを表示するスタティックコントロールを作成します
nWidth と nHeight パラメータは無視され
ビットマップに合わせてコントロールのサイズが調整されます
SS_BLACKFRAME ウィンドウの枠と同じ色の枠を持つボックスを作成します
Windows のデフォルトの配色は黒です
SS_BLACKRECT ウィンドウの枠と同じ色で塗りつぶされた長方形を作成します
Windows のデフォルトの配色は黒です
SS_CENTER テキストを中央揃えで表示します
テキストが行末を超える場合は自動的に折り返されます
SS_CENTERIMAGE コントロールのサイズが変更されても
SS_BITMAP や SS_ICON スタイルを持つ
スタティックコントロールの中心点は変えないようにします
SS_GRAYFRAME 画面の背景 (デスクトップ) と同じ色の枠を持つボックスを作成します
Windows のデフォルトの配色は灰色です
SS_GRAYRECT 画面の背景 (デスクトップ) と同じ色で塗りつぶされた長方形を作成します
Windows のデフォルトの配色は灰色です
SS_ICON アイコンを表示するスタティックコントロールを作成します
nWidth と nHeight パラメータは無視され
アイコンに合わせてコントロールのサイズが調整されます
SS_LEFT テキストを左揃えで表示します
テキストが行末を超える場合は自動的に折り返されます
SS_LEFTNOWORDWRAP テキストを左揃えで表示します
タブは展開されますが、テキストは折り返されません
行末を超えるテキストはクリップされます
SS_METAPICT メタファイルを表示するスタティックコントロールを作成します
メタファイルは、コントロールのサイズに
合わせた大きさで表示されます
SS_NOPREFIX コントロールのテキスト中のアンパサント (&) 文字を
アクセラレータのプリフィックス文字として
解釈しないように指定します
このスタティックコントロールスタイルは、定義されている
どのようなスタティックコントロールとも組み合わせて指定できます
アプリケーションは、ビット演算子 OR (|) 使って
SS_NOPREFIX スタイルを他のスタイルと組み合わせることができます
ダイアログボックスのスタティックコントロール内に
アンパサント (&) を含むファイル名や
その他の文字列を表示する必要があるときに便利です
SS_NOTIFY ユーザーがコントロールを
クリック (またはダブルクリック) するたびに
親ウィンドウに STN_CLICKED 通知メッセージ
または STN_DBLCLK 通知メッセージを送ります
SS_RIGHT テキストを右揃えで表示します
テキストが行末を超える場合は自動的に折り返されます
SS_RIGHTIMAGE コントロールのサイズが変更されても
SS_BITMAP スタイルや SS_ICON スタイルを持つ
スタティックコントロールの右下隅は変えないようにします
SS_SIMPLE 単一行のテキストを左揃えで表示します
このコントロールの親ウィンドウやダイアログボックスは
WM_CTLCOLORSTATIC メッセージを処理してはいけません
SS_WHITEFRAME ウィンドウの背景と同じ色の枠を持つボックスを作成します
Windows のデフォルトの配色は白です
SS_WHITERECT ウィンドウの背景と同じ色の
枠で塗りつぶされた長方形を作成します
Windows のデフォルトの配色は白です
ダイアログボックススタイル
DS_3DLOOK ダイアログボックスを立体的に表示します
現在のバージョンの Windows 用にコンパイルされた
アプリケーションが作成するダイアログボックスには
自動的に立体的な外観が適用されます
DS_ABSALIGN ダイアログボックスの座標系を、スクリーン座標にします
デフォルトでは、クライアント座標になる
DS_CENTER デスクトップの作業領域の中央に
ダイアログボックスを配置します
作業領域は、タスクバーに覆われていない領域です
DS_CENTERMOUSE ダイアログボックスの中央にマウスポインタを配置します
DS_CONTEXTHELP ダイアログボックスのタイトルバーに[?]ボタンを追加します
ユーザーがこの[?]ボタンをクリックすると
マウスポインタに疑問符が付きます
その後、ユーザーがダイアログボックス内のコントロールをクリックすると
コントロールは WM_HELP メッセージを受け取ります
コントロールはダイアログの処理にそのメッセージを送ります
このダイアログの処理は、HELP_WM_HELP コマンドを使った WinHelp 関数です
ヘルプアプリケーションは、通常、コントロールのヘルプを持つ
ポップアップウィンドウを表示します
DS_CONTEXTHELP は、プレースホルダーでしかありません
ダイアログボックスが作成されると
システムは DS_CONTEXTHELP があることを確認し
もしあれば、ダイアログボックスの拡張スタイルに
WS_EX_CONTEXTHELP を追加します
WS_EX_CONTEXTHELP は WS_MAXIMIZEBOX や
WS_MINIMIZEBOX スタイルとは一緒に使用できません
DS_CONTROL 他のダイアログボックスの子ウィンドウとして適切に機能する
プロパティシート内のページのような
ダイアログボックスを作成。
DS_FIXEDSYS SYSTEM_FONT の代わりに
SYSTEM_FIXED_FONT を使用します
DS_LOCALEDIT 16 ビットのアプリケーションで使用します
DS_MODALFRAME モーダルダイアログボックスフレームを持つ
ダイアログボックスを作成。
DS_NOFAILCREATE エラーが発生してもダイアログボックスを作成。
DS_NOIDLEMSG ダイアログボックスが表示されている間
WM_ENTERIDLE メッセージを抑制します
DS_RECURSE コントロールに似たダイアログボックスを作成。
DS_SETFONT ダイアログボックステンプレートが
フォント名とポイントサイズを持つことを示します
対応するフォントは、ダイアログボックスで
テキストを表示するために使われます
DS_SETFOREGROUND ダイアログボックスをフォアグラウンドにします
内部で Windows システムが
SetForegroundWindow 関数を呼び出します
このスタイルは、16 ビット版の Windows には適用できません
DS_SYSMODAL システムモーダルダイアログボックスを作成します
このスタイルを指定すると、ダイアログボックスが
最前面ウィンドウ (WS_EX_TOPMOST) になる
その他の点では、ダイアログボックス自身や
システム内の他のウィンドウの振る舞いに影響を与えません




ウィンドウの作成 - CreateWindowEx()
CreateWindowEx()
HWND CreateWindowEx(
DWORD dwExStyle,
LPCTSTR lpClassName ,
LPCTSTR lpWindowName,
DWORD dwStyle ,
int x ,
int y ,
int nWidth ,
int nHeight ,
HWND hWndParent ,
HMENU hMenu ,
HANDLE hInstance ,
LPVOID lpParam
);

拡張スタイルが指定できること以外は CreateWindow() と同じ。
dwExStyle 以外の引数については CreateWindow() を参照してください

dwExStyle - 拡張スタイルを指定。
定数
解説
拡張スタイル


WS_EX_ACCEPTFILES ドラッグアンドドロップで、ファイルを受け入れます
WS_EX_APPWINDOW ウィンドウが最小化されるとトップレベルウィンドウがタスクバー上に置かれます
WS_EX_CLIENTEDGE 縁が沈んで見える境界線を持つウィンドウを指定。
WS_EX_CONTEXTHELP ダイアログボックスのタイトルバーに[?]ボタンを追加します
ユーザーがこの[?]ボタンをクリックすると
マウスポインタに疑問符が付きます
その後、ユーザーがダイアログボックス内のコントロールをクリックすると
コントロールは WM_HELP メッセージを受け取ります
コントロールはダイアログの処理にそのメッセージを送ります
このダイアログの処理は、HELP_WM_HELP コマンドを使った WinHelp 関数です
ヘルプアプリケーションは、通常
コントロールのヘルプを持つポップアップウィンドウを表示します
WS_EX_CONTEXTHELP は WS_MAXIMIZEBOX や
WS_MINIMIZEBOX スタイルとは一緒に使用できません
WS_EX_CONTROLPARENT ユーザーが[Tab]キーを使って子ウィンドウ間を移動できるようにします
WS_EX_DLGMODALFRAME 二重の境界線を持つウィンドウを作成します
dwStyle パラメータに WS_CAPTION スタイルを指定することで
タイトルバーを持つようにも作成できます
WS_EX_LEFT 左揃えされたプロパティを持つウィンドウを作成します。デフォルトです
WS_EX_LEFTSCROLLBAR 垂直スクロールバーがクライアント領域の左側に置かれます
ヘブライ語やアラビア語をサポートしているシステムで有効です
他の言語では、このスタイルは無視され、エラーとして扱われます
WS_EX_LTRREADING 垂直スクロールバーがクライアント領域の左側に置かれます
ヘブライ語やアラビア語をサポートしているシステムで有効です
他の言語では、このスタイルは無視され、エラーとして扱われます
WS_EX_MDICHILD MDI 子ウィンドウを作成。
WS_EX_NOPARENTNOTIFY このスタイルで作成された
子ウィンドウが作成されたり破棄されたりするときに
その親ウィンドウにWM_PARENTNOTIFY メッセージを送らないように指定します
WS_EX_OVERLAPPEDWINDOW WS_EX_CLIENTEDGE と WS_EX_WINDOWEDGE スタイルの組み合わせです
WS_EX_PALETTEWINDOW WS_EX_WINDOWEDGE 、WS_EX_TOOLWINDOW
WS_EX_TOPMOST スタイルの組み合わせです
WS_EX_RIGHT 右揃えされたプロパティを持つウィンドウを作成します
ヘブライ語やアラビア語をサポートしているシステムで有効です
他の言語では、このスタイルは無視され、エラーとして扱われます
WS_EX_RIGHTSCROLLBAR 垂直スクロールバーがクライアント領域の右側に置かれます
デフォルトです
WS_EX_RTLREADING 右から左への読み取り順序を持つプロパティを持ったウィンドウを作成します
ヘブライ語やアラビア語をサポートしているシステムで有効です
他の言語では、このスタイルは無視され、エラーとして扱われます
WS_EX_STATICEDGE ユーザーの入力を受け付けない項目用の
立体的に見える境界スタイルを持つウィンドウを作成します
WS_EX_TOOLWINDOW ツールウィンドウを作成します
これは、フローティングツールバー用のウィンドウです
ツールウィンドウは通常のタイトルバーより小さいタイトルバーを持ちます
タスクバーには表示されません
ユーザーが[Alt]キーと[Tab]キーを
同時に押すと現れるダイアログ内にも、表示されません
WS_EX_TOPMOST 最前面ウィンドウを作成します
ウィンドウが非アクティブな状態でも、ほかのウィンドウの前面に表示されます
SetWindowPos 関数を使用すると、非最前面ウィンドウに変更できます
WS_EX_TRANSPARENT 透過ウィンドウを作成します
このウィンドウの下にあるどのようなウィンドウも、遮られることなく表示されます
このスタイルで作成されたウィンドウは、その下にある兄弟ウィンドウが
すべて更新されたときにだけ、WM_PAINT メッセージを受け取ります
WS_EX_WINDOWEDGE ウィンドウが盛り上がった縁の境界線を持つことを指定。








ウィンドウの可視化
デフォルトで返されたウィンドウハンドルは 不可視 状態です
つまり、まだ画面には表示されていません
ウィンドウの表示状態の変更には ShowWindow() 関数を使用します

BOOL ShowWindow( HWND hWnd , int nCmdShow );



戻り値 戻り値の BOOL 型 は、ブーリアンを格納するデータ型
0以外の「真」か、0の「偽」を格納します
ウィンドウが以前表示状態なら0以外、非表示だったのなら0を返します
hWnd 対象となるウィンドウのハンドルを指定。
nCmdShow ウィンドウの表示状態を表す定数を指定。。SW_SHOW でウィンドウを表示します (下のリファレンス参照)
指定されたウィンドウの表示状態を設定します

hWndM - 対象のウィンドウのハンドルを指定。
nCmdShow - ウィンドウの表示状態を表す定数を指定。
戻り値 - 以前に表示されていたときは 0 以外、非表示にされていたときは 0



nCmdShow には以下の定数を指定。
定数 解説
SW_HIDE ウィンドウを非表示にし、他のウィンドウをアクティブにします
SW_MAXIMIZE ウィンドウを最大化します
SW_MINIMIZE ウィンドウを最小化し、Z 順位が次のトップレベルウィンドウをアクティブにします
SW_RESTORE ウィンドウをアクティブにし、表示します
ウィンドウが最小化されていたり最大化されていたりすると元の位置とサイズに戻ります
SW_SHOW ウィンドウをアクティブにして、現在の位置とサイズで表示します
SW_SHOWDEFAULT アプリケーションを起動させたプログラムがCreateProcess 関数に渡す
STARTUPINFO 構造体の wShowWindow メンバで指定されたSW_ フラグを基にして、表示状態を設定します
SW_SHOWMAXIMIZED ウィンドウをアクティブにして、最大化します
SW_SHOWMINIMIZED ウィンドウをアクティブにして、最小化します
SW_SHOWMINNOACTIVE ウィンドウを最小化します。
アクティブなウィンドウは、アクティブな状態を維持します。
非アクティブなウィンドウは、非アクティブなままです
SW_SHOWNA ウィンドウを現在の状態で表示します
アクティブなウィンドウはアクティブな状態を維持します
SW_SHOWNOACTIVATE ウィンドウを直前の位置とサイズで表示します。
アクティブなウィンドウはアクティブな状態を維持します。
SW_SHOWNORMAL ウィンドウをアクティブにして、表示します
ウィンドウが最小化または最大化されているときは、位置とサイズを元に戻します








ウィンドウプロシージャ
ウィンドウプロシージャとは、ウィンドウで発生したイベントを処理する関数なのですが
これに関してはまだ説明していないので、デフォルトの DefWindowProc()を渡します
この関数は、ウィンドウの移動などの基本的な動作をサポートします

LRESULT DefWindowProc(
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam
);

今は、この関数について知る必要はありません
この関数を呼び出すのはプログラマではなくウィンドウズなのです(後記)
この場では、イベントが発生した時にこの関数を呼び出すように
ウィンドウクラスに、この関数のポインタを渡しているのだということを理解してください



HWND hWnd,

UINT Msg,

WPARAM wParam,

LPARAM lParam







主なメッセージ一覧(ノーマルウインドウ編)
イベント

WM_...(msg(第2引数)の値)
読み方

 どんな時にこのメッセージが送られてくるか.
wParam: 第3引数 wParam はどう使われるか.
lParam: 第4引数 lParam はどう使われるか
返り値: このメッセージが送信されたら自分は何を返したらいいか.
特に記述がない場合は,メッセージを処理する時は0, 処理しないときはDefWindowProc( hWnd, msg, wParam, lParam )を返す.
※この先よく出てくるLOWORD(), HIWORD() はDWORD型の上位WORD,下位WORDを取り出せるマクロです.
lParam, wParam はこのマクロで半分だけ取り出して使う事も多いです.
WM_CREATE
 CreateWindow(Ex)が呼ばれたとき.この処理はCreateWindow(Ex)処理中で行われる.
WM_CREATE
 CreateWindow(Ex)が呼ばれたとき.この処理はCreateWindow(Ex)処理中で行われる.
wParam: 0
lParam: (LPCREATESTRUCT) CREATESTRUCT構造体のポインタ.CreateWindow(Ex)の最後の引数.MDIとかで使われるが,普通使わない.
返り値: (int) 0:ウインドウの作成を継続する.-1:ウインドウを破棄する,このときCreateWindow(Ex)からはNULLが返される.

WM_CLOSE
 閉じるボタンとかが押された時.ウインドウまたはアプリケーションの終了を示す.
WM_CLOSE
 閉じるボタンとかが押された時.ウインドウまたはアプリケーションの終了を示す.
wParam:0
IParam:0
システムに処理させると DestroyWindow() などが 呼ばれてウインドウが破棄される. その際 WM_DESTROY メッセージがポストされる.
何もしないで0Lを返すとウインドウは閉じられない.
WM_DESTROY
ウインドウが画面から削除された後.最初に破棄されようとしているウインドウに送られ, 次にその子ウインドウに送られる.
WM_DESTROY
 ウインドウが画面から削除された後.最初に破棄されようとしているウインドウに送られ, 次にその子ウインドウに送られる.
wParam: 0
lParam: 0
メインウインドウが閉じられたときなど,アプリケーションを終了したいときは PostQuitMessage() を呼ぶ.
WM_COMMAND
・メニューコマンドが選択されたとき,
・コントロール(ボタンとか)からその親ウインドウに通知メッセージが送られたとき,
・アクセラレータキー操作が変換されたとき.
WM_COMMAND
・メニューコマンドが選択されたとき,
・コントロール(ボタンとか)からその親ウインドウに通知メッセージが送られたとき,
・アクセラレータキー操作が変換されたとき.
WM_PAINT
ウインドウ(の一部)をペイントしないといけない時. UpdateWindow()やRedrawWindow()が呼び出されたときにも送られる. Section2 で少しやってるのでそちらを参照.
WM_MOVE
ウインドウが移動したとき.
WM_LBUTTONDOWN
マウスの左ボタンが押されたときに送られてくる
LOWORD(wParam): (WORD) メニュー項目,コントロール,アクセラレータの識別子
HIWORD(wParam): (WORD) 通知コード(コントロールの時),1(アクセラレータ),0(メニュー)
lParam: (HWND) コントロールのハンドル(コントロールのとき),NULL(それ以外)
WM_PAINT
WM_PAINT
ウインドウ(の一部)をペイントしないといけない時. UpdateWindow()やRedrawWindow()が呼び出されたときにも送られる. Section2 で少しやってるのでそちらを参照.
wParam:(HDC) 一部のコモンコントロールでのみ使われるパラメタ. このデバイスコンテキストでの描画を可能にする. NULLの場合はデフォルトのデバイスコンテキストを使用.
lParam:0

WM_MOVE
ウインドウが移動したとき
wParam:0
LOWORD(lParam):(WORD) クライアント領域左上隅のx座標※
HIWORD(lParam):(WORD) クライアント領域左上隅のy座標※
※オーバーラップウインドウとポップアップウインドウではスクリーン座標, 子ウインドウなら親ウインドウにおける相対座標.
WM_SIZE
ウインドウのサイズが変更されたとき.
wParam (WPARAM) ウインドウのサイズ変更タイプ
SIZE_MAXIMIZED
ウインドウが最大化された.
SIZE_MINIMIZED

ウインドウが最小化された.
SIZE_RESTORED
最大化,最小化以外でウインドウサイズが変更された.
SIZE_MAXHIDE
他のウインドウのどれかが最大化された(このウインドウがポップアップの時)
SIZE_MAXSHOW
他のウインドウのどれかの最大化が解除された(〃)
LOWORD(lParam)
(WORD) クライアント領域の新しい幅
HIWORD(lParam)
(WORD) クライアント領域の新しい高さ
WM_KEYDOWN
WM_KEYDOWN 非システムキーが押されたとき
WM_KEYUP
WM_KEYUP 非システムキーが放されたとき
wParam : (int) 仮想キーコード.Section3.2参照.
Param:フラグとか. 手元の資料がビット単位で取り出せみたいな勢いなので省略.
LOWORD(lParam)?
キー落下中に押されたことになった回数. WM_KEYUPでは常に「1」
WM_LBUTTONDOWN
マウス左ボタンが押された
WM_MBUTTONDOWN
中が押された
WM_RBUTTONDOWN
右が押された
WM_LBUTTONUP
左が放された
WM_MBUTTONUP
中が放された
WM_RBUTTONUP
右が放された
WM_LBUTTONDBLCLK
左ダブルクリック
WM_MBUTTONDBLCLK
中ダブルクリック
WM_RBUTTONDBLCLK
右ダブルクリック
WM_MOUSEMOVE
マウスカーソルが動いた
カーソルがウインドウクライアント領域にあるとき, マウスがキャプチャーされている場合はキャプチャーしたウインドウへ, それ以外はカーソルを含むウインドウへポストされる.
wParam (WPARAM) どの仮想キーが押されてるか.下表を|(OR)で組み合わせた値.
MK_CONTROL
Ctrlキーが押されている.
MK_LBUTTON
マウスの左ボタンが押されている.
MK_MBUTTON
マウスの中央ボタンが押されている.
MK_RBUTTON
マウスの右ボタンが押されている.
MK_SHIFT
Shiftキーが押されている.
LOWORD(lParam)
(WORD)カーソルのx座標(クライアント領域の左上隅が原点)
HIWORD(lParam)
(WORD)カーソルのy座標(クライアント領域の左上隅が原点)
Section3.1で少しやってます.
WM_HSCROLL
WM_HSCROLL 水平(横方向)
WM_VSCROLL
WM_VSCROLL 垂直(縦方向)
・ウインドウの標準水平(垂直)スクロールバーでイベントが発生したとき,
・そのウインドウの子である水平(垂直)スクロールバーコントロールでイベントが発生したとき.
SB_LINELEFT(SB_LINEUP)
左(上)へ1単位だけスクロール.左(上)端の三角ボタンが押されたときなど.
SB_LINERIGHT(SB_LINEDOWN)
右(下)へ1単位だけスクロール.右(下)端の三角ボタンが押されたときなど.
SB_PAGELEFT(SB_PAGEUP)
左(上)へウインドウの幅に応じてスクロール.スクロールボックスの左(上)側が押されたときなど.
SB_PAGERIGHT(SB_PAGEDOWN)
右(下)へウインドウの幅に応じてスクロール.スクロールボックスの右(下)側が押されたときなど.
SB_THUMBTRACK
スクロールボックスをドラッグした時.HIWORD(wParam)がその位置
SB_THUMBPOSITION
絶対位置でスクロール.HIWORD(wParam)が現在位置
SB_TOP
左上へスクロール
SB_BOTTOM
右下へスクロール
SB_ENDSCROLL
スクロールを終了する
HIWORD(wParam)
(short int) LOWORD(wParam)がSB_THUMB***の時はスクロールボックスの現在地.
lParam
(LPARAM) スクロールバーコントロールから送られてきた場合は,そのハンドル.
WM_TIMER
SetTimer()で指定した時間間隔が経過するたびに, タイマをインストールするようい指定したウインドウのコールバック関数か, 指定したタイマ用コールバック関数に送られる.
wParam
タイマの識別子
lParam
SetTimer()に渡されたアプリケーション定義のコールバック関数のポインタ