MFC Scrolling

For whatever reason, the MFC CScrollView's OnScroll handler only passes 16 bits for the nPos parameter. This is a problem on NT where you might have a larger scroll range defined. Luckily, the fix is easy.

  class CBigScrollView : public CScrollView
    {
public:
    BOOL OnScroll(UINT nScrollCode, UINT nPos, BOOL bDoScroll = TRUE);
    }

BOOL CBigScrollView::OnScroll(UINT nScrollCode, UINT nPos, BOOL bDoScroll)
{
// this just does vertical
    if (nScrollCode/256==SB_THUMBTRACK|| (nScrollCode & 0xFF)==SB_THUMBTRACK)
        {
                SCROLLINFO sinfo;
                sinfo.cbSize=sizeof(sinfo);
                sinfo.fMask=SIF_TRACKPOS;
                ::GetScrollInfo(m_hWnd,SB_VERT,&sinfo);  
                nPos=sinfo.nTrackPos;
        }
        return CScrollView::OnScroll(nScrollCode, nPos, bDoScroll);
}