MFC学习日记之滚动条控件

原创 2016年08月29日 12:47:05

        常见的滚动条有水平滚动条和竖直滚动条,具体的形式如下图:

当前的滚动条的功能是通过拖动下面的滚动条调整位置可以改变上编辑框的数字。具体实现过程如下:

一、添加一个Horizontal Scroll Bar控件,ID设置为IDC_HORI_SCROLLBAR。

二、再添加一个静态文本控件和一个编辑框,静态文本控件的Caption属性设为“滚动块当前位置:”,编辑框的ID设为IDC_HSCROLL_EDIT,Read Only属性设为True。

三、为Horizontal Scroll Bar控件添加一个变量。

四、根据上面所讲,我们可以重载类的OnHScroll函数。具体操作为,在类的属性页面的工具栏上点“Messages”按钮,找到WM_HSCROLL消息,添加响应函数就可以了。

具体实现代码如下:

void CExample26Dlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)  
2.{  
3.    // TODO: Add your message handler code here and/or call default  
4.    int pos = m_horiScrollbar.GetScrollPos();    // 获取水平滚动条当前位置  
5.  
6.    switch (nSBCode)   
7.    {   
8.        // 如果向左滚动一列,则pos减1  
9.        case SB_LINELEFT:   
10.            pos -= 1;   
11.            break;   
12.        // 如果向右滚动一列,则pos加1  
13.        case SB_LINERIGHT:   
14.            pos  += 1;   
15.            break;   
16.        // 如果向左滚动一页,则pos减10  
17.        case SB_PAGELEFT:   
18.            pos -= 10;   
19.            break;   
20.        // 如果向右滚动一页,则pos加10  
21.        case SB_PAGERIGHT:   
22.            pos  += 10;   
23.            break;   
24.        // 如果滚动到最左端,则pos为1  
25.        case SB_LEFT:   
26.            pos = 1;   
27.            break;   
28.        // 如果滚动到最右端,则pos为100  
29.        case SB_RIGHT:   
30.            pos = 100;   
31.            break;     
32.        // 如果拖动滚动块滚动到指定位置,则pos赋值为nPos的值  
33.        case SB_THUMBPOSITION:   
34.            pos = nPos;   
35.            break;   
36.        // 下面的m_horiScrollbar.SetScrollPos(pos);执行时会第二次进入此函数,最终确定滚动块位置,并且会直接到default分支,所以在此处设置编辑框中显示数值  
37.        default:   
38.            SetDlgItemInt(IDC_HSCROLL_EDIT, pos);  
39.            return;   
40.    }   
41.  
42.    // 设置滚动块位置  
43.    m_horiScrollbar.SetScrollPos(pos);  
44.  
45.    CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);  
46.}


五、添加初始化函数,给滚动条和编辑框初始赋值,代码如下:
  1. m_horiScrollbar.SetScrollRange(1, 100);   
  2.     // 设置水平滚动条的初始位置为20   
  3.     m_horiScrollbar.SetScrollPos(20);   
  4.     // 在编辑框中显示20   
  5.     SetDlgItemInt(IDC_HSCROLL_EDIT, 20);  
六、总结
1. 滚动条相较于其他的控件也就是响应函数为OnHScroll函数,不是直接添加响应函数。
2. 滚动条有几个内置函数,如下:
BOOL SetScrollInfo(LPSCROLLINFO lpScrollInfo, BOOL bRedraw = TRUE);

       用于设置滚动条的各种参数信息。参数lpScrollInfo为指向SCROLLINFO结构体变量的指针,参数bRedraw表示是否需要重绘滚动条,如果为TRUE,则重绘。该函数操作成功则返回TRUE,否则返回FALSE。

       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,则重绘。

       OnHScroll()与OnVScroll()函数

       无论是标准滚动条,还是滚动条控件,滚动条的通知消息都是用WM_HSCROLL 和WM_VSCROLL消息发送出去的。对这两个消息的默认处理函数是CWnd::OnHScroll和CWnd::OnVScroll,一般需要在派生类中对这两个函数进行重载,以实现滚动功能。也就是说,假设在一个对话框中放入了一个水平滚动条,我们可以在对话框类中重载OnHScroll函数,并在OnHScroll函数中实现滚动功能。

       这两个函数的声明如下:

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

       参数nSBCode是通知消息码,主要通知码及含义的介绍下面已列出。nPos 是滚动框的位置,只有在nSBCode为SB_THUMBPOSITION或SB_THUMBTRACK时,该参数才有意义。如果通知消息是滚动条控件发来的,那么pScrollBar 是指向该控件的指针,如果是标准滚动条发来的,则pScrollBar 为NULL。

       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:滚动结束

-------------------------------------------------------------------------------end----------------------------------------------------------------



版权声明:本文为博主原创文章,未经博主允许不得转载。

VS2013/MFC编程入门之二十五(常用控件:滚动条控件Scroll Bar)

本节详解滚动条控件Scroll Bar的相关内容。        滚动条控件简介        前面讲的列表框和组合框设置了相应属性后,如果列表项显示不下也会出现滚动条。滚动条分为水平滚动...

VC++/MFC精讲多练#004:DIY一个漂亮的滚动条控件

http://hi.topsage.com/thread-2316243-1-1.html       滚动条处处可见,一次性展示不完整,要用它拖动查看全部,而且下载的软件,滚动条漂亮多样,本...

MFC中ScrollBar滚动条控件的使用

在MFC需要有时需要用到混动条拖动屏幕和显示。现将滚动条控件ScrollBar的相关用法总结如下。 一、使用的步骤 1、在对话框中拖入CScrollBar控件,并修改ID, 2、在对话框的Ini...

MFC编程之常用控件:滚动条控件Scroll Bar

滚动条控件的创建依然有两种方式,一种是直接在Toolbox中将滚动条控件拖入对话框模板,然后添加控件变量使用,另一种就是用CScrollBar类的Create成员函数动态创建。这两种方式适用于不同的场...
  • zzhpg
  • zzhpg
  • 2015年12月04日 15:10
  • 1074

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

[VC/MFC]滑动动条控件Slider的用法

在MFC中滑动条(CSliderCtrl)是个常用的控件,用法如下:主要要方法有:1、设置、取得滑动范围: void SetRange( int nMin, int nMax, BOOL bRedra...

MFC 滚动条自绘

列表控件中的滚动条自绘 CScrollBarList .h: #include "ScrollBarEx.h" class CScrollBarList : public CListCtrl...

自绘滚动条记录

  Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE ...
  • crybird
  • crybird
  • 2009年01月06日 13:01
  • 6095

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC学习日记之滚动条控件
举报原因:
原因补充:

(最多只允许输入30个字)