case WM_VSCROLL:
                  .
                  .
                  .
if(si.nPos!=iVertPos)
{
ScrollWindow(hWnd,0,cyChar*(iVertPos-si.nPos),NULL,NULL);
UpdateWindow(hWnd); 
}
return 0;

case WM_PAINT:
.
                .
                .
iPaintBeg=max(0,iVertPos+ps.rcPaint.top/cyChar);//???????????????
iPaintEnd=min(NUMLINES-1,iVertPos+ps.rcPaint.bottom/cyChar); for(i=iPaintBeg;i<=iPaintEnd;i++)       
{
x=cxChar*(1-iHorzPos);
y=cyChar*(i-iVertPos);       

能不能帮忙解释一下iPaintBeg和iPaintEnd里面内容的意义和作用,比如ps.rcPaint.top/cyChar是什么,实在是搞不清楚.其实现在对ScrollWindow和Paint如何进行合作重画客户区还搞不清楚,谢谢!

解决方案 »

  1.   

    iPaintBeg和iPaintEnd是y坐标上对应于窗体可见部分的开始位置和结束位置.
    1首先要设置滚动条新的位置,然后使用SetScrollInfo来生效,
    2因为设置信息可能超出的有意义的值,所以有必要使用GetScrollInfo重新得到滚动的.
    3.如果新的位置和旧位置不同,那么就需要调用ScrollWindow进行滚动.
    4.因为ScrollWindow只是将窗体的视图向上移动指定的距离,而移进来的那部分没有字体显示,因此需要使用UpdateWindows重绘文本.