メッセージの受け取り方が分かりません。 – プログラミング – Home

メッセージの受け取り方が分かりません。
 
通知
すべてクリア

メッセージの受け取り方が分かりません。


山本
 山本
(@山本)
ゲスト
結合: 23年前
投稿: 9
Topic starter  

はじめまして。いつもお世話になっております。山本といいます。
VC6.0 MFC ダイアログベース にて開発を行っています。

さっそく質問なんですが、メッセージの受け渡しに対してギブアップです。

こちら様のサイトの下記を参考に作成を試みたのですが、残念な結果になりました。
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200004/00040004.txt

まず、
> // メソッドの内容を記述
> LRESULT CxxxView::OnMyMessage(WPARAM wParam, LPARAM lParam )
> {
> // ここにメッセージを受け取ったときの処理を記述
> }
とあったのですが、戻り値を求められました。戻り値が分かりません。
# 分からなかったのでとりあえず数値の0を返しました。

以下は自分で書いた部分です。

CTestDlg.cpp内
// WM_APPのほうが安全とどこかで見ました。
#define WM_MYMESSAGE ( WM_APP + 1 )

// イニットダイアログ内でセカンダリスレッド作成
BOOL CTestDlg::OnInitDialog()
{
CWorkThread wThread;
wThread.CreateThread ( 0, 0 );
return TRUE;
}

// ボタンを追加し、押下でポストメッセージ
void CTestDlg::OnButton()
{
PostMessage ( WM_MYMESSAGE, 0, 0 );
}

WorkThread.h内
// 追加
//{{AFX_MSG(CWorkThread)
afx_msg LRESULT OnMyMessage ( UINT wParam, LONG lParam );
//}}AFX_MSG

WorkThread.cpp内
// メッセージマップに追加
//{{AFX_MSG_MAP(CWorkThread)
ON_MESSAGE ( WM_MYMESSAGE, OnMyMessage )
//}}AFX_MSG_MAP

LRESULT CWorkThread::OnMyMessage ( WPARAM wParam, LPARAM lParam )
{
TRACE (MessageGet\n); // 来たらトレースで文字を表示
return 0; // 戻り値が分かりません。
}

コードは以上。
エラーなどは出ません。でもボタンを押下しても無反応です。
他の部分では特に問題は起こっていません。と、思います。

質問としては、
1・LRESULT C~::OnMyMessage ( WPARAM wParam, LPARAM lParam )の戻り値
2・上記のコードの悪い部分と、その修正方法
3・MSDNのどのあたりを調べるのがよいか → 英語が理解できませんでした。
4・その他の参考になりそうなサイト等の情報
です。

長々と申し訳ないです。
ポストメッセージの基本部分のことだと思いますが、よろしくお願いします。


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

見たところ、WM_MYMESSAGEメッセージはCTestDlgに向けてポスとしているのに、
CWorkThreadクラスで受け取ろうとしていますね。
CTestDlgクラスのメッセージマップに

ON_MESSAGE ( WM_MYMESSAGE, OnMyMessage )

を記述し、

afx_msg LRESULT OnMyMessage ( UINT wParam, LONG lParam );

もCTestDlgクラスに追加すべきかと。


返信引用
REE
 REE
(@REE)
ゲスト
結合: 23年前
投稿: 240
 

CWorkThreadでメッセージを受けたいのですよね?
今のままでは、CTestDlgが自分自身にメッセージを送っています。

また、スレッドクラスを、メンバ変数として持つ必要があります。
(今のままでは、OnInitDialog終了時にスレッドクラスが破棄されてしまいます)

CWorkThreadがCWinThreadを継承しているのであれば、

CWinThread::PostThreadMessage と ON_THREAD_MESSAGE をご参考に


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

sugarさん、REEさん。ありがとうございます。

>WM_MYMESSAGEメッセージはCTestDlgに向けて
PostMessageってそういうもんだったんですね。

m_wThread.PostThreadMessage ( WM_MYMESSAGE, 0, 0 );
と修正しました。で、動いてくれました!

頭の中に描いていたメッセージの動き(流れ?)に大きな勘違いがありました。
メッセージキューのイメージが間違ってました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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