こんにちわ。いつも参考にさせていただいています。
開発環境はC++6.0 OS:XP。
SDIのスクロールビューでプログラムを作成しています。
初期設定で、鉛直スクロールバーが動くようになってい
ます。
それをキャンセルし、ある関数を実行させたいのですが
方法が簡単なようでいてわかりません。
文献・MSDNを調べてもわかりませんでした。
よろしくお願いします。
>鉛直スクロールバー
てなんでしょうか?
>それをキャンセルし、ある関数を実行させたいのですが
何を実行したいのでしょうか
MFCでよろしいのでしょうか
物事ははっきり書きましょう
誰も答えられません
WM_MOUSEWHEELを調べましょう。
> SDIのスクロールビューでプログラムを作成しています。
> 初期設定で、鉛直スクロールバーが動くようになっています。
> それをキャンセルし、ある関数を実行させたいのですが
「ユーザーがホイールを操作したときに」ですよね?
OnMouseWheel(WM_MOUSEWHEELのハンドラ)を追加して、
CScrollView::OnMouseWheelを呼ぶ代わりに、
独自の処理をすればいいです。
すいません、説明不足でした。。。
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);
}
アドバイスよろしくおねがいします。
> On*****();//←独自の処理を実行しています。
> return CScrollView::OnMouseWheel(nFlags, zDelta, pt);
CScrollView::OnMouseWheelを呼ばなければいいのでは?
マウスホイール時に、自作関数の処理のみを実行し、スクロールはしないということで
よろしいですね?
> On*****();//←独自の処理を実行しています。
> return CScrollView::OnMouseWheel(nFlags, zDelta, pt);
上記の2行目の
return CScrollView::OnMouseWheel(nFlags, zDelta, pt);
を、
return FALSE;
に変更すれば出来ると思います。
返事おくれてすいませんでした。
chiloliさんのおっしゃる通り、
BOOL C*View::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
On**();//←独自の処理を実行しています。
return FALSE;
}
でうまくいくことができました。
ありがとうございます。
またよろしくおねがいします。