WM_SYSCOMMAND メッセージ
ウィンドウは、ユーザーが ウィンドウ メニュー (旧称システムまたはコントロール メニュー) からコマンドを選択したとき、またはユーザーが最大化ボタン、最小化ボタン、復元ボタン、または閉じるボタンを選択したときに、このメッセージを受け取ります。
#define WM_SYSCOMMAND 0x0112
例
case WM_SYSCOMMAND:
if (wParam == SC_CLOSE)
{
EndDialog (hDlg, TRUE);
return(TRUE);
}
break;
パラメーター
-
wParam
-
要求されたシステム コマンドの種類。 このパラメーターには、次の値のいずれかを指定できます。
値 意味 - SC_CLOSE
- 0xF060
ウィンドウを閉じます。 - SC_CONTEXTHELP
- 0xF180
ポインターを使用してカーソルを疑問符に変更します。 ユーザーがダイアログ ボックスでコントロールをクリックすると、コントロールは WM_HELP メッセージを受け取ります。 - SC_DEFAULT
- 0xF160
既定の項目を選択します。ユーザーがウィンドウ メニューをダブルクリックしました。 - SC_HOTKEY
- 0xF150
アプリケーション指定のホット キーに関連付けられているウィンドウをアクティブにします。 lParam パラメーターは、アクティブ化するウィンドウを識別します。 - SC_HSCROLL
- 0xF080
水平方向にスクロールします。 - SCF_ISSECURE
- 0x00000001
スクリーン セーバーがセキュリティで保護されているかどうかを示します。 - SC_KEYMENU
- 0xF100
キーストロークの結果としてウィンドウ メニューを取得します。 詳細については、「解説」を参照してください。 - SC_MAXIMIZE
- 0xF030
ウィンドウを最大化します。 - SC_MINIMIZE
- 0xF020
ウィンドウを最小化します。 - SC_MONITORPOWER
- 0xF170
ディスプレイの状態を設定します。 このコマンドは、バッテリ駆動のパーソナル コンピューターなど、省電力機能を備えているデバイスをサポートします。
lParam パラメーターには、次の値を指定できます。- -1 (ディスプレイの電源が入っている)
- 1 (ディスプレイが低電力になる)
- 2 (ディスプレイがシャットダウン中)
- SC_MOUSEMENU
- 0xF090
マウス クリックの結果としてウィンドウ メニューを取得します。 - SC_MOVE
- 0xF010
ウィンドウを移動します。 - SC_NEXTWINDOW
- 0xF040
次のウィンドウに移動します。 - SC_PREVWINDOW
- 0xF050
前のウィンドウに移動します。 - SC_RESTORE
- 0xF120
ウィンドウを通常の位置とサイズに戻します。 - SC_SCREENSAVE
- 0xF140
System.ini ファイルの [boot] セクションで指定されたスクリーン セーバー アプリケーションを実行します。 - SC_SIZE
- 0xF000
ウィンドウのサイズを変更します。 - SC_TASKLIST
- 0xF130
[スタート] メニューをアクティブにします。 - SC_VSCROLL
- 0xF070
垂直方向にスクロールします。 -
lParam
-
ウィンドウ メニュー コマンドをマウスで選択した場合、下位ワードはカーソルの水平位置を画面座標で指定します。 それ以外の場合、このパラメーターは使用されません。
ウィンドウ メニュー コマンドがマウスで選択されている場合、高位ワードはカーソルの垂直方向の位置を画面座標で指定します。 このパラメーターは、システム アクセラレータを使用してコマンドを選択した場合は 1、ニーモニックを使用する場合は 0 です。
戻り値
このメッセージを処理する場合、アプリケーションは 0 を返す必要があります。
解説
画面座標の位置座標を取得するには、次のコードを使用します。
xPos = GET_X_LPARAM(lParam); // horizontal position
yPos = GET_Y_LPARAM(lParam); // vertical position
DefWindowProc 関数は、前の表で指定した定義済みのアクションのウィンドウ メニュー要求を実行します。
WM_SYSCOMMANDメッセージでは、wParam パラメーターの 4 つの下位ビットがシステムによって内部的に使用されます。 wParam の値をテストするときに正しい結果を取得するには、アプリケーションでビットごとの AND 演算子を使用して、0xFFF0値と wParam 値を組み合わせる必要があります。
ウィンドウ メニューのメニュー項目は、GetSystemMenu、AppendMenu、InsertMenu、ModifyMenu、InsertMenuItem、および SetMenuItemInfo 関数を使用して変更できます。 ウィンドウ メニューを変更するアプリケーションでは、 メッセージWM_SYSCOMMAND 処理する必要があります。
アプリケーションは、WM_SYSCOMMAND メッセージをDefWindowProc に渡すことによって、いつでも任意のシステム コマンドを実行できます。 アプリケーションによって処理されない WM_SYSCOMMAND メッセージは 、DefWindowProc に渡す必要があります。 アプリケーションによって追加されたコマンド値は、アプリケーションによって処理される必要があり、 DefWindowProc に渡すことはできません。
ポリシーによってパスワード保護が有効になっている場合、DefWindowProc への渡しに失敗した場合でも、SC_SCREENSAVE通知でアプリケーションが何を行うかに関係なく、スクリーン セーバーが開始されます。
ウィンドウ メニューから項目を選択するために定義されたアクセラレータ キーは、 WM_SYSCOMMAND メッセージに変換されます。他のすべてのアクセラレータ キーストロークは、 WM_COMMAND メッセージに変換されます。
wParam がSC_KEYMENUの場合、lParam には、ポップアップ メニューを表示するために Alt キーと共に使用されるキーの文字コードが含まれます。 たとえば、Alt + F キーを押してファイル ポップアップを表示すると、wParam が SC_KEYMENU、lParam が 'f' と等しいWM_SYSCOMMANDが発生します。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント |
Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされている最小のサーバー |
Windows 2000 Server [デスクトップ アプリのみ] |
ヘッダー |
|