スクロールサム(スクロールバーの「つまみ」)をドラッグするとその度に 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);
}
}
参照