BN_CLICKED

コントロールの場合、WM_COMMANDが発生した時、リソースIDとは別にどういう操作が行われたかを示す通知コードを返す。
ボタンが押された時には、押されたボタンのリソースIDとともに、BN_CLICKEDという通知コードが返ってくる。

BN_CLICKED notification code - Windows applications | Microsoft Docs

通知コードは、HIWORD(wParam)で取得できるが、メニューは常に0、アクセラレータは常に1になり、コントロールの場合はあらかじめ定められた通知コードになる。

Win32プロジェクト
Win32プロジェクト

Win32プロジェクトで、

空のプロジェクト
空のプロジェクト

空のプロジェクト。

BN_CLICKED.cpp
BN_CLICKED.cpp

BN_CLICKED.cppを追加。
中身は以前WM_CLOSEのトピックで使ったWM_CLOSE.cppをベースにしている。

Menuリソースを追加
Menuリソースを追加

Menuリソースを追加。
これも中身(BN_CLICKED.rcやresource.h)をWM_CLOSEのトピックで使ったものに差し替える。

ソースコードの違いとしては、

メニューアイテムの場合、HIWORD(wParam)は0なので、HIWORD(wParam)の値をOutputDebugStringでデバッグ出力。

ボタンの場合、HIWORD(wParam)はBN_CLICKEDだが、BN_CLICKEDは0なので、前に"BN_CLICKED: "と付けて、HIWORD(wParam)の値をOutputDebugStringでデバッグ出力。

デバッグ開始
デバッグ開始

[デバッグ開始]で、

起動時
起動時

最初はこうだが、

メニューアイテムを選択
メニューアイテムを選択

メニューアイテムを選択すると、

確認
確認

これが出て、OKを押すと終了する。
この時、デバッグ出力は、

メニューアイテムデバッグ出力
メニューアイテムデバッグ出力

こうなっている。
HIWORD(wParam)は0。

デバッグ開始
デバッグ開始

もう一度、デバッグ開始。

ボタンを押す
ボタンを押す

今度はボタンを押すと、

確認
確認

これが出るので、OKで終了する。

この時のデバッグ出力は、

ボタンデバッグ出力
ボタンデバッグ出力

こうなる。
"BN_CLICKED: "の後に、HIWORD(wParam)が出ているが0である。

Sample/winapi/BN_CLICKED/BN_CLICKED/src/BN_CLICKED at master · bg1bgst333/Sample · GitHub