コモンコントロールとWM_NOTIFYとWM_COMMAND

通知メッセージのくせにWM_COMMANDで届く

WM_COMMANDと言えばメニューバーが操作されたときに届くメッセージ。
だけどそれだけじゃない。
なんと、コンボボックスが操作されたとき、通知メッセージがWM_COMMANDで届く。
(コンボボックスはコモンコントロールの一種。他のコモンコントロールの通知メッセージは、普通はWM_NOTIFYで届く。)
MSDNで適当に調べてみたので、そのまとめ。

コモンコントロールの一覧と、通知メッセージ

普通はWM_NOTIFYで通知メッセージが届きます。
また、WM_COMMAND/WM_NOTIFY両方とも使うやつもあるみたいです。
C=WM_COMMAND, N=WM_NOTIFY

コモンコントロール 通知メッセージ
ComboBox C
AnimationCtrl C
RichEditCtrl C/N
ListView N
TreeView N
HeaderCtrl N
ToolBar N
TabCtrl N
ToolTip N
TrackBar N
UpDownCtrl N
ReBarCtrl N
DragListBox 不明(*1
Progress ないかもしれない(*2
StatusBar ないかもしれない
HotKeyCtrl 不明

僕自身、GUIの経験があまりにも浅いので、使ったことのないものがほとんどです。
ひょっとしたら大きな勘違いをしてるかもしれないですが、指摘していただけるとうれしいです。

あとがき

MSDNって文書の形式に一貫性がないですね。
同じコモンコントロールにしても、タイトルが"List-View"とか"Combo Box"とか、
"TreeView"なんてなってて検索しにくい。
中身(構成)も結構ばらばら。ページが分けてあったり、分けてなかったり。
サンプルはあったりなかったり。(あるだけでも、ありがたいんですけどね。)

追記

10/04/02

WM_COMMANDとWM_NOTIFYの違いには歴史的な理由があるかもしれません。
歴史的な理由っていうとすごい感じですが、つまり負の遺産ですね。
こちらのページの最初の方を参照。
VC++テクニック:豆知識-WM_NOTIFYとOn_Notify
WM_COMMANDには、(負の遺産により)あまり多くの情報を渡すことができない。
だからWM_NOTIFYが作られた。(WM_NOTIFYのlParamは、情報が詰まった構造体へのポインタ)
ってな所ですかね。

*1:わかんないけど、流れからしてWM_NOTIFY

*2:プログレスバーは表示するだけで入力がなく、情報が一方通行だから、通知メッセージそのものがないかもしれない。