コントロールの場合、WM_COMMANDが発生した時、リソースIDとは別にどういう操作が行われたかを示す通知コードを返す。
ボタンが押された時には、押されたボタンのリソースIDとともに、BN_CLICKEDという通知コードが返ってくる。
BN_CLICKED notification code - Windows applications | Microsoft Docs
通知コードは、HIWORD(wParam)で取得できるが、メニューは常に0、アクセラレータは常に1になり、コントロールの場合はあらかじめ定められた通知コードになる。

Win32プロジェクトで、

空のプロジェクト。

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

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