隨鈊乄鎍慾 发表于 2014-11-12 12:02:17

关于滚动条和ScrollWindow函数一些问题,求指点!

本帖最后由 隨鈊乄鎍慾 于 2014-11-12 12:37 编辑

看了鱼油“计机羊咩咩”发的一个贴子如下:我也存在这一块的问题没有吃透请牛人点评一下他这样理解对吗?!如果对,我就可以照他的思路去理解。(兰色字体部分)
    咩咩原文件如下:
      SCROLLINFO结构体存放着滑动条的一切信息

ScrollWindow会根据参数 “滑动” (bitbit) 当前客户区的数据,超出客户区的数据将不保留
滑动后客户区将出现无效区域,系统会自动获取并发送WM_PAINT消息
无效区域的大小及位置数据将会记录在PAINTSTRUCT中的rePaint结构里


无论上移还是下移,客户区的基点仍为(0,0),系统通过控制top和buttom两个参数实现对无效区域的定位
SetScrollInfo(hwnd,SB_VERT,&vScroll,TRUE);
GetScrollInfo(hwnd,SB_VERT,&vScroll);
if(iScrollPos != vScroll.nPos)
{
ScrollWindow(hwnd,0,cyChar * (iScrollPos - vScroll.nPos),NULL,NULL);
UpdateWindow(hwnd);
} 在改变滑动条位置之后,先存入SCROLLINFO(vScroll)数据再重新读取
此时在系统内部会计算当前滑动条的位置是否超出nMin和nMax,若超出范围则小小取大(nMin),大大取小(nMax)
否则保持滑动条当前位置

PaintBeg = max(0,vScroll.nPos + ps.rcPaint.top / cyChar);
PaintEnd = min(LineMath,vScroll.nPos + ps.rcPaint.bottom / cyChar);
for(;PaintBeg <= PaintEnd;PaintBeg++)
{
y = cyChar * (PaintBeg - vScroll.nPos);
StringCchLength(arr,3,&CchLength);
TextOut(hdc,0,y,arr,CchLength);
}
因为UpdateWindow后系统会立即发出一条不进队列的WM_PAINT消息
故改变滑动条位置后必须先保存当前SCROLLINFO数据
在重绘客户区时 ps.rcPaint.top / cyChar 计算出 ”滚动前“ 在客户区最后一行的数据位置//这一句这样理解对不对?
因此加上当前滑动块位置(vScroll.nPos)便可计算出将要读取的数据的位置(此位置是数据在缓冲区内的位置)
而 PaintBeg - vScroll.nPos可计算出数据在客户区重绘的位置(第n行)


当中还有各种细节不暇细说留给读者慢慢体会
若说的不好请指出 谢谢

隨鈊乄鎍慾 发表于 2014-11-12 18:42:50

莫非要自问自答!?

小甲鱼 发表于 2014-11-13 21:56:28

这么理解是正确的。

计机羊咩咩 发表于 2014-11-14 11:27:42

:titter:我能惭愧的回复一句,现在我看回去意识也没看懂么?   一直在准备蓝桥杯的事Windows设计都放下一个多月了

隨鈊乄鎍慾 发表于 2014-11-14 12:46:20

计机羊咩咩 发表于 2014-11-14 11:27
我能惭愧的回复一句,现在我看回去意识也没看懂么?   一直在准备蓝桥杯的事Windows设计都放下一个 ...

感谢分享!..............:big

ko12 发表于 2014-11-16 23:34:26

感谢楼主分享

lver 发表于 2015-2-20 10:28:27

{:1_1:}

d5zhao 发表于 2015-4-17 02:03:22

顶lz!!!

freeparty 发表于 2015-4-17 22:41:54

相信小甲鱼的视频已经讲的很清晰明了的,实在不行就先跳过

d5zhao 发表于 2015-4-18 09:52:57

支持lz

zd0307 发表于 2015-4-19 01:05:36


支持lz

zd0307 发表于 2015-4-19 03:01:38

支持lz

d5zhao 发表于 2015-4-19 05:38:25

支持lz

laishiba 发表于 2015-4-27 21:40:20

支持

angel2015 发表于 2015-4-28 07:36:33

laishiba 发表于 2015-4-28 08:18:54

学习

k2012 发表于 2015-4-28 14:54:50

我只是路过打酱油的。

myqicq 发表于 2015-4-28 15:01:37

感恩无私的分享与奉献 :)
页: [1]
查看完整版本: 关于滚动条和ScrollWindow函数一些问题,求指点!