OS 2000SP4 VC++6.0/MFCです。
SDIでバイナリビューアを作成しています。
アドレスを常に表示したいので、スクロールした際に現在のスクロールの位置をとりたいのです
が、マウスホイールでスクロールした際に前回のスクロールの位置しかとれません。
コードは以下のように記述しています。
// マウスホイール回転時
BOOL CBinaryViewerView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
m_ptHeader = GetDeviceScrollPosition();
Invalidate(TRUE);
return CScrollView::OnMouseWheel(nFlags, zDelta, pt);
}
あとスクロールボックスをクリックしたままスライドさせてスクロールした際に、スクロールを
1行毎に行ないたいのですが、どのようにしたらいいのでしょうか?
1行の高さは18ピクセルです。
以上,2点よろしくお願いします。
OnMouseWheelではOnVScrollに引き渡すだけにすればいいのでは?
BOOL CBinaryViewerView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
this->OnVScroll((zDelta >= 0) ? SB_LINEUP : SB_LINEDOWN,
0, this->GetScrollBarCtrl(SB_VERT));
return CView::OnMouseWheel(nFlags, zDelta, pt);
}
でもって、どれぐらいスクロールさせるかはOnVScrollでnSBCodeで切り分けて処理させ
る。
すみません、CScrollViewが既定クラスだったのですね。
CViewだと思って解答してしまいました。
ということで、私の発言は間違っているかもしれないです。
回答ありがとうございます。
記述していただいたものでうまくいってました。
私が記述したものなんですが、スクロール移動前に位置を取得してるので前回のものしか取れな
いはずですね。
凡ミスでした・・・。
どれくらいスクロールさせるかというのがまだうまくいかないです。
うーん・・・。
現在のコードです。
void CBinaryViewerView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar*
pScrollBar)
{
CScrollView::OnVScroll(nSBCode, nPos, pScrollBar);
m_ptHeader = GetScrollPosition();
Invalidate(TRUE);
}
スクロールボックスをドラッグした場合1ピクセルごとに移動し、位置も取れています。
1行(18ピクセルごとに)移動するにはどうしたらよいでしょうか?
nSBCodeやnPosいじってみましたがうまくいきませんでした。