GetMessageW 関数 (winuser.h)
呼び出し元スレッドのメッセージ キューからメッセージを取得します。 この関数は、送信されたメッセージが取得可能になるまで、受信したメッセージをディスパッチします。
GetMessage
構文
BOOL GetMessageW(
[out] LPMSG lpMsg,
[in, optional] HWND hWnd,
[in] UINT wMsgFilterMin,
[in] UINT wMsgFilterMax
);
パラメーター
[out] lpMsg
型: LPMSG
スレッドのメッセージ キューからメッセージ情報を受信する MSG 構造体へのポインター。
[in, optional] hWnd
型: HWND
メッセージを取得するウィンドウへのハンドル。 ウィンドウは現在のスレッドに属している必要があります。
hWnd
[in] wMsgFilterMin
型: UINT
取得するメッセージの最小値の整数値。 WM_KEYFIRST (0x0100) を使用して、最初のキーボード メッセージを指定するか、WM_MOUSEFIRST (0x0200) を使用して最初のマウス メッセージを指定します。
ここでは、wMsgFilterMax
wMsgFilterMin と wMsgFilterMax の両方が 0 の場合、使用可能なすべてのメッセージ GetMessage が返されます (つまり、範囲のフィルター処理は実行されません)。
[in] wMsgFilterMax
型: UINT
取得するメッセージの最大値の整数値。 WM_KEYLAST を使用して、最後のキーボード メッセージを指定するか、最後のマウス メッセージを指定する WM_MOUSELAST を使用します。
wMsgFilterMin と wMsgFilterMax の両方が 0 の場合、使用可能なすべてのメッセージ GetMessage が返されます (つまり、範囲のフィルター処理は実行されません)。
戻り値
型: BOOL
関数が WM_QUIT以外のメッセージを取得する場合、戻り値は 0 以外です。
関数が WM_QUIT メッセージを取得する場合、戻り値は 0 です。
エラーが発生した場合、戻り値は -1 です。 たとえば、hWnd
戻り値には 0 以外、0、または -1 を指定できるため、次のようなコードは避けてください。
while (GetMessage( lpMsg, hWnd, 0, 0)) ...
hWnd が無効なパラメーター (既に破棄されているウィンドウを参照するなど) である場合に -1 戻り値が発生する可能性は、このようなコードが致命的なアプリケーション エラーにつながる可能性があることを意味します。 代わりに、次のようなコードを使用します。
BOOL bRet;
while( (bRet = GetMessage( &msg, hWnd, 0, 0 )) != 0)
{
if (bRet == -1)
{
// handle the error and possibly exit
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
備考
通常、アプリケーションは戻り値を使用して、メイン・メッセージ・ループを終了してプログラムを終了するかどうかを判別します。
GetMessage 関数は、IsChild 関数で指定された、hWnd パラメーターまたはその子のいずれかによって識別されたウィンドウに関連付けられたメッセージを取得します。また、wMsgFilterMin および wMsgFilterMax パラメーターによって指定されたメッセージ値の範囲内です。 アプリケーションでは、
getMessage
この呼び出し中に、システムは保留中のキューに入れられないメッセージ、つまり、
GetMessage は、キューから WM_PAINT メッセージを削除しません。 メッセージは処理されるまでキューに残ります。
最上位のウィンドウが数秒間以上メッセージへの応答を停止した場合、システムはウィンドウが応答していないと見なし、同じ z オーダー、位置、サイズ、およびビジュアル属性を持つゴースト ウィンドウに置き換えます。 これにより、ユーザーはそれを移動したり、サイズを変更したり、アプリケーションを閉じたりすることができます。 ただし、アプリケーションが実際に応答しないため、これらは唯一のアクションを使用できます。 デバッガー モードの場合、システムはゴースト ウィンドウを生成しません。
DPI 仮想化
この API は DPI 仮想化には参加しません。 出力は、メッセージが対象としているウィンドウのモードです。 呼び出し元のスレッドは考慮されません。例
例については、「メッセージ ループの作成」を参照してください。
手記
winuser.h ヘッダーは、Unicode プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして GetMessage を定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされる最小サーバー | Windows 2000 Server [デスクトップ アプリのみ] |
ターゲット プラットフォーム の |
ウィンドウズ |
ヘッダー | winuser.h (Windows.h を含む) |
ライブラリ | User32.lib |
DLL | User32.dll |
API セットの | ext-ms-win-ntuser-message-l1-1-0 (Windows 8 で導入) |
関連項目
概念
IsChild の
PeekMessage の
PostMessage を
PostThreadMessage を
リファレンス
WaitMessage の