0

CScrollBarWindows7用のMFCC++アプリケーションでを使用しようとしています。

私はすべてのメッセージを問題なく受信し、次のようなハンドラーを持っています。

void Dialog::OnHScroll(UINT nSBCode, UINT apos, CScrollBar* pScrollBar)
{    
    SCROLLINFO si;
    si.cbSize = sizeof( si );
    si.fMask = SIF_TRACKPOS;
    m_slider.GetScrollInfo(&si,SIF_TRACKPOS|SIF_POS|SIF_PAGE);
    int nTrackPos = si.nTrackPos; //0 except on TB_THUMBTRACK
    int nPos = si.nPos; //0 except on TB_THUMBTRACK
    UINT nPage = si.nPage; //seems correct always but I dont need it

を使用して位置を抽出しようとする理由GetScrollInfoは、16ビット変数内に収まるものよりも大きい可能性があるため、渡されたposを引数として使用できないためです。

ただし、私の問題は、バーをドラッグして、ドラッグ操作TB_THUMBTRACKの終了だけでなく、を受け取ったときにのみ有効な位置を取得することですTB_ENDTRACK。スクロールバーをクリックするか、両端の矢印を使用すると、すべての位置(引数の位置、およびSCROLLINFOページを除く構造体のすべて)が0になります。

すべてのメッセージの正しい位置を取得する方法を知っている人はいますか?すなわちTB_LINEUP, TB_LINEDOWNなど。

4

1 に答える 1

1

MSDN に示されている WM_HSCROLL イベント ハンドラーのサンプル コードを見てください。

MSDN ドキュメント

于 2013-03-12T07:53:57.323 に答える