フォーカスを移さずにホイールを機能させるには? – プログラミング – Home

フォーカスを移さずにホイールを機能させ...
 
通知
すべてクリア

[解決済] フォーカスを移さずにホイールを機能させるには?


tokuchan
 tokuchan
(@tokuchan)
ゲスト
結合: 23年前
投稿: 10
Topic starter  

環境:Win2000 VC++6.0 MFC

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

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

this->SetFocus();

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

宜しくお願いします。


引用未解決
トピックタグ
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

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


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

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);
}


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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