フォーカスを移さずにホイールを機能させるには?

[戻る]
tokuchan 2002/05/28(火) 12:14:09
環境:Win2000 VC++6.0 MFC

Outlook Expressなどは、各ビューにマウスポインタを合わせた状態でホイールを動かすと
クリックしてフォーカスを移さなくても動作しますよね?
これをコード上で実現するにはどうすればよいのでしょうか?

フォーカスを移すのであれば、各ビューのWM_MOUSEMOVEのメッセージハンドラで、

this->SetFocus();

とすればできると思うのですが、フォーカスを移さずに動作させる方法がわかりません。
どなたか知っていたら教えて頂けますでしょうか?

宜しくお願いします。

dairygoods 2002/05/28(火) 12:57:49
次のようにすれば出来るのではないでしょうか?
1) メインウィンドウのPreTranslateMessage()でWM_MOUSEWHEELを横取りし、
2) マウスポインタ位置のウィンドウを求め、
3) そのウィンドウにWM_MOUSEWHEELを横流しする。

tokuchan 2002/05/28(火) 15:24:26
[[解決]]
dairygoodsさん、お返事ありがとうございました。
おかげさまでできました。

MOUSEMOVEだと多少CPUパワーを食いそうだったので、嫌だなと思っていたので
非常に助かりました。
ありがとうございました。


参考までに以下にソースを書いて置きます。
ソースを追加したのはMainFrameです。
仮想関数のPreTranslateMessageを追加して以下のようにしました。


BOOL CMainFrame::PreTranslateMessage(MSG* pMsg) 
{
    switch(pMsg->message){
    case WM_MOUSEWHEEL:
        POINT pos;
        CWnd* pWnd;
        GetCursorPos(&pos);
        pWnd = WindowFromPoint(pos);
        pWnd->SendMessage(WM_MOUSEWHEEL,pMsg->wParam,pMsg->lParam);
        return TRUE;
        break;
    }
    return CFrameWnd::PreTranslateMessage(pMsg);
}

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