Programming Tips #7 スクロールバーのつまみの盲点
SB_THUMBTRACK と SB_THUMBPOSITION 通知の位置情報は誤り
スクロールバーのつまみがドラッグされるとイベントが発生しますが、そのとき wParam 引数の位置情報を信じるとえらい目にあいます。
1メガ級のバイナリファイルを表示してて、スクロールバーをドラッグしてみて気が付きました。
そうです、引数の位置情報は16ビットしかないので正確なスクロール位置を表現できないのです。
したがってつまみドラッグイベントの場合は、GetScrollInfo() 関数で高精度のつまみ位置情報を取得する必要があります。
LRESULT View :: OnVsbThumbPosition() { SCROLLINFO scr; scr.cbSize = sizeof scr; scr.fMask = SIF_TRACKPOS; GetScrollInfo( hwnd, SB_VERT, & scr ); Scroll( SB_VERT, scr.nTrackPos ); return 0; }
以上。