在刚开始使用SCROLLINFO结构时感觉很不顺手,尤其其中的成员fMask理解不太深刻,经过查询资料才理解一二。

  在使用滚动条功能时,如果要设置它的范围和位置可以用以前的函数,例如:SetScrollRange()、 SetScrollPos()、GetScrollRange()、GetScrollPos()等,但目前通常使用SetScrollInfo()与 GetScrollInfo(),使用这两个函数就要用到SCROLLINFO结构。

  

  可以先定义一个SCROLLINFO结构变量si,用&si作为以上两个函数的参数。同BeginPaint()中的&ps、GetTextMetrics()中的&tm等,这些结构都是通过这些函数被填充各域或取得各域的值。BeginPaint是填充ps的各域的值,GetTextMetrics是取得tm结构各域的值,而 SetScrollInfo()与GetScrollInfo()分别填充和取得。

  

  无论是Set还是Get,都得先设置si结构的第一个域的值,即赋给cbSize结构的大小。之后根据设置的fMask域的值进行Set或Get,当Set时,需要根据fMask的值将相关的域填充后再调用 SetScrollInfo(),这样si结构就被Set成功。当Get时,直接调用GetScrollInfo(),具体能使用哪些域的值是根据所设置的fMask域的值定的。

 

  如果要设置滚动条的范围和页面大小时,可编写以下代码:

      si.cbSize = sizeof (SCROLLINFO) ; 
      si.cbMask = SIF_RANGE | SIF_PAGE ; 
      si.nMin = 0 ; 
      si.nMax = NUMLINES - 1 ; 
      si.nPage = cyClient / cyChar ; 
      SetScrollInfo (hwnd, SB_VERT, &si, TRUE) ;

而若要用到滚动条的位置时,可以这样使用:
    先si.cbSize = sizeof (si) ; 
    si.fMask = SIF_ALL ; // 表示Get后将使用si结构的位置、页面大小等量
    GetScrollInfo (hwnd, SB_VERT, &si)

  然后就可直接使用si.nPos、si.nPage、si.nTrackPos等量,这些量就是从si结构中通过Get函数获得的,

  Platform SDK中如下描述:

  

The SCROLLINFO structure contains scroll bar parameters to be set by the SetScrollInfo function (or SBM_SETSCROLLINFO message), or retrieved by the GetScrollInfo function (or SBM_GETSCROLLINFO message).

typedef struct tagSCROLLINFO {  // si 
    UINT cbSize; 
    UINT fMask; 
    int  nMin; 
    int  nMax; 
    UINT nPage; 
    int  nPos; 
    int  nTrackPos; 
}   SCROLLINFO; 
typedef SCROLLINFO FAR *LPSCROLLINFO; 
 
Members
cbSize 
Specifies the size, in bytes, of this structure. 
fMask 
Specifies the scroll bar parameters to set or retrieve. This member can be a combination of the following values: Value Meaning 
SIF_ALL Combination of SIF_PAGE, SIF_POS, SIF_RANGE, and SIF_TRACKPOS. 
SIF_DISABLENOSCROLL This value is used only when setting a scroll bar's parameters. If the scroll bar's new parameters make the scroll bar unnecessary, disable the scroll bar instead of removing it.  
SIF_PAGE The nPage member contains the page size for a proportional scroll bar. 
SIF_POS The nPos member contains the scroll box position, which is not updated while the user drags the scroll box. 
SIF_RANGE The nMin and nMax members contain the minimum and maximum values for the scrolling range. 
SIF_TRACKPOS The nTrackPos member contains the current position of the scroll box while the user is dragging it.

nMin 
Specifies the minimum scrolling position. 
nMax 
Specifies the maximum scrolling position. 
nPage 
Specifies the page size. A scroll bar uses this value to determine the appropriate size of the proportional scroll box. 
nPos 
Specifies the position of the scroll box. 
nTrackPos 
Specifies the immediate position of a scroll box that the user is dragging. An application can retrieve this value while processing the SB_THUMBTRACK notification message. An application cannot set the immediate scroll position; the SetScrollInfo function ignores this member.

成员说明:
cbSize: SCROLLINFO结构长度字节数,该值在设置和查询参数时都必须填写。
fMask: 指定结构中的哪些成员是有效,该值共有如下5种选择,可以选择多种用“OR”组合起来,该值在

设置和查询参数时都必须填写。
SIF_ALL      :整个结构都有效
SIF_DISABLENOSCROLL:该值仅在设定参数时使用,视控件参数设定的需要来对本结构的成员进行取舍。
SIF_PAGE      :nPage成员有效
SIF_POS      :nPos成员有效
SIF_RANGE     :nMin和nMax成员有效
nMin:滚动范围最小值
nMax:滚动范围最大值
nPage:页尺寸,用来确定比例滚动框的大小
nPos:滚动框的位置
nTrackPos:拖动时滚动框的位置,该参数只能查询,不能设置。

SCROLLINFO结构详解的更多相关文章

  1. BS模式的模型结构详解

    编号:1004时间:2016年4月12日16:59:17功能:BS模式的模型结构详解 URL:http://blog.csdn.net/icerock2000/article/details/4000 ...

  2. Linux下的文件目录结构详解

    Linux下的文件目录结构详解 / Linux文件系统的上层根目录 /bin 存放用户可执行的程序 /boot 操作系统启动时所需要的文件 /dev 接口设备文件目录,例如:had表示硬盘 /etc ...

  3. PHP扩展代码结构详解

    PHP扩展代码结构详解: 这个是继:使用ext_skel和phpize构建php5扩展  内容 (拆分出来) Zend_API:深入_PHP_内核:http://cn2.php.net/manual/ ...

  4. Android系统目录结构详解

    Android系统基于linux内核.JAVA应用,算是一个小巧精致的系统.虽是开源,但不像Linux一般庞大,娇小可亲,于是国内厂商纷纷开发出自己基于Android的操作系统.在此呼吁各大厂商眼光放 ...

  5. Linux文件系统的目录结构详解

    Linux文件系统的目录结构详解   一.前 言 文章对Linux下所有目录一一说明,对比较重要的目录加以重点解说,以帮助初学者熟练掌握Linux的目录结构. 二.目 录 1.什么是文件系统 2.文件 ...

  6. vue 文件目录结构详解

    vue 文件目录结构详解 本篇文章主要介绍了vue 文件目录结构详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 项目简介 基于 vue.js 的前端开发环境,用于前后 ...

  7. [转帖]Tomcat目录结构详解

    Tomcat目录结构详解 https://www.cnblogs.com/veggiegfei/p/8474484.html 之前应该是知道一点 但是没有这么系统 感谢原作者的描述. 1.bin: 该 ...

  8. web标准 浏览器介绍 开发工具介绍 HTML介绍 HTML颜色介绍 规范 HTML结构详解 {前端之前端初识}

    前端之前端初识   前端初识 本节目录 一 web标准 二 浏览器介绍 三 开发工具介绍 四 HTML介绍 五 HTML颜色介绍 六 规范 七 HTML结构详解 一 web标准 web准备介绍: 1. ...

  9. JS函数动作分层结构详解及Document.getElementById 释义 js及cs数据类型区别 事件 函数 变量 script标签 var function

    html +css 静态页面 js     动态 交互   原理: js就是修改样式, 比如弹出一个对话框. 弹出的过程就是这个框由disable 变成display:enable. 又或者当鼠标指向 ...

随机推荐

  1. R语言函数化编程笔记2

    R语言函数化编程笔记2 我学过很多的编程语言,可以我写的代码很啰嗦,一定是我太懒了.或许是基础不牢地动山摇 1.为什么要学函数 函数可以简化编程语言,减少重复代码或者说面向对象的作用 2.函数 2.1 ...

  2. ps导出svg

    svg初识 看到一些复杂的svg图形很好奇是手写出来的么,看了源码望而却步.网上看到ps都可以导出svg,然后试了下. 需要加载一个脚本,js写的,把文件复制到路径后重启ps,修改图形名字,然后保存成 ...

  3. 22.01.Cluster

      1. 클러스터링 iris 데이터셋 확인¶ In [2]: from sklearn import cluster from sklearn import datasets iris = dat ...

  4. AspxDashboardView 更新参数

    AspxDashboardView 更新参数 function SetThrendDashboardView() { console.log("就是这样被你征服"); var to ...

  5. js - 文字

    居右 style="float:right;" 文字底部对齐(默认居中对齐) vertical-align:bottom; 文字居中 text-align:middle text- ...

  6. Python标准库之sys模块

    获取Python解释器的版本信息 import sys print(sys.version) #输出 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 17:00:18) ...

  7. html5 流式布局 弹式布局 flex

      <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8& ...

  8. svg 放大缩小后的比例

    function getCoords(evt) { // 计算出当前屏幕与svg的比例    var canvas = document.getElementById("canvase&qu ...

  9. docker部署java应用程序

    https://docs.docker.com/get-started/ 安装docker   1.安装docker  apt install docker 2.配置docker加速器 安装完成后在 ...

  10. IDEA更换背景颜色与字体

    打开IDEA 选择左上角的File  ->  Setting -> Editor  -> Color Scheme  就可以设置  黑白背景  默认为白色  可以选择  Darcul ...