Last Updated 2004/11/02
Programming Tips Visual C++ MFC 他のコントロール  索 引 
スクロールサムの動作
2004/11/02

スクロールサム(スクロールバーの「つまみ」)をドラッグするとその度に SB_THUMBTRACK が発行される.
CScrollView は SB_THUMBTRACK が届く度に再描画を行う.
これをサムを放した時に再描画させてみる.

class CMyView : public CScrollView {
protected:
    //{{AFX_MSG(CMyView)
    afx_msg void OnHScroll(UINT, UINT, CScrollBar*);
    afx_msg void OnVScroll(UINT, UINT, CScrollBar*);
    //}}AFX_MSG
};

BEGIN_MESSAGE_MAP(CMyView, CScrollView)
    //{{AFX_MSG_MAP(CMyView)
    ON_WM_HSCROLL()
    ON_WM_VSCROLL()
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()




// SB_THUMBTRACK は無視
// SB_THUMBPOSITION は SB_THUMBTRACK にすり替え
static BOOL ignoreThunbTrack(UINT& code)
{
    if( code == SB_THUMBTRACK ) {
        return FALSE;
    }
    if( code == SB_THUMBPOSITION ) {
        code = SB_THUMBTRACK;
    }
    return TRUE;
}

void CMyView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
    if( ignoreThumbTrack(nSBCode) ) {
        CScrollView::OnHScroll(nSBCode, nPos, pScrollBar);
    }
}

void CMyView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
    if( ignoreThumbTrack(nSBCode) ) {
        CScrollView::OnVscroll(nSBCode, nPos, pScrollBar);
    }
}


参照
前後のTips
スクロールサムの動作

DSS ProgrammingTipsCGI Ver2.02