ホイールマウスの制御について – プログラミング – Home

ホイールマウスの制御について
 
通知
すべてクリア

[解決済] ホイールマウスの制御について


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

こんにちわ。いつも参考にさせていただいています。

開発環境はC++6.0 OS:XP。
SDIのスクロールビューでプログラムを作成しています。
初期設定で、鉛直スクロールバーが動くようになってい
ます。
それをキャンセルし、ある関数を実行させたいのですが
方法が簡単なようでいてわかりません。

文献・MSDNを調べてもわかりませんでした。
よろしくお願いします。


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

>鉛直スクロールバー
てなんでしょうか?

>それをキャンセルし、ある関数を実行させたいのですが
何を実行したいのでしょうか

MFCでよろしいのでしょうか

物事ははっきり書きましょう
誰も答えられません


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

WM_MOUSEWHEELを調べましょう。


返信引用
kazuma
 kazuma
(@kazuma)
ゲスト
結合: 24年前
投稿: 217
 

> SDIのスクロールビューでプログラムを作成しています。
> 初期設定で、鉛直スクロールバーが動くようになっています。
> それをキャンセルし、ある関数を実行させたいのですが

「ユーザーがホイールを操作したときに」ですよね?

OnMouseWheel(WM_MOUSEWHEELのハンドラ)を追加して、
CScrollView::OnMouseWheelを呼ぶ代わりに、
独自の処理をすればいいです。


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

すいません、説明不足でした。。。
MFCです。
>> 鉛直スクロールバー
> てなんでしょうか?
スクロールビューで自動的に作成される垂直スクロールバーです。

> OnMouseWheel(WM_MOUSEWHEELのハンドラ)を追加して、
> CScrollView::OnMouseWheelを呼ぶ代わりに、
> 独自の処理をすればいいです。

実際には、OnMouseWheelを追加してCScrollView::OnMouseWheel()内で処理を行っ
ています。OnMouseWheel()内で独自の処理をおこなおうとした場合、独自の処理
は行ってくれますが、同時に自動的に垂直スクロールバーもスクロールしてしまい
ます。

↓MSDNより
 CScrollView クラス
 キーボード、非スクロール マウス、または IntelliMouse ホイールからのメッ
 セージに応答して自動的にスクロールします。

この、自動的にスクロールしてしまう処理をどうにかしてキャンセルしたいのです
が、どうにもならずほとほとこまっています。

スクロールバーを作り直すしか方法はないのでしょうか?(相当な手間になるので
極力さけたい)

BOOL C*View::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
On
**();//←独自の処理を実行しています。
return CScrollView::OnMouseWheel(nFlags, zDelta, pt);
}

アドバイスよろしくおねがいします。


返信引用
kazuma
 kazuma
(@kazuma)
ゲスト
結合: 24年前
投稿: 217
 

> On*****();//←独自の処理を実行しています。
> return CScrollView::OnMouseWheel(nFlags, zDelta, pt);

CScrollView::OnMouseWheelを呼ばなければいいのでは?


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

マウスホイール時に、自作関数の処理のみを実行し、スクロールはしないということで
よろしいですね?

> On*****();//←独自の処理を実行しています。
> return CScrollView::OnMouseWheel(nFlags, zDelta, pt);

上記の2行目の
return CScrollView::OnMouseWheel(nFlags, zDelta, pt);
を、
return FALSE;
に変更すれば出来ると思います。


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

返事おくれてすいませんでした。
chiloliさんのおっしゃる通り、
BOOL C*View::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
On
**();//←独自の処理を実行しています。
return FALSE;
}
でうまくいくことができました。
ありがとうございます。
またよろしくおねがいします。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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