如何创建滚动条,很简单,只要在 CreateWindow的第三个参数中
添加窗口风格标识符 WS_VSCROLL(垂直滚动条) 或 WS_HSCROLL(水平滚动条)
hwnd = CreateWindow (szAppName, TEXT ("Get System Metrics No. 2"),
WS_OVERLAPPEDWINDOW |
WS_VSCROLL,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL) ;
默认状态下,滚动条的范围是 0~100
调整范围有:
SetScrollRange(hwnd,iBar,iMin,iMax,bRedraw); 该函数可以调整范围
老的
SetScrollInfo(HWND hWnd;int fnBar,LPSCROLLINFO lpsi,BOOL fRedraw);新的
但是新的必须有一个这样的结构:
SCROLLINFO结构,它是 函数 中第三个参数的来源
设置初始位置:
int SetScrollPos(
int
nBar
, // 滚动条
int
nPos
, // 滚动条的新位置
BOOL
bRedraw // 重绘标志
);
SetScrollInfo(HWND hWnd;int fnBar,LPSCROLLINFO lpsi,BOOL fRedraw);
新的(可以在 WM_SIZE 里面设置)
接受的消息事件:
WM_VSCROLL 垂直
WM_HSCROLL 水平
当滚动条是窗体的一部分的时候,可以忽略lParam参数,他只是用于子窗口的时候,通常是对话框
wParam 参数分为高低位字
低位:代表鼠标在滚动条上的动作,这个值通常称为:通知码
#define SB_LINEUP 0
#define SB_LINELEFT 0
#define SB_LINEDOWN 1
#define SB_LINERIGHT 1
#define SB_PAGEUP 2
#define SB_PAGELEFT 2
#define SB_PAGEDOWN 3
#define SB_PAGERIGHT 3
#define SB_THUMBPOSITION 4
#define SB_THUMBTRACK 5
#define SB_TOP 6
#define SB_LEFT 6
#define SB_BOTTOM 7
#define SB_RIGHT 7
#define SB_ENDSCROLL 8
PS:LEFT RIGHT 的水平 UP DOWN TOP BOTTOM 的垂直
松开鼠标获得:SB_ENDSCROLL 通知码
通常可以忽略。
window不会自己变动位置,需要调用 变动的函数,如SetScrollPos 函数
当鼠标按在滑块上按下鼠标的时候,会产生:
SB_THUMBTRACK SB_THUMBPOSITION 的通知码
当wParam 的低位字是 SB_THUMBTRACK 时,wParam 的高位字是用户拖动滑块的当前位置。
当wParam 的低位字是SB_THUMBPOSITION 时,wParam的高位字是用户松开鼠标键时滑块的最终位置!
其他的时候 高位字忽略!
SetScrollRange(hwnd,iBar,iMin,iMax,bRedraw); 该函数可以调整范围
老的
BOOL SetScrollRange(
int nBar, // 滚动条类型
int nMinPos, // 滚动条的最小位置
int nMaxPos, // 滚动条的最大位置
BOOL bRedraw // 重绘标志
);
hWnd
[输入] 滚动条控件或带有标准滚动条
窗体的句柄,由nBar参数值确定。
nBar
[输入] 指定滚动条将被设置。这个参数可以是下表值中的一个,含义如下:
值
|
说明
|
SB_CTL
|
设置滚动条控件的范围。而参数hwnd必须是滚动条控件的句柄。
|
SB_HORZ
|
设置窗体的标准水平滚动条的范围。
|
SB_VERT
|
设置窗体的标准垂直滚动条的范围
|
nMinPos
[输入] 指定滚动位置的最小值。
nMaxPos
[输入] 指定滚动位置的最大值.。
bRedraw
[输入] 指定滚动条是否被重画以反映变化。如果这个参数为TRUE,滚动条将被重画;如果为FALSE则不被重画。
SetScrollInfo 新的
函数原型:int SetScrollInfo(HWND hWnd;int fnBar,LPSCROLLINFO lpsi,BOOL fRedraw);
参数:
hWnd:滚动条控件或带标准滚动条的
窗体句柄,由fnBar参数决定。
fnBar:指定被设定参数的滚动条的类型。这个参数可以是下面值,含义如下:
SB_CTL:设置滚动条控件。而参数hwnd必须是滚动条控件的句柄。
SB_HORZ:设置所给定的
窗体上标准水平滚动条参数。
SB_VERT:设置所给定的
窗体上标准垂直滚动条参数。
lpsi:指向SCROLLINFO结构。在调用SetScrollInfo之前,设置SCROLLINFO结构中cbSize成员以标识结构大小,设置成员fMask以说明待设置的滚动条参数,并且在适当的成员中制定新的参数值。成员fMask可以为下面所列复合值,含义如下:
SIF_DfSABLENOSCROLL:如果滚动条的新参数使其为没必要,则使滚动条无效而不再移动它。
SIF_PAGE:设置滚动页码值到由Ipsi指向的SCROLLINFO结构的nPage成员中。
SIF_POS:设置滚动位置值到由lpsi指向的SCROLLINFO结构的nPos成员中。
SIF_RANGE:设置滚动范围值到由lpsl指向的SCROLLINFO结构的nMin和nMax成员中。
fRedraw:指定滚动条是否重画以反映滚动条的变化。如果这个参数为TRUE,滚动条将被重画,否则不被重画。
返回值:返回值是滑块的当前位置。
设置初始位置:
int SetScrollPos(
int
nBar
, // 滚动条
int
nPos
, // 滚动条的新位置
BOOL
bRedraw // 重绘标志
);
hWnd
[输入] 滚动条控件或带有标准滚动条
窗体的句柄,由nBar参数值确定
nBar
[输入] 指定滚动条将被设置。这个参数可以是下表值中的一个,含义如下:
值
|
说明
|
SB_CTL
|
设置滚动条控件的范围。而参数hwnd必须是滚动条控件的句柄。
|
SB_HORZ
|
设置窗体的标准水平滚动条的范围。
|
SB_VERT
|
设置窗体的标准垂直滚动条的范围
|
nPos
[输入] 指定滚动按钮的新位置。这个位置必须在滚动范围之内。若要了解更多有关滚动范围的信息,请参见SetScrollRange函数。
bRedraw
[输入] 指定滚动条是否被重画以反映变化。如果这个参数为TRUE,滚动条将被重画;如果为FALSE则不被重画。
如果函数运行成功,其返回值是滚动按钮的前一个位置。
如果函数运行失败,其返回值是0。
若想获得更多的
错误信息,请调用GetLastError函数。
Windows XP: 如果the desktop is themed 并且父窗口是一个 message-only window ,则函数返回一个不真实的值。
这个也可以用来设置初始位置!
新的:
SetScrollInfo
函数功能:该函数设置滚动条参数,包括滚动位置的最大值和最小值,页面大小,滚动按钮的位置。如被请求,函数也可以重画滚动条。
函数原型:int SetScrollInfo(HWND hWnd;int fnBar,LPSCROLLINFO lpsi,BOOL fRedraw);
参数:
hWnd:滚动条控件或带标准滚动条的
窗体句柄,由fnBar参数决定。
fnBar:指定被设定参数的滚动条的类型。这个参数可以是下面值,含义如下:
SB_CTL:设置滚动条控件。而参数hwnd必须是滚动条控件的句柄。
SB_HORZ:设置所给定的
窗体上标准水平滚动条参数。
SB_VERT:设置所给定的
窗体上标准垂直滚动条参数。
lpsi:指向SCROLLINFO结构。在调用SetScrollInfo之前,设置SCROLLINFO结构中cbSize成员以标识结构大小,设置成员fMask以说明待设置的滚动条参数,并且在适当的成员中制定新的参数值。成员fMask可以为下面所列复合值,含义如下:
SIF_DfSABLENOSCROLL:如果滚动条的新参数使其为没必要,则使滚动条无效而不再移动它。
SIF_PAGE:设置滚动页码值到由Ipsi指向的SCROLLINFO结构的nPage成员中。
SIF_POS:设置滚动位置值到由lpsi指向的SCROLLINFO结构的nPos成员中。
SIF_RANGE:设置滚动范围值到由lpsl指向的SCROLLINFO结构的nMin和nMax成员中。
fRedraw:指定滚动条是否重画以反映滚动条的变化。如果这个参数为TRUE,滚动条将被重画,否则不被重画。
返回值:
返回值是滑块的当前位置。
当鼠标按在滑块上按下鼠标的时候,会产生:
SB_THUMBTRACK SB_THUMBPOSITION 的通知码
当wParam 的低位字是
SB_THUMBTRACK 时,wParam 的高位字是用户拖动滑块的当前位置。
当wParam 的低位字是
SB_THUMBPOSITION
时,wParam的高位字是用户松开鼠标键时滑块的最终位置!
其他的时候 高位字忽略!
获取滑块的位置:
GetScrollPos 老
函数功能:该函数获取指定滚动条中滚动按钮的当前位置。当前位置是一个根据当前滚动范围而定的相对值。例如,如果滚动范围是0到100之间,滚动按钮在中间位置,则其当前位置为50。该函数提供了向后兼容性,新的应用程序应使用GetScrollInfo函数。
函数原型:int GetScrollPos(HWND hWnd,int nBar);
参数:
hWnd:根据参数nBar值,处理滚动条控制或带有标准滚动条
窗体。
nBar:指定滚动条将被检查。这个参数可以是下面值,含义如下:
SB_CTL:找回滚动条控制中滚动翻页盒的位置。而参数hwnd必须是滚动条控制的句柄。
SB_HORZ:找回
窗体上标准水平滚动条中参数滚动翻页盒的位置。
SB_VERT:找回
窗体上标准垂直滚动条中参数滚动翻页盒的位置。
返回值:如果函数运行成功,其返回值是滚动
翻页盒的当前位置;如果函数运行失败,其返回值是0。想若想获得更多的
错误信息,请调用GetLastError函数。
注意:函数GetScrollPos可以使应用程序使用32位滚动位置。尽管消息WM_HSCROLL和WM_VSCROLL指出了滚动条位置,但却被限制为16位,而函数SetScrollPos,SetScrollRange,GetScrollPos,和
GetscrollRange都支持32位的滚动条数据。
在WM_HSCROLL或WM_VSCROLL消息中通告SB_JHUMBTRACK时,为了得到滚动条32位的位置,请调用GetScrolllnfo函数。
在WM_HSCROLL或WM_VSCROLL消息中通告SB_THUMBTRACK时,为了得到32位的滚动条,则调用函数GetScrolllnfo。
GetScrollInfo 新
函数功能:该函数找到滚动条的参数,包括滚动条位置的最小值、最大值,页面大小,滚动按钮的位置,
函数原型:
BOOL GetScrollInfo( HWND hWnd, int fnBar, LPSCROLLINFO lpsi );
参数:
hWnd:滚动条控制或有标准滚动条的
窗体句柄,由fnBar参数确定。
fnBar:指定待找回滚动条参数的类型,此参数可以为如下值,其值含义:
SB_CTL:找回滚动条控制参数。其中参数hwnd一定是处理滚动条控制的句柄。
SB_HORZ:找回所指定
窗体的标准水平滚动条参数。
SB_VERT:找回所指定
窗体的标准垂直滚动条参数。
lpsi:指向SCROLLINFO结构。
SCROLLINFO结构
typedef struct tagSCROLLINFO {
UINT cbSize;//
大小
UINT fMask;
//一个旗标,具体看下面
int nMin;
//最小值
int nMax;
//最大值
UINT nPage;
//页面大小
int nPos;//当前位置
int nTrackPos;//当前追踪位置
} SCROLLINFO, *LPSCROLLINFO;
typedef SCROLLINFO CONST *LPCSCROLLINFO;
//
cbSize是结构大小,填sizeof(SCROLLINFO)
fMask指定使用结构中哪些成员,不指定的就不使用
可以是以下几个值的任意组合
SIF_ALL
SIF_DISABLENOSCROLL
可以让windows聪明的知道 什么时候要禁用 滚动条 你懂的
SIF_PAGE 复制滚动页码到由lpsi指向的SCROLLINFO结构的nPage成员中
SIF_POS 复制滚动位置到由lpsi指向的SCROLLINFO结构的nPos成员中
SIF_RANGE 复制滚动范围到由lpsi指向的SCROLLINFO结构的nMin和nMax成员中
SIF_TRACKPOS 复制当前滚动盒跟踪位置到由lpsi指向的SCROLLINFO结构的nTrackPos成员中
在调用Getscrolllofo函数之前,设置SCROLLINFO结构中cbSize成员以标识结构大小,设置成员fMask以说明待找回的滚动条参数。在运行之前,函数复制结构中适当的成员所指定的参数。
返回值
如果函数找到任何一个值,那么返回值为非零;如果函数没有找到任何值,那么返回值为零;
若要得到更多出错信息,请调用GetLastError函数。
注意:Getscrolllnfo函数尽管WM_HSCROLL和WM_VSCROLL指出了滚动条位置消息,却仅提供了16位数据,而函数SetScrollnfo和GetScrollnfo则提供了32位的滚动条数据。因而,当应用程序在处理WM_HSCROLL或 WM_VSCROLL时,要获得32位滚动条位置的数据时,则要调用Getscrolllnfo函数。 在WM_HSCROLL或WM_VSCROLL消息中SB_THUMBTRACK通告过程中,为了获得32位的滚动盒位置,需要调用GetScrolllnfo函数以得到结构SCROLLINFO成员fMask中的SCROLLINFO值。函数返回在结构SCROLLINFO成员nTrackPos中指出的滚动盒跟踪位置的值。这将允许当用户移动滚动盒时能得到其位置。
速查:Windows NT3.51、Windows 95、Windows CE1.0以上,头文件:winuser.h;库文件:user32.lib。