Appクラスでユーザー定義メッセージを受けとる方法について

[戻る]
平井 2001/11/21(水) 00:01:42
VisualC++6.0 で質問があります。

SendMessage関数の定義は
SendMessage(HWND hWnd,・・・)となっていますが、
メンバ変数にm_hWndを持たないAppクラスやDocクラスに
メッセージを送ることはできるのでしょうか。
また、その場合CViewクラスにメッセージを送る場合と
異なる点はありますでしょうか。

ワーカースレッドからユーザー定義メッセージを送り、
Appクラスのハンドラで処理したいと思っています。

それとも、メッセージは CWnd クラスや CView クラス
で受け取って、そこから目的クラスのメンバ関数を使用す
るのが普通のやり方なのでしょうか。

よろしくお願いします。

Bun 2001/11/21(水) 15:10:25
>ワーカースレッドからユーザー定義メッセージを送り、
>Appクラスのハンドラで処理したいと思っています。

いやぁ〜、思いつきませんですぅ。hWndがないっすからねェ。(^^;

なぜ、Appクラスで処理されたいのでしょうか?
ハンドラ関数とは、どんな時に処理するもの?

平井 2001/11/21(水) 16:56:35
> なぜ、Appクラスで処理されたいのでしょうか?
> ハンドラ関数とは、どんな時に処理するもの?

・Appクラスでワーカースレッドを生成する
・ワーカースレッド終了時に終了メッセージをAppクラスに送る
・Appクラスのメッセージハンドラで新たなワーカースレッドを生成する。

という処理を実現したいと思っていました。
上記処理のAppクラスをウィンドウクラスに換えれば問題なさそうですが、
メッセージはあくまでもウィンドウクラスでしか受け取れないという認識
でよろしいのでしょうか。

Bun 2001/11/21(水) 17:12:01
>メッセージはあくまでもウィンドウクラスでしか受け取れないという認識
>でよろしいのでしょうか。

正しいかわかりませんが、私はそういう認識をしています。

ワーカースレッドを立てた理由は何でしょうか?

前回の質問内容からだけでは、わざわざスレッドを立てる必要はないように思えます。

平井 2001/11/21(水) 17:51:13
> ワーカースレッドを立てた理由は何でしょうか?

前回の質問では関係のないコードは省かせて頂きました。
ワーカースレッドでは、実際にはインターネットからファイルを
ダウンロードしています。時間の掛かる処理になると思いました
ので、ワーカースレッドを試しています。

UINT ThreadFunc(LPVOID pParam)
{
    hSession = InternetOpen();
    hFile    = InternetOpenUrl();
    
    while(1) {
        InternetReadFile();
        if (読込み終了) break;
        /*---- 中略 ----*/
        ::PostMessage(hWnd, (WM_USER + 100), 0, 0);
        // 再描画はうまくいっていますが、チラチラします。
        // 頻繁に更新し過ぎでしょうか。                          
    }
    
    InternetCloseHandle(hFile);
    InternetCloseHandle(hSession);
    
    // ここで終了メッセージをAPPクラスに送ろうとしました。
    
    return 0;
}

以上です。
よろしくお願いします。

haogege 2001/11/21(水) 17:54:23
MassageMap中定義及びOnScan関数
ON_THREAD_MESSAGE(WM_THREAD_SCAN , OnScan)

コルの場合
while(!PostThreadMessage(theApp.m_nThreadID ,WM_THREAD_SCAN, 0,0))
        Sleep(10);

Bun 2001/11/21(水) 18:22:28
どう設計するかにもよるのでしょうけど (^^;

結果をViewに反映させるわけですし
私でしたら Viewで処理します。

平井 2001/11/22(木) 00:59:07
[[解決]]
haogegeさんにご提案頂いた方法により、Appクラスでもメッセージ(?)が受け取れる
ことが確認できました。ただ、Appクラスで処理しなければならない理由は特にありま
せんので、どのクラスで処理するのが一番スマートかについてこれから考えていきたい
と思います。

色々と勉強になりました。
Bunさん、haogegeさん、ありがとうございました。

古いスレッドには追加発言できません。