WM_APPの薦め

ウィンドウへ独自のメッセージを送る際、よく定義にWM_USER+100とか書いたりしますが
実はWM_USERはユーザ定義用ではなく定義済みコントロール(ウィンドウ)クラス
(DIALOGやBUTTON等)の為に使われています。
例えばDM_SETDEFID(WM_USER+1)と定義されていて
これはダイアログのデフォルトのプッシュボタンを設定するメッセージです。

つまり、WM_USERを使うと他のメッセージとコンフリクト(衝突)してしまう危険があります。
そして予期せぬ動作をしてしまう可能性が有るので注意が必要です。
例えば以下の動作は同じになります。

SetDefID(IDC_BUTTON);
PostMessage(WM_USER + 1, IDC_BUTTON, 0);


全てのメッセージを把握してWM_USERを使うのもいいですが
今後のWindowsでも使える保証はありませんし何よりも把握するのも面倒です。

そこでWM_USERの代わりに使用するのがWM_APPです。
ちなみにWM_APP0x8000と定義されています。(WM_USER0x0400)
WM_APP〜0xBFFFの値は、どのシステムのメッセージともコンフリクトしないことが保証されています。
わざわざ危険なWM_USERを使うよりはWM_APPを使用した方が良いでしょう。

参考までにメッセージに割り当てられている数値を書いておきます。


0x0000          〜 WM_USER-1 システムで使われるメッセージ用
WM_USER(0x0400) 〜 WM_APP-1  それぞれのウィンドウクラスで使われる整数メッセージ用
WM_APP (0x8000) 〜 0xBFFF    アプリケーションで使う整数メッセージ用
0xC000          〜 0xFFFF    アプリケーションで使う文字列メッセージ用
                             (RegisterWindowMessage を参照)
0xFFFF 以降                  将来のために予約されています

# ちなみにこの文章は某掲示板の過去ログの記事をほぼ丸写ししています。(^^;
2011/10/13 WM_USERの値が0x4000になってたのを修正。

< 戻る << HOME ©1999-2011 by Akky, All right reserved.