windows程序设计读书笔记之滚动条

如何创建滚动条,很简单,只要在 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(
HWND  hWnd ,     //  窗体句柄
  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(
HWND hWnd,    //  窗口句柄
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(
HWND  hWnd ,     //  窗体句柄
  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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值