我在对话框中加如了滚动条后,比如在OnPaint()中,
dc.MoveTo(100,100);
dc.LineTo(1000,1000);
首先是只画出了一部分,但是按了滚动条后,画的乱七八糟的,是不是在OnVScroll()中还要加什么处理代码?
dc.MoveTo(100,100);
dc.LineTo(1000,1000);
首先是只画出了一部分,但是按了滚动条后,画的乱七八糟的,是不是在OnVScroll()中还要加什么处理代码?
UpdateWIndow()的,只需要ScrollWindow(x滚动量,y滚动量)就可以了。你画了一个表格,我估计你只想滚动一部分。应该这样:
ScrollWindow(0, dY, NULL ,rect);
第三个参数必须是NULL。
void CMyTabDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
int h = 20;
SCROLLINFO si;
si.cbSize = sizeof(SCROLLINFO);
si.fMask = SIF_ALL;
GetScrollInfo(SB_VERT,&si);
int nOldPos = si.nPos;
switch(nSBCode)
{
case SB_LINEDOWN:
si.nPos = min(si.nPos+h,si.nMax);
break;
case SB_PAGEDOWN:
si.nPos = min(si.nPos+h*10,si.nMax);
break;
case SB_LINEUP:
si.nPos = max(si.nPos-h,si.nMin);
break;
case SB_PAGEUP:
si.nPos = max(si.nPos-h*10,si.nMin);
break;
case SB_THUMBPOSITION:
case SB_THUMBTRACK:
si.nPos = si.nTrackPos;
break;
case SB_TOP:
si.nPos = si.nMin;
break;
case SB_BOTTOM:
si.nPos = si.nMax;
break;
}
SetScrollInfo(SB_VERT,&si);
GetScrollInfo(SB_VERT,&si);
ScrollWindow(0,nOldPos-si.nPos);
}
至于UpdateWindow不起作用的问题,我也遇到了。我现在没有办法,用ShowWindow( SW_HIDE );ShowWindow( SW_SHOW )代替了。
ShowWindow( SW_HIDE );//隐藏窗口
ShowWindow( SW_SHOW );//显示窗口,这样可以强制窗口重新绘制