SetScrollInfo()与GetScrollInfo()使用

Windows 2014年07月26日 ,

进行Windows编程中使用SetScrollInfo()与GetScrollInfo()函数时,不是设置不对正确的参数,就是得不到正确的参数,都是由于对其工作方式不了解造成的。特别是对于SCROLLINFO结构中各参数的理解更是有问题,经过网上资料的查询,总结如下。

滚动条设置

滚动条设置有两方法,一种是使用SetScrollRange()、 SetScrollPos()、GetScrollRange()、GetScrollPos()等方法;另一种方法是使用SetScrollInfo()与GetScrollInfo()结合SCROLLINFO结构进行设置。第一种方法从Windows 2000开始支持,比较老,不能设置滚动条的大小等参数。第二种方法增加滚动条大小设置,并将滚动位置的处理交给Windows进行处理,比较方便。所以还是推荐使用第二种方式进行设置。http://furzoom.com/setscrollinfo-getscrollinfo/

SetScrollInfo()与GetScrollInfo()使用

SetScrollInfo()GetScrollInfo()的函数原型不再说明,可以参数MSDN。

SCROLLINFO结构

在使用SetScrollInfo()与GetScrollInfo()之前需要设置SCROLLINFO结构变量(如,si),SCROLLINFO结构定义如下,

typedef struct tagSCROLLINFO
{
 UINT cbSize;
 UINT fMask;
 int nMin;
 int nMax;
 UINT nPage;
 int nPos;
 int nTrackPos;
} SCROLLINFO, FAR *LPSCROLLINFO;

参数含义如下:

  • cbSize为该结构变量的大小,这样设计可以使在以后的扩展时更加方便且能兼容以前版本。
  • fMask的值影响SetScrollInfo()与GetScrollInfo()函数调用时影响的SCROLLINFO结构的具体变量值。取值如下,
    • SIF_RANGE——nMin和nMax将为滚动条的范围的最小值和最大值;
    • SIF_PAGE——nPage将为滚动条大小的值;
    • SIF_POS——nPos将为滚动条位置的值;
    • SIF_DISABLENOSCROLL——只在SetScrollInfo()使用,当设置的值使用滚动条无效时,使滚动条无效,而不是移除滚动条;
    • SIF_TRACKPOS——当拖动滚动条时,nTrackPos将为滚动条当前位置的值;
    • SIF_ALL——SIF_RANGE | SIF_PAGE | SIF_POS | SIF_TRACKPOS。
  • nMin为滚动范围最小值。
  • nMax为滚动范围的最大值。
  • nPage为滚动条的大小。
  • nPos为滚动条的位置。
  • nTrackPos为拖动滚动条时,滚动条的位置。

SCROLLINFO结构变量设置

无论是调用SetScrollInfo(),还是GetScrollInfo()调用,都需要在先设置si中的cbSize和fMask。例如窗口大小改变时,需要改变滚动条滚动块的大小,同时如果窗口大小能放下所有内容将滚动条设置为不可用:

SCROLLINFO si;
si.cbSize = sizeof(si);
si.fMask = SIF_PAGE | SIF_DISABLENOSCROLL;
si.nPage = cyContent/cyClient;    // cyContent为窗口内容高度,cyClient窗口高度
SetScrollInfo(hwnd, SB_VERT, &si, TRUE);

更多参考请参考MSDN。

如无特别说明,本站文章皆为原创,若要转载,务必请注明以下原文信息:
日志标题:《SetScrollInfo()与GetScrollInfo()使用》
日志链接:http://furzoom.com/setscrollinfo-getscrollinfo/
博客名称:枫竹梦

【上一篇】
【下一篇】

发表评论

插入图片

NOTICE1:请申请gravatar头像,没有头像的评论可能不会被回复!

回到顶部