BngThea 发表于 2017-7-15 21:06:19

《Windows SDK》014 滚动条3

本帖最后由 BngThea 于 2017-7-17 09:08 编辑

一 核心知识点
* 使用新的API函数来设置和获取滚动条信息
SetScrollInfo = SetScrollRange + SetScrollPos
GetScrollInfo = GetScrollRange + GetScrollPos
新的API函数利用一个结构存放滚动条的信息,使其具有良好的向上和向下的兼容性

* 滚动条信息结构
SCROLLINFO结构是一个典型的Windows开发中的结构,一般用第一个参数存放该结构的大小,然后是该结构涉及的成员列表。

* 将SCROLLINFO结构同Set和Get函数配合使用来灵活处理滚动条的格式


* 滚动条的处理的高效方式
ScrollWindow函数只滚动已显示的内容,未覆盖的地方置为无效,如此一来,只需要在WM_PAINT消息中处理失效区域即可

二 新API函数 和 结构
* SetScrollInfo(hwnd, SB_HORZ, &si, TRUE)
该函数用来设置滚动条的属性,包括位置、范围等

第一个参数:当前窗口句柄
第二个参数:滚动条形态,水平为SB_HORZ,垂直为SB_VERT
第三个参数:滚动条消息结构,存放滚动条所有相关信息
第四个参数:滚动条是否被重绘,True为是,FALSE为否

该函数的返回值为滚动按钮的当前位置


* SetScrollInfo(hwnd, SB_HORZ, &si)
该函数用来设置滚动条的属性,包括位置、范围等

第一个参数:当前窗口句柄
第二个参数:滚动条形态,水平为SB_HORZ,垂直为SB_VERT
第三个参数:滚动条消息结构,存放滚动条所有相关信息

函数需要进行必要的前期工作:完成SCROLLINFO结构中的第一个参数和第二个参数设定

* ScrollWindow(hwnd, 0, iyAmount, NULL, NULL)
该函数用来仅滚动制定窗口的客户区内容

第一个参数:当前窗口句柄
第二三个参数:指定滚动水平和垂直的数值
第四五个参数:均为RECT结构指针,指定要滚动的客户区范围或裁剪区域

未被该函数覆盖的区域不动,该函数只是操作选定的区域,当应用执行WM_PAINT消息时将选定区域和原未操作区域组合一起重绘,所以一般在该函数后面跟上UpdateWindow函数

当向左或向上滚动窗口时,第二三个参数的值应为负数


* SCROLLINFO{UINT cbSize; UINT fMask; int nMin; int nMax; UINT nPage; int nPos; int nTrackPos;}
该结构存放滚动条的所有参数

第一个参数:该结构大小
第二个参数:滚动条信息的格式,由特定的宏组合,可以得到不同的设置
第三四个参数:滚动条范围的极值,此时第二个参数应包含SIF_RANGE
第五个参数:页面大小,此时第二个参数应包含SIF_PAGE
第六个参数:滑块位置, 此时第二个参数应包含SIF_POS
第七个参数:当前滑块位置,此时第二个参数应包含SIF_TRACKPOS



页: [1]
查看完整版本: 《Windows SDK》014 滚动条3