【C++】「ボタン」が押されたことを認識する方法

【C++】
【Windows App】
「ボタン」が押されたことを認識する方法




「Windowsアプリケーション」で、
「ボタン」を押されたり、
「文字」を入力されたり、
何らかのアクションに対して、
プログラミングで「反応」を設定するのが、
プログラミング開発の一つの要素。


今回は、
画面上に表示された「ボタン」を押された時の
「アクション」を取得する方法をまとめています。



「ボタン」を押されたことを認識する方法


「ボタン」を作成するときに、
「CreateWindow」関数「CreateWindowEx」関数の
「メニューハンドル」の引数の所に、識別のための「値」を記述しておきます。


「CreateWindow」関数「CreateWindowEx」関数の「メニューハンドル」の記述場所

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 message, WPARAM wParam, LPARAM lParam)
{

switch (message)
    {
    case WM_COMMAND:
        {
       
        int wmId = LOWORD(wParam);
        switch (wmId)
            {
            case 1:
                {
               
                「ボタン」を押された時の反応を指示するプログラムコードを記述するエリア
                「ボタン」を押されたら、どうするかを、ここに記述します。
               
                }
                break;
               
            }
        }
    break;
   
   
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}



「ウィンドウプロシージャ」関数の中で、
ユーザーの行動の区分が保存されていて、
「ユーザーのアクション」を示す「WM_COMMAND」を
「switch」構文などで、認識し条件分岐することで、
各ボタンへの対応を記述することが可能になる。


「WM_COMMAND」まで区分ができ、
どの「ボタン」「行動」かを区分するには、
押された「ボタン」の「メニューハンドル」が保存されている
「LOWORD(wParam)」の値を条件分岐し、
ボタンへの反応を記述することができる。


上記のサンプルコードでは、
「メニューハンドル」に「1」を指定したので、
「case 1:」と条件を絞ることで、
「ボタン」を押された時の反応を指示するプログラムコードを、
記述することが可能となる。





Back

「ボタン」を押されたことを認識してメッセージボックスを表示するサンプルコード





LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{

switch (message)
    {
    case WM_COMMAND:
        {
       
        int wmId = LOWORD(wParam);
        switch (wmId)
            {
            case 1:
                {
               
                MessageBox(hWnd, _T("「ボタンがクリックされました!"), _T("Button Check"), MB_OK);
               
                }
        break;
       
            }
        }
    break;
   
   
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}



Back