環境:Win2000 VC++6.0 MFC
Outlook Expressなどは、各ビューにマウスポインタを合わせた状態でホイールを動かすと
クリックしてフォーカスを移さなくても動作しますよね?
これをコード上で実現するにはどうすればよいのでしょうか?
フォーカスを移すのであれば、各ビューのWM_MOUSEMOVEのメッセージハンドラで、
this->SetFocus();
とすればできると思うのですが、フォーカスを移さずに動作させる方法がわかりません。
どなたか知っていたら教えて頂けますでしょうか?
宜しくお願いします。
次のようにすれば出来るのではないでしょうか?
1) メインウィンドウのPreTranslateMessage()でWM_MOUSEWHEELを横取りし、
2) マウスポインタ位置のウィンドウを求め、
3) そのウィンドウにWM_MOUSEWHEELを横流しする。
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);
}