メッセージのWM_COMMAND

ユーザーがメニューからコマンド項目を選択したとき、コントロールがその親ウィンドウに通知メッセージを送信したとき、またはアクセラレータキーストロークが変換されたときに送信されます。

#define WM_COMMAND                      0x0111

パラメーター

wParam

このパラメーターの説明については、「解説」を参照してください。

lParam

このパラメーターの説明については、「解説」を参照してください。

戻り値

アプリケーションがこのメッセージを処理する場合は、0 を返す必要があります。

BOOL AboutDlg (
    HWND hDlg, 
    UINT message, 
    WPARAM wParam, 
    LPARAM lParam)
{
    BOOL bRet = FALSE;
    
    switch (message) 
    {
        case WM_INITDIALOG:
            bRet = TRUE;
            break;

        case WM_COMMAND:
            if (wParam == IDOK ||
                wParam == IDCANCEL) 
            {
                EndDialog(hDlg, TRUE);
                bRet = TRUE;
            }
            break;
    }

    return bRet;
}

GitHub Windowsクラシック サンプルから取得した例。

解説

ここでは、wParam パラメーターと lParam パラメーターの使用についてまとめます。

メッセージ ソース wParam (ハイ ワード) wParam (低い単語) lParam
メニュー 0 メニュー識別子 (IDM_*) 0
アクセラレータ 1 アクセラレータ識別子 (IDM_*) 0
コントロール コントロール定義の通知コード コントロール識別子 コントロール ウィンドウへのハンドル

アプリケーションでメニュー区切り記号を有効にした場合、ユーザーが区切り 記号を選択 すると、 wParam パラメーターの下位ワードが 0 に設定されたWM_COMMAND メッセージが送信されます。

MENUINFO.dwStyle 値が MNS_NOTIFYBYPOS のメニューが定義されている場合、WM_COMMANDではなくWM_MENUCOMMANDが送信されます。

アクセラレータ

ウィンドウ メニューから項目を選択するアクセラレータキーストロークは、 WM_SYSCOMMAND メッセージに変換されます。

メニューを所有するウィンドウが最小化されているときにメニュー項目に対応するアクセラレータキーストロークが発生した場合、 WM_COMMAND メッセージは送信されません。 ただし、ウィンドウのメニューまたはウィンドウ メニューのどの項目とも一致しないアクセラレータキーストロークが発生した場合、ウィンドウが最小化されている場合でも、 WM_COMMAND メッセージが送信されます。

必要条件

要件
サポートされている最小のクライアント
Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー
Windows 2000 Server [デスクトップ アプリのみ]
ヘッダー
Winuser.h (Windows.h を含む)

関連項目

参照

HIWORD

LOWORD

概念

メニュー