SCROLLINFO结构体中fMask和nPage的理解
Posted IDEA
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SCROLLINFO结构体中fMask和nPage的理解相关的知识,希望对你有一定的参考价值。
还是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的理解的主要内容,如果未能解决你的问题,请参考以下文章