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首先要设置滚动条新的位置,然后使用SetScrollInfo来生效,
2因为设置信息可能超出的有意义的值,所以有必要使用GetScrollInfo重新得到滚动的.
3.如果新的位置和旧位置不同,那么就需要调用ScrollWindow进行滚动.
4.因为ScrollWindow只是将窗体的视图向上移动指定的距离,而移进来的那部分没有字体显示,因此需要使用UpdateWindows重绘文本.