我在对话框上设置了一个滚动条控件,对他设置了一个消息处理函数,但没有办法直接用cscrollbar::onhscroll(),怎么写才能实现滚动条的拖动那?
void CTest2Dlg::OnHScroll( UINT nSBCode, UINT nPos, CScrollBar* pScrollBar )
{
m_scroll.OnHScroll( nSBCode, nPos, pScrollBar );//不能用
}
void CTest2Dlg::OnHScroll( UINT nSBCode, UINT nPos, CScrollBar* pScrollBar )
{
m_scroll.OnHScroll( nSBCode, nPos, pScrollBar );//不能用
}
{
// TODO: Add your message handler code here and/or call default
CDialog::SetScrollRange(SB_VERT,0,330,true);
CDialog::GetScrollRange(SB_VERT,&minpos, &maxpos);
//maxpos = CDialog::GetScrollLimit(SB_VERT);
static int curpos = CDialog::GetScrollPos(SB_VERT);
//curaddlian=&curpos;
SCROLLINFO info;
switch (nSBCode)
{
case SB_TOP: // Scroll to far left. //curpos = minpos;
CDialog::ScrollWindowEx(0,nPos-curpos,NULL,NULL,NULL,NULL,SW_SCROLLCHILDREN);
CDialog::UpdateWindow();
CDialog::SetScrollPos(SB_VERT,curpos,true);
break; case SB_BOTTOM: // Scroll to far right.
curpos = maxpos;
CDialog::ScrollWindowEx(0,nPos-curpos,NULL,NULL,NULL,NULL,SW_SCROLLCHILDREN);
CDialog::UpdateWindow();
CDialog::SetScrollPos(SB_VERT,curpos,true);
break; case SB_ENDSCROLL: // End scroll.
break; case SB_LINEUP: // Scroll left.
if (curpos > minpos)
{
curpos-=10;
CDialog::ScrollWindowEx(0,nPos-curpos,NULL,NULL,NULL,NULL,SW_SCROLLCHILDREN);
CDialog::UpdateWindow();
CDialog::SetScrollPos(SB_VERT,curpos,true);
}
break; case SB_LINEDOWN: // Scroll right.
//if(maxpos==101){AfxMessageBox(_T("i am here"));}
if (curpos < maxpos)
{
curpos+=10;
//AfxMessageBox(_T("ok here"));
CDialog::ScrollWindowEx(0,nPos-curpos,NULL,NULL,NULL,NULL,SW_SCROLLCHILDREN);
CDialog::UpdateWindow();
CDialog::SetScrollPos(SB_VERT,curpos,true);
}
//AfxMessageBox(_T("linedown"));
break; case SB_PAGEUP: // Scroll one page left.
// Get the page size.
//pScrollBar->GetScrollInfo(&info, SIF_ALL);
CDialog::GetScrollInfo(SB_VERT,&info, SIF_ALL);
if (curpos > minpos)
{
//curpos = max(minpos, curpos - (int) info.nPage);
curpos = max(minpos, curpos - 10);
CDialog::ScrollWindowEx(0,10,NULL,NULL,NULL,NULL,SW_SCROLLCHILDREN);
CDialog::UpdateWindow();
CDialog::SetScrollPos(SB_VERT,curpos,true);
}
break; case SB_PAGEDOWN: // Scroll one page right.
//pScrollBar->GetScrollInfo(&info, SIF_ALL);
CDialog::GetScrollInfo(SB_VERT,&info, SIF_ALL);
if (curpos < maxpos)
{
curpos = min(maxpos, curpos + (int) info.nPage);
curpos = min(maxpos, curpos + 10);
CDialog::ScrollWindowEx(0,-10,NULL,NULL,NULL,NULL,SW_SCROLLCHILDREN);
CDialog::UpdateWindow();
CDialog::SetScrollPos(SB_VERT,curpos,true);
}
break; case SB_THUMBPOSITION: // Scroll to absolute position. nPos is the position
postmp1=nPos;
if(curpos<postmp1)
{ curpos = nPos; // of the scroll box at the end of the drag
// operation.
CDialog::ScrollWindowEx(0,-10,NULL,NULL,NULL,NULL,SW_SCROLLCHILDREN);
CDialog::UpdateWindow();
CDialog::SetScrollPos(SB_VERT,curpos,true);
}
if(curpos>postmp1)
{ curpos = nPos; // of the scroll box at the end of the drag
// operation.
CDialog::ScrollWindowEx(0,10,NULL,NULL,NULL,NULL,SW_SCROLLCHILDREN);
CDialog::UpdateWindow();
CDialog::SetScrollPos(SB_VERT,curpos,true);
}
break; case SB_THUMBTRACK: // Drag scroll box to specified position. nPos is
int postmp2=curpos;
curpos = nPos; // position that the scroll box has been dragged
// to.
CDialog::ScrollWindowEx(0,postmp2-curpos,NULL,NULL,NULL,NULL,SW_SCROLLCHILDREN);
CDialog::UpdateWindow();
CDialog::SetScrollPos(SB_VERT,curpos,true);
break;
}
UpdateData(FALSE);
Invalidate();
CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}
虽然我还没有彻底明白这些代码的用处,但它真的能用。
或许有些是多余的,但总比什么都没有强。