CScrollView의 윈도우의 ScrollBar는 윈도 개발 초기에 SHORT형 자료형을 기반으로 개발되었기 때문에 scrollbar의 thumb을 잡고 이동할때 32767을 넘는 순간 오동작을 하게 된다.

이 경우 아래와 같이 WM_HSCROLL과 WM_VSCROLL을 핸들링해서 아래 코드를 집어 넣으면 간단히 해결된다.


void CDemoView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	SCROLLINFO si = { 0, }; 
    si.cbSize = sizeof(SCROLLINFO); 
    si.fMask = SIF_ALL; 
    GetScrollInfo(SB_HORZ, &si); 
    nPos = si.nTrackPos; 

	CScrollView::OnHScroll(nSBCode, nPos, pScrollBar);
}

void CDemoView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	SCROLLINFO si = { 0, }; 
    si.cbSize = sizeof(SCROLLINFO); 
    si.fMask = SIF_ALL; 
    GetScrollInfo(SB_VERT, &si); 
    nPos = si.nTrackPos; 

	CScrollView::OnVScroll(nSBCode, nPos, pScrollBar);
}


위 방법은 CScrollview를 사용할 때의 이야기고, CScrollBarCtrl 클래스르 직접 사용하거나

혹은, CScrollView가 아닌 다른 View에서 문제를 봉착하였을 경우 GetScrollInfo()함수를 이용하여 적당히 처리하면 해결할 수 있다.

+ Recent posts