WM_USER – プログラミング – Home

通知
すべてクリア

WM_USER


borrel
 borrel
(@borrel)
ゲスト
結合: 18年前
投稿: 29
Topic starter  

WM_USERとPostMessageを使用したプログラムを作成中です。ダイアログベースではうまくいっ
たのに、SDIでは、応答がなくなりました。ダイアログベースとSDIではなにか違いがあるので
しょうか?


引用解決済
トピックタグ
borrel
 borrel
(@borrel)
ゲスト
結合: 18年前
投稿: 29
Topic starter  

開発環境は、Windows2000、VC++6.0、MFCです。


返信引用
borrel
 borrel
(@borrel)
ゲスト
結合: 18年前
投稿: 29
Topic starter  

プログラムは、以下のようになっています。

#define WM_READ WM_USER+5
HWND hWnd;

afx_msg LRESULT OnRead(WPARAM w,LPARAM l);
//マクロ
ON_MESSAGE(WM_READ,OnRead)

void Func1(void)
{
...
::PostMessage(hWnd,WM_READ,0,0);
...
}

LRESULT OnRead(WPARAM w,LPARAM l)
{
...
}


返信引用
RAPT
 RAPT
(@RAPT)
ゲスト
結合: 22年前
投稿: 310
 

これだけじゃ、わからんです。
その PostMessage を外したらうまく動作しますか?

あと、プログラマ定義の WindowsMessageID は、WM_USER ではなく、WM_APP を
使うことが推奨されています。


返信引用
wclrp ( 'o')
 wclrp ( 'o')
(@wclrp ( 'o'))
ゲスト
結合: 18年前
投稿: 287
 

SDIでもPostMessageやON_MESSAGEが使えるはず。
ウィンドウハンドルが間違えているとか?

応答がなくなりましたっていうとフリーズかと思ってしまう。


返信引用
YuO
 YuO
(@YuO)
ゲスト
結合: 22年前
投稿: 320
 

> あと、プログラマ定義の WindowsMessageID は、WM_USER ではなく、WM_APP を
> 使うことが推奨されています。

ん?
・WM_APPはアプリケーション全体を通して意味ある値
・WM_USERはそのウィンドウクラス専用の値
という使い分けであって,どちらかを推奨してはいないと思うのですが……。
# とりあえず,私はMSDNから読み取れなかった。

上記の理由から,WM_USERをダイアログに使う方が非常にまずいような……。


返信引用
wclrp ( 'o')
 wclrp ( 'o')
(@wclrp ( 'o'))
ゲスト
結合: 18年前
投稿: 287
 

昔の話なので正確に覚えてない。
WM_USERがよく使われ
WM_USERじゃなくてWM_APPを使えに代わったのが
昔はWM_APPがなかったから。

Microsoftの公式な発表なのかわからない。
昔はWindowsの本なんて著名なのが少ししかなく
WM_USER+小さい数字は避けましょうって書いてあった。
というか当時はインターネットが存在しないから
Microsoftの公式な発表か確認なんて出来ねーな。アハハ

WM_USER+小さい数字は
いくつかダイアログやコントロールで使っているからね。
普通のウィンドウならOkってことになるけど
ダイアログに予定変更なんてこともあるかもしれないし
人間完璧じゃない
うっかりミスやすっかり忘れてしまうこともあるし。


返信引用
borrel
 borrel
(@borrel)
ゲスト
結合: 18年前
投稿: 29
Topic starter  

あいまいな表現でもうしわけありません。
アプリケーション自体はフリーズすることなく動作しています。
PostMessageによるメッセージ処理の反応がないだけで、あとは特に問題ありません。


返信引用
borrel
 borrel
(@borrel)
ゲスト
結合: 18年前
投稿: 29
Topic starter  

WM_USERについては、たしかにMFCも使用しているので「WM_USER+小さい値」は、避けたほうが
よいという資料もありましたので、WM_USER+10やWM_USER+100など、大きな値でも確かめまし
たが、動作しませんでした。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

>hWnd
ってどこで代入していますか?

>ON_MESSAGE(WM_READ,OnRead)
単独で記述している?

>OnRead
メンバ関数ではない?

出来るだけ情報を省略しないで載せてもらえませんか?
それと、最低限のコード(他の記述を一切書かないでPostMessageだけ正しく動くかどう
かのミニマムコード)でも再発するか確認してみてはどうでしょうか?


返信引用
いろは
 いろは
(@いろは)
ゲスト
結合: 21年前
投稿: 43
 

たぶんメッセージを投げている先が問題なのでは?

フレームとビューの区別はちゃんとついてますか?


返信引用
えちぜん
 えちぜん
(@えちぜん)
ゲスト
結合: 18年前
投稿: 15
 

WM_APP使った方がいいというのはMSDNのこのページのことじゃないでしょうか。

http://support.microsoft.com/kb/86835/ja
http://msdn2.microsoft.com/en-us/library/ms644930.aspx

一部のコントロールでWM_USERの範囲内に定義されていると書いてあるようです。


返信引用
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

ウインドウクラスから定義した自作のコントロールを作る場合とか
WM_USERの方がよい場合もありますので、使い分けが重要なんじゃないでしょうか。
今回のように単一のアプリでしか使われないようなウインドウなら
WM_APPの方がよいと思います。

本題の件に関してはやっぱりウインドウハンドルが間違っているんじゃないかな?と。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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