エディタで,マウスホイールを一回動かした時の移動行数を知りたいの
ですが...
色々なエディタで試したのですが,大体3行が多く,
たまに1行や,2行があります.
正確な値をしるにはどうすればいいのでしょうか?
OnMouseWheel() のヘルプにある,WHEEL_DELTA は,
移動する回転距離をしめしているとありますが,
120という値はピクセル値を示しているとはおもえません.
(行高さが120の倍数のピクセル値とは限らないので).
一回のマウススクロールでの移動量をピクセル値で得る方法,もしくは
行数で取得する方法はあるでしょうか?
よろしくお願いします.
各アプリケーション依存だと思いますが・・・
でWM_MOUSEWHIEELの120は、マイクロソフト製のアレの引っかかりっていうか、
手ごたえがあるやつの一回分が120だと思います。
マウスのドライバが勝手にスクロールバーとかエミュレートしてるような気もしますけど、
どうなんでしょ。
プログラム側でWM_MOUSEWHIEELを捕まえる場合、
WHEEL_DELTAは、PAIさんが書いておられるようにワンノッチ分だと思えば良いと思います。
すばやくまわした場合は、WHEEL_DELTA以上の値がくることがあるのでWHEEL_DELTAで割る
ことで何ノッチ分を一気に動かしたのかわかるようになっていたと思います。
従ってピクセルとか行数とかとは全く関係ありません。
どれだけ回転したのかを示す独立した単位だと考えるべきです。
ワンノッチをエディタ上の何行に対応させるのはアプリケーション依存であって
公式な定義はないと思います。ワンノッチ一行だとすばやくスクロールしたい時に
たくさん動かさないといけないので面倒と言うだけのことです。
この辺は、作成時の決め事とかユーザーからの指摘とかいろんな要素から
決まるような気がします。
一回ホイールをまわす(ワンノッチ分?)時の行数は,以下の
関数で取得できるという情報を得ました.
UINT nSysLines;
SystemParametersInfo( SPI_GETWHEELSCROLLLINES, 0, &nSysLines,0);
ただ,OSの設定とかで
これの値をユーザーが独自に決めることはできるのでしょうか?
テストをする際,この値が変った場合のテストをおこないたいのですが...
>SystemParametersInfo( SPI_GETWHEELSCROLLLINES, 0, &nSysLines,0);
>これの値をユーザーが独自に決めることはできるのでしょうか?
SystemParametersInfo()に「SPI_SETWHEELSCROLLLINES」を与えれば、お好きな値に設定
できるでしょう。第4引数に与える値次第でプロファイルを書き換えるかどうか、なども
指定できます。
当方Win2000 IntelliMouse Explorer3.0 ですが、
マウスのプロパティ→ホイール→詳細設定
で、スクロールする行数を変えることができました。
更に、PSIでメッセージを簡単に調べた感じだと、
WM_MOUSEWHEELのzDeltaは相変わらず120のままで、
ホイールに対応していないアプリケーションでは設定した回数分だけ
WM_VSCROLL が SB_LINEUP か SB_LINEDOWN で繰り返されるみたいです。
s/PSI/SPY
PSIってなんじゃい、Ψかい。