Windows Scroll Note

理解关键一

iPaintBeg=max(0,iVertPos+ps.rcPaint.top/cyChar);

iPaintEnd=min(iVertPos+ps.rcPaint.bottom/cyChar,LINENUMBERS-1);

iVertPos是当前滚动条位置,那么开始绘制的地方就应该是滚动条所在的位置,对应到要显示的整个区域的位置也是这个iVertPos,后面的top可以去掉,因为显示区top等于0。绘制结束的地方应该是iVertPos加上绘制区的高度。这些都需要在显示屏后面的整个显示范围上看,以绘制区为尺度。

理解关键二

x=cxChar*(1-iHorzPos);

y=cyChar*(i-iVertPos);

先看y,比如i=iPaintBeg事,即i=iVertPos,此时对应绘制区0的位置,随着循环递加,逐行绘制。x的值令人比较迷惑,这是由于两个原因的干扰,一个是横向拉动的话还是原来那几行文字,和纵向是不一样的,如果把他们认为是相同的就很难理解了。另一个原因是函数ScrollWindow造成的,作者没有详细介绍这个函数,他的实现肯定决定了这个值的取法。关于1,是自己定义的,保证了文字不太靠近边缘。

posted on 2013-05-30 10:05  奔跑吧,蜗牛!  阅读(207)  评论(0编辑  收藏  举报

导航