还是VC++中有关显示图像的问题。

我们在显示一幅比较大的图像时,要使用带标准滚动条的对话框。涉及对滚动条的操作就不得不提SCROLLINFO这个结构体。只看单词意思就这道这个结构体要储存滚动条的一些信息。究竟是哪些信息呢?我们先看看这个结构体的定义:

typedef struct tagSCROLLINFO
{
  UINT cbSize ;   // SCROLLINFO结构体长度的字节数
  UINT fMask ;    // 指定结构体中哪些成员有效
  int nMin;       // 滚动范围最小尺寸
  int nMax;        // 滚动范围的最小尺寸
  UINT nPage ;        // 页尺寸,用来确定比例滚动框的大小
  int nPos ;     // 滚动框的位置
  int nTrackPos ;   //
}SCROLLINFO,*LPSCROLLINFO;
typedef SCROLLINFO CONST *LPCSCROLLINFO
 
好了,与其说这个结构体储存的是滚动条的信息,不如说它储存了滚动块的信息。滚动块就是滚动条上的那个滑块。下面我们具体说说这个结构体中几个成员的含义。
首先,fMask,指定哪些成员有效,它的值是这些常亮:SIF_ALL,表示整个结构体都有效,SIF_PAGE,表示nPage成员有效,SIF_POS:nPos成员有效,SIF_RANGE, nMax和nMin有效。这些常量可以用或连接。
nMin:这个值我们通常都设定为0
nMax: 对于这个值,如果我们想在整个客户区显示一个比客户区还要大的图片,这个值就应该等于图片大小和客户区大小的差(水平和竖直两个方向上)
nPage:这个属性表示页尺寸,怎么理解这个属性呢。首先,它的设置是为了根据比例确定滚动块的大小。这个值通常就取客户区的大小。但是要特别注意:当nMax<=nPage时,这时候如果使用nPage属性,将不会显示滚动条!!!!前面说过,nPage的设置是为了根据比例设置滚动块的大小。我们平时看到的滚动条的滚动块有大有小,有的滚动块的大小还会随着浏览篇幅的变化而变化。与这个nPage属性有很大关系。但是:nMax<=nPage不代表没有必要使用滚动条,只要nMax>nMin ,就是需要滚动条的,但是当nMax<nPage时,我们通常不设置nPage 属性(设置分fMask时不选SIF_PAGE),这样就可以显示出滚动条了,只不过滚动块的大小是标准大小,不是根据比例确定的大小而已。

SCROLLINFO结构体中fMask和nPage的理解的更多相关文章

  1. C结构体中数据的内存对齐问题

    转自:http://www.cnblogs.com/qwcbeyond/archive/2012/05/08/2490897.html 32位机一般默认4字节对齐(32位机机器字长4字节),64位机一 ...

  2. 问题解决——在结构体中使用set保存结构体数据

    =====================声明========================== 本文原创,转载请明确的注明出处和作者,并保持文章的完整性(包括本声明部分). 本文链接:http:/ ...

  3. C语言 结构体中属性的偏移量计算

    //计算结构体偏移量 #include<stdio.h> #include<stdlib.h> #include<string.h> //详解:对于offscfof ...

  4. C语言 结构体中的成员域偏移量

    //C语言中结构体中的成员域偏移量 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> # ...

  5. sturct stat 结构体中 st_mode 的含义

    工作中遇到 else if( (s_buf.st_mode&S_IFMT) == S_IFDIR) return 2; else if( !(s_buf.st_mode&S_IFREG ...

  6. C语言结构体中的函数指针

      这篇文章简单的叙述一下函数指针在结构体中的应用,为后面的一系列文章打下基础 本文地址:http://www.cnblogs.com/archimedes/p/function-pointer-in ...

  7. c语言结构体中的冒号的用法

    结构体中常见的冒号的用法是表示位域. 有些信息在存储时,并不需要占用一个完整的字节,   而只需占几个或一个二进制位.例如在存放一个开关量时,只有0和1   两种状态,   用一位二进位即可.为了节省 ...

  8. C++结构体中sizeof(1)

    sizeof sizeof操作符的作用是返回一个对象或类型名的长度,长度的单位是字节. 返回值的类型是标准库命名为size_t的类型,size_t类型定义在cstddef头文件中,该头文件是C标准库的 ...

  9. C结构体中位域

    C结构体中位域的一点小知识,最近在看资料时遇到结构体中的一种特殊操作——位域,在下面的程序中我将根据自己的理解进行简单介绍.程序只是为了了解位域的一些性质,运行时有些编译器可能会报错. 程序代码如下( ...

随机推荐

  1. 批量生成sqlldr文件,高速卸载数据

    SQL*Loader 是用于将外部数据进行批量高速加载的数据库的最高效工具,可用于将多种平面格式文件加载到Oracle数据库.SQL*Loader支持传统路径模式以及直接路径这两种加载模式.关于SQL ...

  2. 三 最简单的 AndEngine 程序框架

    package com.example.AndEngineExample; import org.anddev.andengine.engine.Engine;import org.anddev.an ...

  3. 【转】Github轻松上手5-站在巨人的肩膀上(Fork)

    转自:http://blog.sina.com.cn/s/blog_4b55f6860100zzj3.html 有时候你可能想给别人的项目出把力,或者想以别人的项目作为自己项目的起点,在Github里 ...

  4. nodejs学习--express篇

    express篇:http://www.runoob.com/nodejs/nodejs-express-framework.html Express 提供了内置的中间件 express.static ...

  5. 锋利的jQuery读书笔记---jQuery中Ajax--get、post等方法

    load()方法通常用来从Web服务器上获取静态的数据文件,然而这并不能体现ajax的全部价值. 在项目中,如果需要传递一些参数给服务器中的页面,那么可以使用$.get()或者$.post()方法(或 ...

  6. android 带边框的圆角按钮

    新建buttonstyle.xml 代码如下 <?xml version="1.0" encoding="UTF-8"?> <layer-li ...

  7. distinguish and differentiate

    According to Cambridge Dictionary distinguish:to recognize or understand the difference between two ...

  8. Oracle锁表(转载)

    锁定类型               行级锁               表级锁行级锁         ---- 行被排他锁定         ----在某行的锁被释放之前,其他用户不能修改此行    ...

  9. LoadRunner error -27728

    错误现象1:Action.c(16): Error -27728: Step download timeout (120 seconds) has expired whendownloading no ...

  10. nodejs ctrl+B 快捷键设置

    开发 nodejs 的时候,要使用 sublime 软件,其中的启动方式有很多中.可以通过 supersivor 当然也可以 利用nodejs 的自身功能通过 ctrl+B来直接启动. 具体设置方式, ...