ウィンドウメッセージ


WM_ACTIVATE

説明
WM_ACTIVATEはウィンドウがアクティブ化するウィンドウ、非アクティブ化するウィンドウに送られます。

wParam
fActive = LOWORD(wParam); // activation flag
wParamの下位WORDにはウィンドウがアクティブ化されたか、非アクティブ化されたかの情報が格納されており、以下のいずれかの値になります。
WA_ACTIVE SetActiveWindowのようなマウスクリック以外の要因でウィンドウはアクティブ化されました。
WA_CLICKACTIVE マウスクリックによってウィンドウはアクティブ化されました。
WA_INACTIVE ウィンドウは非アクティブ化されました。

fMinimized = (BOOL) HIWORD(wParam); // minimized flag
wParamの上位WORDはウィンドウが最小化されているかどうかを示します。
この値が0以外なら、ウィンドウは最小化されていることを示します。

lParam
hwndPrevious = (HWND) lParam; // window handle
fActiveがWA_INACTIVEのときはアクティブ化するウィンドウのハンドル、fActiveがWA_ACTIVEかWA_CLICKACTIVEのときは非アクティブ化するウィンドウのハンドルが格納されます。

戻り値
このメッセージをアプリケーションで処理する場合、0を返さなくてはなりません。

デフォルトの動作
ウィンドウがアクティブ化されており、最小化されていないとき、DefWindowProc関数はキーボードのフォーカスをそのウィンドウに合わせます。

解説
アクティブ化されるウィンドウと非アクティブ化されるウィンドウが同じ入力キューを使う場合、メッセージはまず非アクティブ化されようとしているトップレベルのウィンドウのウィンドウプロシージャに、次にアクティブ化されようとしているトップレベルのウィンドウのプロシージャに同期して送られます。同じ入力キューを使っていない場合、メッセージは非同期的に送られ、ウィンドウは直ちにアクティブになります。
ウィンドウがマウスクリックによってアクティブ化した場合、WM_MOUSEACTIVATEメッセージも送られます。

対応情報
Windows NT : バージョン 3.1 以降
Windows : Windows 95 以降
Windows CE : バージョン 1.0 以降
ヘッダー : winuser.h 内で定義



WM_ACTIVATEAPP

説明
WM_ACTIVATEAPPメッセージはアクティブウィンドウではないアプリケーションに属するウィンドウがアクティブになるときに送られます。 このメッセージはアクティブになるウィンドウ、非アクティブになるウィンドウの両方に送られます。

wParam
fActive = (BOOL) wParam; // activation flag
この値がTRUEならウィンドウはアクティブ化された、FALSEなら非アクティブ化されたことを示します。

lParam
dwThreadID = (DWORD) lParam; // thread identifier
fActiveがTRUEなら非アクティブ化されたウィンドウの属するスレッドのIDが、FALSEならアクティブ化されたウィンドウの属するスレッドのIDが格納されます。

戻り値
アプリケーションでこのメッセージを処理する場合、0を返さなくてはなりません。

対応情報
Windows NT: バージョン 3.1 以降
Windows: Windows 95 以降
Windows CE: サポートされていません
Header: winuser.h 内で定義



WM_CANCELMODE

説明
ウィンドウのマウス処理などの内部処理をキャンセルします。 たとえば、ダイアログボックスやメッセージボックスが表示されるときシステムはこのメッセージをアクティブウィンドウに送ります。 また、EnableWindow関数を使ってウィンドウを使用不能にするとき、このメッセージがウィンドウがアクティブかどうかにかかわらず送られます。

wParam
なし

lParam
なし

戻り値
アプリケーションでこのメッセージを処理する場合、0を返さなくてはなりません。

デフォルトの動作
DefWindowProc関数はスクロールバー入力やメニューへの内部処理を止め、マウスのキャプチャーも止めます。

対応情報
Windows NT: バージョン 3.1 以降
Windows: Windows 95 以降
Windows CE: バージョン 1.0 以降
Header: winuser.h 内で定義



WM_CHILDACTIVATE

説明
WM_CHILDACTIVATE メッセージはMDI(Multiple Document Interface)の子ウィンドウにユーザーがウィンドウのタイトルバーをクリックしたとき、ウィンドウがアクティブになったとき、移動したとき、サイズが変更されたときに送られます。

wParam
なし

lParam
なし

戻り値
アプリケーションでこのメッセージを処理する場合、0を返さなくてはなりません。

対応情報
Windows NT: バージョン 3.1 以降
Windows: Windows 95 以降
Windows CE: サポートされていません
Header: winuser.h 内で定義



WM_CLOSE

説明
WM_CLOSEメッセージは、ウィンドウあるいはアプリケーションが終了するべき信号として送られます。

wParam
なし

lParam
なし

戻り値
アプリケーションでこのメッセージを処理する場合、0を返さなくてはなりません。

デフォルトの動作
DefWindowProc関数はウィンドウを破棄するため、DestroyWindow関数を呼び出します。

解説
アプリケーションでこのメッセージを処理することにより、ウィンドウが破棄されようとするとき、ユーザーに確認を取り、ユーザーの望むときにだけDestroyWindow関数を呼び出すといったことができます。

対応情報
Windows NT: バージョン 3.1 以降
Windows: Windows 95 以降
Windows CE: バージョン 1.0 以降
Header: winuser.h 内で定義



WM_COMPACTING

説明
メモリが不足しているときにすべてのトップレベルのウィンドウに送られます。

wParam
wCompactRatio = wParam; // compacting ratio
CPU時間におけるメモリの圧縮と他の処理との割合を示します。
たとえば0x8000はCPU時間の50%がメモリの圧縮に費やされたことを示します。

lParam
なし

戻り値
アプリケーションでこのメッセージを処理する場合、0を返さなくてはなりません。

解説
このメッセージを受け取ったアプリケーションはその処理の状況とシステム上で動いている他のアプリケーションの数を考慮し、できる限りメモリを開放するべきです。

対応情報
Windows NT: バージョン 3.1 以降
Windows: Windows 95 以降
Windows CE: サポートされていません
Header: winuser.h 内で定義



WM_CREATE

説明
WM_CREATEメッセージはCreateWindow関数やCreateWindowEx関数によってウィンドウが作成されたときに呼び出されます。 このメッセージはウィンドウの作成の後、ウィンドウが表示されるより前に送られます。 このメッセージはCreateWindow関数、CreateWindowEx関数の終了前に送られます。

wParam
なし

lParam
lpcs = (LPCREATESTRUCT) lParam; // structure with creation data
lParamは作成されるウィンドウの情報を格納したCREATESTRUCT構造体へのポインタです。 CREATESTRUCTのメンバーはCreateWindowEx関数のパラメーターと同一です。

戻り値
アプリケーションでこのメッセージを処理し、ウィンドウを作成する場合、0を返します。
-1を返すとウィンドウは破棄され、CreateWindow関数、CreateWindowEx関数はNULLを返します。

対応情報
Windows NT: バージョン 3.1 以降
Windows: Windows 95 以降
Windows CE: バージョン 1.0 以降
Header: winuser.h 内で定義



WM_DESTROY

説明
WM_DESTROYメッセージはウィンドウが破棄されるとき、スクリーン上からウィンドウが消えた後に送られます。 このメッセージは、まず破棄されるウィンドウに、そして次に(もしあれば)子ウィンドウに送られます。 メッセージの処理中に、子ウィンドウがすべてまだ存在すると仮定することができます。

wParam
なし

lParam
なし

戻り値
アプリケーションでこのメッセージを処理する場合、0を返さなくてはなりません。

解説
破棄されようとしているウィンドウがSetClipboardViewer関数の呼び出しによって設定されたクリップボードビュアーチェーンの一部である場合、WM_DESTROYが値を返す前にChangeClipboardChain関数を呼び出し、アプリケーションは自身をチェーンから取り除かなければなりません。

対応情報
Windows NT: バージョン 3.1 以降
Windows: Windows 95 以降
Windows CE: バージョン 1.0 以降
Header: winuser.h 内で定義



WM_ENABLE

説明
WM_ENABLEメッセージはウィンドウの有効、無効の状態が変更される時に送られます。 このメッセージはEnableWindow関数が値を返す前、ウィンドウの有効、無効の状態が変更された後に送られます。

wParam
fEnabled = (BOOL) wParam; // enabled/disabled flag
この値がTRUEならウィンドウは有効化、FALSEなら無効化されました。

lParam
なし

戻り値
アプリケーションでこのメッセージを処理する場合、0を返さなくてはなりません。

対応情報
Windows NT: バージョン 3.1 以降
Windows: Windows 95 以降
Windows CE: バージョン 1.0 以降
Header: winuser.h 内で定義



WM_ENTERSIZEMOVE

説明
このメッセージはウィンドウがサイズ変更、移動モードになったとき、一度だけ送られてきます。 ウィンドウはユーザーがタイトルバーやサイズ変更境界をクリックしたとき、wParamがSC_MOVEかSC_SIZEのWM_SYSCOMMANDメッセージをDefWindowProc関数が処理するときにサイズ変更、移動モードになります。

wParam
なし
0でなくてはなりません。

lParam
なし
0でなくてはなりません。

戻り値
アプリケーションでこのメッセージを処理する場合、0を返さなくてはなりません。

対応情報
Windows NT: バージョン 3.1 以降
Windows: Windows 95 以降
Windows CE: サポートされていません
Header: winuser.h 内で定義



WM_EXITSIZEMOVE

説明
WM_EXITSIZEMOVEメッセージはサイズ変更、移動モードを抜け出したとき、ウィンドウに一回だけ送られてきます。 ウィンドウはユーザーがタイトルバーやサイズ変更境界をクリックしたとき、wParamがSC_MOVEかSC_SIZEのWM_SYSCOMMANDメッセージをDefWindowProc関数が処理するときにサイズ変更、移動モードになります。

wParam
なし
0でなくてはなりません。

lParam
なし
0でなくてはなりません。

戻り値
アプリケーションでこのメッセージを処理する場合、0を返さなくてはなりません。

対応情報
Windows NT: バージョン 3.1 以降
Windows: Windows 95 以降
Windows CE: サポートされていません
Header: winuser.h 内で定義



WM_GETICON

説明
WM_GETICONメッセージはアプリケーションの大きいアイコン、小さいアイコンのハンドルを取得するために送られます。 大きいアイコンはAlt+Tabダイアログに、小さいアイコンはウィンドウのキャプションに表示されます。

wParam
fType = wParam;// icon type
取得しようとするアイコンの種類を示します。以下の値のどちらか一方を指定します。
ICON_BIG 大きいアイコンを取得します。
ICON_SMALL 小さいアイコンを取得します。

lParam
なし

戻り値
fTypeで指定したタイプのアイコンのハンドルが返ります。 アプリケーションがこのメッセージを受け取ったとき、大きいアイコン、小さいアイコンのハンドルを返すか、このメッセージをDefWindowProc関数に渡します。

デフォルトの動作
DefWindowProc関数はfTypeによって指定されたタイプのアイコンのハンドルを返します。

対応情報
Windows NT: バージョン 4.0 以降
Windows: Windows 95 以降
Windows CE: バージョン 1.0 以降
Header: winuser.h 内で定義



WM_GETMINMAXINFO

説明
WM_GETMINMAXINFOメッセージはウィンドウのサイズや位置が変わるとき、Windowsがウィンドウの最大サイズ最大、最小のトラッキングサイズを知る必要があるときに送られます。 アプリケーションはこのメッセージを使ってウィンドウの最大化された大きさと位置、最大、最小のトラッキングサイズを設定することができます。

wParam
なし

lParam
lpmmi = (LPMINMAXINFO) lParam; // address of structure
MINMAXINFO構造体のアドレスを指定します。

typedef struct tagMINMAXINFO { // mmi
  POINT ptReserved;
  POINT ptMaxSize;
  POINT ptMaxPosition;
  POINT ptMinTrackSize;
  POINT ptMaxTrackSize;
} MINMAXINFO;

ptReserved 使われていません。
ptMaxSize ウィンドウの最大化された幅(Point.x)と最大化された高さ(Point.y)を指定します。
ptMaxPosition 最大化されたウィンドウの左上の点を指定します。
ptMinTrackSize 最小のトラッキングサイズの幅(Point.x)と高さ(Point.y)を指定します。
ptMaxTrackSize 最大のトラッキングサイズの幅(Point.x)と高さ(Point.y)を指定します。

戻り値
アプリケーションでこのメッセージを処理する場合、0を返さなくてはなりません。

解説
最大トラッキングサイズはサイズ変更境界をドラッグして決定される最大のウィンドウサイズ、最小トラッキングサイズはサイズ変更境界をドラッグして決定されるし最小のウィンドウサイズです。
このメッセージをウィンドウプロシージャで捕まえて
lpmmi -> ptMinTrackSize = 200;
のように値を変更してやることでウィンドウのサイズを制限できます。

対応情報
Windows NT: バージョン 3.1 以降
Windows: Windows 95 以降
Windows CE: サポートされていません
Header: winuser.h 内で定義



WM_GETTEXT

説明
ウィンドウテキストを取得します。

wParam
wParam = (WPARAM) cchTextMax; // number of characters to copy
取得するテキストの最大文字数を設定します。

lParam
lParam = (LPARAM) lpszText; // address of buffer for text
取得するテキストを受け取るバッファへのポインタを代入してやります。

戻り値
取得した文字数が返ります。

デフォルトの動作
DefWindowProc関数は指定したウィンドウのウィンドウテキストをコピーし、その文字数を返します。

解説
エディットコントロールでは、コピーされる文字列はエディット内のテキストです。
コンボボックスでは、コピーされるのはエディット内のテキストやスタティックテキストです。
ボタンではコピーされるのはボタンの名前です。
他のウィンドウでは、コピーされるのはウィンドウのタイトルです。
SS_ICONスタイルを持つスタティックコントロールWM_SETTEXTメッセージを使ってアイコンを設定した場合、このメッセージが送られると、lpszTextのはじめの4バイトにアイコンのハンドルが返ります。
リッチエディットコントロールから64K以上のテキストをコピーするときはEM_STREAMOUTかEM_GETSELTEXTを使ってください。

対応情報
Windows NT: バージョン 3.1 以降
Windows: Windows 95 以降
Windows CE: バージョン 1.0 以降
Header: winuser.h 内で定義



WM_GETTEXTLENGTH

説明
アプリケーションはこのメッセージを送信してウィンドウテキストの長さを文字単位で取得します。
この長さにはテキスト終端のNULL文字は含まれません。

wParam
なし
0でなくてはなりません。

lParam
なし
0でなくてはなりません。

戻り値
文字単位でのテキストの長さが返ります。

デフォルトの動作
DefWindowProc関数は文字単位でのテキストの長さを返します。
ある状況下ではこの値は実際のテキストの長さよりも大きくなります。
詳細については以下の解説を参照して下さい。

解説
エディットコントロールでは、コピーされる文字列はエディット内のテキストです。
コンボボックスでは、コピーされるのはエディット内のテキストやスタティックテキストです。
ボタンではコピーされるのはボタンの名前です。
他のウィンドウでは、コピーされるのはウィンドウのタイトルです。
リストボックスのアイテムのテキストの長さを知るためにはLB_GETTEXTLENメッセージを使うこともできます。

ある状況下では、実際のテキスト長よりも大きな値が返ります。 これは、ANSI と Unicode の特定数の混在で起こり、オペレーティングシステムがテキスト内に DBCS 文字が存在する可能性を許容していることが原因です。 しかし、戻り値は、最低でも実際のテキスト長と同じ大きさになります。 そのため、バッファ割り当ての目安として使用できます。 この状況はANSI関数とUnicodeを使うコモンダイアログを同時に用いたときに起こります。

対応情報
Windows NT: バージョン 3.1 以降
Windows: Windows 95 以降
Windows CE: バージョン 1.0 以降
Header: winuser.h 内で定義



WM_INPUTLANGCHANGE

説明
WM_INPUTLANGCHANGEメッセージはアプリケーションの入力言語が変更された後、影響を受ける一番上のウィンドウに送られます。 アプリケーションは固有の設定をした後、DefWindowProc関数に処理を渡し、第1レベルのすべての子ウィンドウにこのメッセージを送ることができます。 子ウィンドウもDefWindowProcに処理を渡し、その子ウィンドウにメッセージを送ることができます。

wParam
charset = wParam;
新しいキーボードレイアウトを表します。

lParam
hkl = (HKL) lParam;
新しいキーボードレイアウトのハンドルを表します。

戻り値
アプリケーションでこのメッセージを処理する場合、0以外の値を返さなくてはなりません。

対応情報
Windows NT: バージョン 4.0 以降
Windows: Windows 95 以降
Windows CE: サポートされていません
Header: winuser.h 内で定義



WM_INPUTLANGCHANGEREQUEST

説明
WM_INPUTLANGCHANGEREQUESTはユーザーがショートカットキーやタスクバーのインジケーターから言語の入力ロケールをを変更したとき、稼動中のアプリケーションに送られます。 アプリケーションはDefWindowProc関数にメッセージを渡して変更を受け入れるか、すぐに値を返して変更を拒否することができます。

wParam
fSysCharSet = (BOOL) wParam
このパラメーターの最低のビットはシステム文字セットと共にキーボード・レイアウトへのハンドルを使用することができる場合、1になります。 他のビットは予約されています。

lParam
hkl = (HKL) lParam;
新しいキーボードのハンドルを示します。

戻り値
このメッセージはポストされるだけでSendされません。よって戻り値は無視されます。 変更を受け入れるにはDefWindowProc関数にメッセージを渡します。 変更を拒否するにはDefWindowProc関数に値を渡さず、0を返してください。

デフォルトの動作
DefWindowProc関数がこのメッセージを受け取ると、新しい言語ロケールを適用しWM_INPUTLANGCHANGEメッセージを送って設定の変更を通知します。

解説
タスクバーの言語インジケーターはひとつ以上のキーボードレイアウトがインストールされており、コントロールパネルのキーボードの設定でインジケーターを有効にしたときにのみ表示されます。

対応情報
Windows NT: バージョン 4.0 以降
Windows: Windows 95 以降
Windows CE: サポートされていません
Header: winuser.h 内で定義



WM_MOVE

説明
WM_MOVEメッセージはウィンドウの移動が終了したときに送られます。

wParam
なし

lParam
xPos = (int)(short) LOWORD(lParam); // horizontal position
lParamの下位ワードにはウィンドウのクライアント領域の左上のX座標が格納されます。
yPos = (int)(short) HIWORD(lParam); // vertical position
lParamの下位ワードにはウィンドウのクライアント領域の左上のY座標が格納されます。

戻り値
アプリケーションでこのメッセージを処理する場合、0を返さなくてはなりません。

解説
座標はオーバーラップドウィンドウとポップアップウィンドウではスクリーン座標で、子ウィンドウではクライアント座標で送られてきます。

対応情報
Windows NT: バージョン 3.1 以降
Windows: Windows 95 以降
Windows CE: バージョン 1.0 以降
Header: winuser.h 内で定義



WM_MOVING

説明
WM_MOVINGメッセージはユーザーが移動中のウィンドウに送られてきます。 アプリケーションはこのメッセージを処理することでドラッグされているウィンドウの位置やサイズを知ることができます。 また、必要ならその値を変更することができます。

wParam
fwSide = wParam; // edge of window to be moved
ウィンドウのどの端がドラッグされたかを示す値が以下の値の組み合わせで与えられます。
WMSZ_BOTTOM ウィンドウの下の辺がドラッグされています。
WMSZ_BOTTOMLEFT ウィンドウの左下の角がドラッグされています。
WMSZ_BOTTOMRIGHT ウィンドウの右下の角がドラッグされています。
WMSZ_LEFT ウィンドウの左の辺がドラッグされています。
WMSZ_RIGHT ウィンドウの右の辺がドラッグされています。
WMSZ_TOP ウィンドウの上の辺がドラッグされています。
WMSZ_TOPLEFT ウィンドウの左上の角がドラッグされています。
WMSZ_TOPRIGHT ウィンドウの右上の角がドラッグされています。

lParam
lprc = (LPRECT) lParam; // screen coordinates of drag rectangle
ドラッグ矩形(?ウィンドウをドラッグしてるときの点線)をスクリーン座標で表したRECT構造体のアドレスが格納されています。 ドラッグ矩形のサイズや場所をアプリケーションで変えるには、この構造体のメンバを書き換えます。

戻り値
アプリケーションでこのメッセージを処理する場合、TRUEを返さなくてはなりません。

対応情報
Windows NT: バージョン 4.0 以降
Windows: Windows 95 以降
Windows CE: サポートされていません
Header: winuser.h 内で定義