WM_USER – プログラミング – Home

通知
すべてクリア

[解決済] WM_USER


pico
 pico
(@pico)
ゲスト
結合: 23年前
投稿: 3
Topic starter  

WM_USERとは何ですか?
(WM_USER+1)と書いてあったりしますが、WM_USERには普通何が入っているんですか?


引用未解決
トピックタグ
sugar
 sugar
(@sugar)
ゲスト
結合: 24年前
投稿: 448
 

Windowsのメッセージのひとつで、ユーザが任意の意味を持たせたメッセージを投げたい場合、
WM_USERに任意の整数を足した値をメッセージとして使います。
しかし、昨今ではWM_USERではなくWM_APPを基準に使うことになっているようです。

#define WM_USER 0x0400
(winuser.hより)


返信引用
pico
 pico
(@pico)
ゲスト
結合: 23年前
投稿: 3
Topic starter  

ありがとうございます。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の値を数値に含ませるのですか?


返信引用
不良PG
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 188
 

>ありがとうございます。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は、ウインドウズで共通の番号を使用するからウインドウズで予約されている
個所以降を割り振る。

ということです。


返信引用
pico
 pico
(@pico)
ゲスト
結合: 23年前
投稿: 3
Topic starter  

>ウインドウズで予約されている
それで400以上を指定しなければならなかったのですね。
昨今では800以上というのも納得できました。
ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました