• 【转载】传统控件中的滚动条控件


     资料来源:http://hi.baidu.com/maxlcl/blog/item/0d55945848f506dd9d82047f.html

    滚动条(Scroll Bar)主 要用来从某一预定义值范围内快速有效地进行选择.滚动条分垂直滚动条和水平滚动条两种.在滚动条内有一个滚动框,用来表示当前的值.用鼠标单击滚动条,可 以使滚动框移动一页或一行,也可以直接拖动滚动框.滚动条既可以作为一个独立控件存在,也可以作为窗口、列表框和组合框的一部分.Windows 95的滚动条支持比例滚动框,即用滚动框的大小来反映页相对于整个范围的大小.Windows 3.x使用单独的滚动条控件来调整调色板、键盘速度以及鼠标灵敏度,在Windows 95中,滚动条控件被轨道条取代(参见6.2.3)不提倡使用单独的滚动条控件.需要指出的是,从性质上划分,滚动条可分为标准滚动条和滚动条控件两种.标准滚动条是由WS_HSCROLL或WS_VSCROLL风 格指定的,它不是一个实际的窗口,而是窗口的一个组成部分(例如列表框中的滚动条),只能位于窗口的右侧(垂直滚动条)或底端(水平滚动条).标准滚动条 是在窗口的非客户区中创建的.与之相反,滚动条控件并不是窗口的一个零件,而是一个实际的窗口,可以放置在窗口客户区的任意地方,它既可以独立存在,也可 以与某一个窗口组合,行使滚动窗口的职能.由于滚动条控件是一个独立窗口,因此可以拥有输入焦点,可以响应光标控制键,如PgUp、PgDown、Home和End.的CScrollBar类封装了滚动条控件.CScrollBar类的Create成员函数负责创建控件,该函数的声明为

    BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );

    参数dwStyle指定了控件的风格.rect说明了控件的位置和尺寸.pParentWnd指向父窗口,该参数不能为NULL。nID则说明了控件的ID。如果创建成功,该函数返回TRUE,否则返回FALSE.要创建一个普通的水平滚动条控件,应指定风格WS_CHILD|WS_VISIBLE|BS_HORZ.要创建一个普通的垂直滚动条控件,应指定风格WS_CHILD|WS_VISIBLE|BS_VERT.主要的CScrollBar类成员函数如下所示:

    int GetScrollPos( ) const;

    该函数返回滚动框的当前位置.若操作失败则返回0.

    int SetScrollPos( int nPos, BOOL bRedraw = TRUE );

    该函数将滚动框移动到指定位置.参数nPos指定了新的位置.参数bRedraw表示是否需要重绘滚动条,如果为TRUE,则重绘之.函数返回滚动框原来的位置.若操作失败则返回0.

    void GetScrollRange( LPINT lpMinPos, LPINT lpMaxPos ) const;

    该函数对滚动条的滚动范围进行查询.参数lpMinPos和lpMaxPos分别指向滚动范围的最小最大值.

    void SetScrollRange( int nMinPos, int nMaxPos, BOOL bRedraw = TRUE );

    该函数用于指定滚动条的滚动范围.参数nMinPos和nMaxPos分别指定了滚动范围的最小最大值.由这两者指定的滚动范围不得超过32767.当两者都为0时,滚动条将被隐藏.参数bRedraw表示是否需要重绘滚动条,如果为TRUE,则重绘之.

    BOOL GetScrollInfo( LPSCROLLINFO lpScrollInfo, UINT nMask );

    该函数用来获取滚动条的各种状态,包括滚动范围、滚动框的位置和页尺寸.参数lpScrollInfo指向一个SCROLLINFO结构,该结构如下所示:
    typedef struct tagSCROLLINFO {
    UINT cbSize; //结构的尺寸(字节为单位)
    UINT fMask; /*说明结构中的哪些参数是有效的,可以是屏蔽值的组合, 如SIF_POS|SIF_PAGE,若为SIF_ALL则整个结构都有效*/
    int nMin; //滚动范围最大值,当fMask中包含SIF_RANGE时有效
    int nMax; //滚动范围最小值,当fMask中包含SIF_RANGE时有效
    UINT nPage; /*页尺寸,用来确定比例滚动框的大小,当fMask中包含 SIF_PAGE时有效*/
    int nPos; //滚动框的位置,当fMask中包含SIF_POS有效
    int nTrackPos; /*拖动时滚动框的位置,当fMask中包含 SIF_TRACKPOS时有效,该参数只能查询,不能设 置,最好不要用该参数来查询拖动时滚动框的位置*/
    } SCROLLINFO;
    typedef SCROLLINFO FAR *LPSCROLLINFO;
    参数nMask的意义与SCROLLINFO结构中的fMask相同.函数在获得有效值后返回TRUE,否则返回FALSE.

    BOOL SetScrollInfo( LPSCROLLINFO lpScrollInfo, BOOL bRedraw = TRUE );

    该函数用于设置滚动条的各种状态,一个重要用途是设定页尺寸从而实现比例滚动框.参数lpScrollInfo指向一个SCROLLINFO结构,参数bRedraw表示是否需要重绘滚动条,如果为TRUE,则重绘之.若操作成功,该函数返回TRUE,否则返回FALSE.

    MFC

     类也提供了一些函数来查询和设置所属的标准滚动条.这些函数与CScrollBar类的函数同名,且功能相同,但每个函数都多了一个参数,用来选择滚动条.例如,CWnd:: GetScrollPos 的声明为

    int GetScrollPos( int nBar ) const;

    参数nBar用来选择滚动条,可以为下列值:
    SB_HORZ //指定水平滚动条
    SB_VERT //指定垂直滚动条

    CWnd

     无论是标准滚动条,还是滚动条控件,滚动条的通知消息都是用WM_HSCROLL和WM_VSCROLL消息发送出去的.对这两个消息的确省处理函数是CWnd::OnHScroll和CWnd::OnVScroll,它们几乎什么也不做.一般需要在派生类中对这两个函数从新设计,以实现滚动功能.这两个函数的声明为

    afx_msg void OnHScroll( UINT nSBCode, UINT nPos, CScrollBar* pScrollBar );

    afx_msg void OnVScroll( UINT nSBCode, UINT nPos, CScrollBar* pScrollBar );

    参数nSBCode是通知消息码,如表6.8所示.nPos是滚动框的位置,只有在nSBCode为SB_THUMBPOSITION或SB_THUMBTRACK时,该参数才有意义.如果通知消息是滚动条控件发来的,那么pScrollBar是指向该控件的指针,如果是标准滚动条发来的,则pScrollBar为NULL.

     6.8 滚动条的通知消息码

    消息

    含义

    SB_BOTTOM / SB_RIGHT

    (二者的消息码是一样的,因此可以混用,下同)

    滚动到底端(右端).

    SB_TOP / SB_LEFT

    滚动到顶端(左端).

    SB_LINEDOWN / SB_LINERIGHT

    向下(向右)滚动一行(列).

    SB_LINEUP / SB_LINELEFT

    向上(向左)滚动一行(列).

    SB_PAGEDOWN / SB_PAGERIGHT

    向下(向右)滚动一页.

    SB_PAGEUP / SB_PAGELEFT

    向上(向左)滚动一页.

    SB_THUMBPOSITION

    滚动到指定位置.

    SB_THUMBTRACK

    滚动框被拖动.可利用该消息来跟踪对滚动框的拖动.

    SB_ENDSCROLL

    滚动结束.

  • 相关阅读:
    类的关联关系
    VisualStudio.DTE 对象可以通过检索 GetService() 方法
    openssl 安装
    反射的效率
    Ascll
    关于JavaScript 原型的理解
    asp.net MVC 学习笔记
    CSS3样式
    List<T>转DataTable
    SQL中的多表联查(SELECT DISTINCT 语句)
  • 原文地址:https://www.cnblogs.com/alonecat06/p/1450288.html
Copyright © 2020-2023  润新知