WM_USERとは何ですか?
(WM_USER+1)と書いてあったりしますが、WM_USERには普通何が入っているんですか?
Windowsのメッセージのひとつで、ユーザが任意の意味を持たせたメッセージを投げたい場合、
WM_USERに任意の整数を足した値をメッセージとして使います。
しかし、昨今ではWM_USERではなくWM_APPを基準に使うことになっているようです。
#define WM_USER 0x0400
(winuser.hより)
ありがとうございます。winuser.hを見てみると
#define WM_USER 0x0400
があり、その数行上に
#define WM_APP 0x8000
も見つけることができました。
WM_USERは最初から用意されている400という数字だったということが
分かって、また新たな疑問が発生しました。
例えば、ウインドウにボタンが2つある場合、
ボタン作成時にボタンのHMENUをそれぞれ101,102のように指定する
ことが多いと思いますが、ステータスエリアのアイコンの
UINT uCallbackMessageの値には、WM_USER+1とかWM_USER+400とかを
指定されてるソースが多いのです。
NOTIFYICONDATA nidat;
nidat.cbSize = sizeof(NOTIFYICONDATA);
nidat.hWnd = hWnd;
nidat.uID = 101;
nidat.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE;
nidat.uCallbackMessage = (WM_USER+1);
nidat.hIcon = LoadIcon(hIcon);
lstrcpy(nidat.szTip, この文字が表示されます);
Shell_NotifyIcon(NIM_ADD, &nidat);
NOTIFYICONDATA構造体では、なぜUINT uIDの場合はプログラマが
そのままの適当な数字を指定するのに、UINT uCallbackMessageでは
WM_USERの値を数値に含ませるのですか?
>ありがとうございます。winuser.hを見てみると
winuser.hを見たのなら
/*
* NOTE: All Message Numbers below 0x0400 are RESERVED.
*
* Private Window Messages Start Here:
*/
これは、読まなかったのですか?
さらに上を見れば
WM_PAINT,WM_LBUTTONUP,WM_KEYDOWN,...
等の良く使われるメッセージが出てきませんか?
>NOTIFYICONDATA構造体では、なぜUINT uIDの場合はプログラマが
>そのままの適当な数字を指定するのに、
コントロールIDは、アプリケーション(正確には、ウインドウ...)ごとに違うから、
内部で被らなければ何を使ってもかまわないということで問題なし。
>UINT uCallbackMessageでは WM_USERの値を数値に含ませるのですか?
メッセージのIDは、ウインドウズで共通の番号を使用するからウインドウズで予約されている
個所以降を割り振る。
ということです。
>ウインドウズで予約されている
それで400以上を指定しなければならなかったのですね。
昨今では800以上というのも納得できました。
ありがとうございました。