Win32APIのデフォルトではクリックイベント(WM_COMMAND)は MOUSE UP に割り当てられている。
MOUSE DOWN と MOUSE UP の両方のイベントを取得する方法。
1. コントロール の Notify を有効化
ボタン・コントロールのNotify(BS_NOTIFY)を有効(True)に切り替える。
2. Window(Dialog)プロシージャでイベントをフック
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
LRESULT CALLBACK aDialogProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam) { switch(Msg) { case SERMSG_CREATE: /* 中略 */ break; case WM_COMMAND: /* フックする */ switch (LOWORD(wParam)) { /* Low Word でボタンIDを取得 */ case ID_BUTTON_A: /* 押下変化を監視するボタンIDをフックする */ switch (HIWORD(wParam)) { /* Hight Word でイベント種類を取得 */ case BN_SETFOCUS: /* フォーカス・イベントをフック */ /* フォーカス => Button is pushed */ /* ボタンが押されたときの処理 */ break; case BN_CLICKED: /* クリックイベントをフック */ /* クリック => Button is released */ /* ボタンが離されたときの処理 */ SetFocus(GetDlgItem(hDlg, ID_THE_OTHER)); /* 別のコントロールへフォーカスを移動させることが肝 */ break; default: /* 中略 */ } case ID_BUTTON_B: /* 中略 */ } case WM_SIZE: /* 中略 */ } /* 中略 */ return TRUE; } |