属性只有一种:即Align属性,该属性可以为三种值之一:None、
Top/Left和Bottom/Right。其中,Top/Left表示将滚动条控件的左上
边与由CreateWindowEx函数的参数定义的矩形的左上边对齐,而
Botton/Right则表示以右下边进行对齐。该属性的默认值为None,即
不进行任何对齐操作。
Windows标准滚动条的行为由MFC类CScrollBar封装。表中列出了在类
CScrollBar中定义的成员函数及其说明。
表6。 31 在类CScrollBar中定义的成员函数
成员函数 描述
CScrollBar 构造一个CScrollBar对象
Create 创建一个Windows滚动条,并将它与
CScrollBar对象相关联
GetScrollPos 获得滚动条的当前位置
SetScrollPos 设置滚动条的当前位置
GetScrollRange 获得给定滚动条的当前最大和最小位置
SetScrollRange 设置给定滚动条的当前最大和最小位置
ShowScrollBar 显示或隐藏滚动条
EnableScrollBar 允许或禁止滚动条上的一个或两个箭头
SetScrollInfo 设置关于滚动条的信息
GetScrollInfo 获得滚动条的信息
GetScrollLimit 获得滚动条的限制
当用户单击了滚动条时,父窗口将收到WM_HSCROLL或WM_VSCROLL消
息,在CWnd类的定义了处理该消息的成员函数为OnHScroll和
OnVScroll。成员函数OnHScroll的原型如下:
afx_msg void OnHScroll( UINT nSBCode; UINT nPos; CScrollBar* pScrollBar );
第一个参数nSBCode指定如下之一的滚动条代码,这些代码代表用户
所作的滚动请求:
SB_LEFT: 向左滚动较远距离
…………………………………………………………Page 390……………………………………………………………
SB_ENDSCROLL: 结束滚动
SB_LINELEFT: 向左滚动
SB_LINERIGHT: 向右滚动
SB_PAGELEFT: 向左滚动一页
SB_PAGERIGHT: 向右滚动一页
SB_RIGHT: 向右滚动较远距离
SB_THUMBPOSITION: 滚动到绝对位置。当前位置由
nPos参数指定
SB_THUMBTRACK: 拖动滚动条到指定的位置。当
前位置由nPos参数指定
通常,SB_THUMBTRACK滚动条代码由应用程序使用,以便在滚动条被
拖动时给以反馈。如果应用程序滚动了由滚动条控制的内容,它必须
使用SetScrollPos来重置滚动条的位置。
传递给函数OnHScroll的参数反映了当收到消息时由框架获得的值,
如果在重载版本的函数中调用了基类的实现,该实现将使用最初由消
息传递的参数,而不是向函数提供的参数。
消息WM_VSCROLL的处理函数OnVScroll与OnHScroll类似,我们这里就
不再重复讲述了。下面我们来看一个例子:
1。 创建一个名为ScrollDemo的基于对话框的MFC工程,按图设置对话
框的各控件。其中水平滚动条控件的ID为IDC_SCROLL,编辑框控件的
ID为IDC_CURPOS。
图6。 58 示例程序ScrollDemo的主对话框的设计
2。 使用ClassWizard为编辑框控件IDC_CURPOS映射类型为int的成员
变量m_iCurPos,并设置其最大值为100,最小值为…100。
3。 使用ClassWizard在类CScrollDemoDlg中为消息WM_HSCROLL添加处
理函数OnHScroll,其代码如下:
…………………………………………………………Page 391……………………………………………………………
void CScrollDemoDlg::OnHScroll(UINT nSBCode; UINT nPos; CScrollBar* pScrollBar)
{
// 获得原有的滚动条位置
int iPos=pScrollBar…》GetScrollPos();
// 根据不同的拖动方式设置新的滚动条位置
switch (nSBCode)
{
// 向右滚动一行
case SB_LINERIGHT:
iPos+=1;
break;
// 向左滚动一行
case SB_LINELEFT:
iPos…=1;
break;
// 向右滚动一页
case SB_PAGERIGHT:
iPos+=10;
break;
// 向左滚动一页
case SB_PAGELEFT:
iPos…=10;
break;
// 直接拖动滚动块
case SB_THUMBTRACK:
iPos=nPos;
…………………………………………………………Page 392……………………………………………………………
break;
default:
break;
}
// 滚动条的最大位置不超过 100; 最小位置不小于 …100
if (iPos100) iPos=100;
// 必须手动的更新滚动条的当前位置
pScrollBar…》SetScrollPos(iPos);
// 在编辑框中显示滚动条的当前位置
SetDlgItemInt(IDC_CURPOS; iPos);
CDialog::OnHScroll(nSBCode; nPos; pScrollBar);
}
上面的代码暗示了一点,这就是在被拖动时,滚动条不会 自动更新其
位置,我们必须自己在程序中做到这一点,即通过分析不同的滚动方
式来改变并设置新的滚动条位置,上面的代码演示了这一过程。
编译上面的程序代码,我们发现滚动条不能正常工作 !这是因为在默
认情况下,滚动条的滚动范围为从0到0。这时,我们根本不可能对滚
动条进行有意义的操作。因此,我们需要将下面的代码添加到
OnInitDialog成员函数:
CScrollBar *pScroll=(CScrollBar*)GetDlgItem(IDC_SCROLL);
pScroll…》SetScrollRange(…100; 100);
pScroll…》SetScrollPos(0);
SetDlgItemInt(IDC_CURPOS; 0);
上面的代码设定了滚动条的滚动范围和默认的滚动条位置,然后,将
当前滚动条位置显示在编辑控件IDC_CURPOS中。
4。 最后我们来实现一个功能,这就是我们希望当编辑控件中的文本
发生改变时,滚动条上的滑块的位置也相应的变化。要实现这一点,
…………………………………………………………Page 393……………………………………………………………
使用ClassWizard为控件IDC_CURPOS的通知消息EN_CHANGE添加消息处
理函数OnChangeCurPos。
void CScrollDemoDlg::OnChangeCurPos()
{
CString str;
GetDlgItemText(IDC_CURPOS; str);
str。TrimLeft();
str。TrimRight();
int iPos=0;
if (str!=〃…〃 && str!=〃〃)
{
if (!UpdateData())
{
return;
}
iPos=m_iCurPos;
}
CScrollBar *pScroll=(CScrollBar*)GetDlgItem(IDC_SCROLL);
pScroll…》SetScrollPos(iPos);
}
由于需要检验用户输入数据的有效性,上面的代码比较长。首先,如
果用户只输入一个负号 “? ”或刚将原有的数据删除,此时不应该报
错。这里我们可以将滚动条的位置设置为0。由于用户可能在所输入
的数据之前或之后插入一些空格,这种情况下我们也不应该报错,因
此,我们使用了一些额外的代码来避免了这种情况。最后,我们使用
了UpdateData函数来使用控件IDC_CURPOS的值更新成员变量
m_iCurPos,这样的目的是便于使用MFC提供的对话框数据检验机制。
但有个不好的地方是,如果用户输
小说推荐
- C语言游戏编程从入门到精通(PDF格式)
- -Page 1-Page 2-Page 3-Page 4-Page 5-Page 6-Page 7-Page 8-Page 9-Page 10-Page 11-Page 12-Page 13-Page 14
- 最新章:第4章
- JMS简明教程(PDF格式)
- -Page 1-JMS1.1规范中文版卫建军2007‐11‐22-Page 2
- 最新章:第28章
- SQL语言艺术(PDF格式)
- -Page 1-SQLSSQQLL语言艺术内容介绍本书分为12章,每一章包含许多原则或准则,并通过举例的方式对原则进行解释说明。这些例子大多来自于实际案例,对九种SQL经典查询场景以及其性能影响讨论,非常便于实践,为你数据库应用维护人员阅读。资深 SQL 专家 Stéphane Faroult倾力打
- 最新章:第27章
- 软件工程实践者的思想(PDF格式)
- -Page 1-大 道 至 简—软件工程实践者的思想周爱民(Aimingoo 著-Page 2-序2004 年 11 月初爱民(Aimingoo)第一次把他的书稿给我,我翻看了一下,第一反应讲的是感想。这不错,在技
- 最新章:第26章
- asp基础实用教程(DOC格式)
- 目 录一、关于ASP二、ASP的新功能三、创建ASP页四、使用脚本语言五、使用变量和常量六、使用集合七、ASP内建对象八、向浏览器发送内容九、包含文件十、访问数据库十一、调试ASP脚本十二、维护ASP应用程序的安全一、关于ASP Active Server Pages(ASP)是服务器端脚本编写环境
- 最新章:第17章
- Linux实用培训教程(PDF)
- -Page 1-rrktqt的个人空间 Linux实用培训教程第一部分 作者:红联Linux实用培训教程第一部分-共三部分解的Linux知识,循序渐进的介绍Linux相关知识,从入门到提高,希望对所有学习Linux的朋友都有帮助 红联Linux论坛是致力于Linux技术讨论的站点,目前网站收录的文章
- 最新章:第42章
- php程序设计简明教程(DOC格式)
- -Page 1-PHP 程序设计简明教程PHP 讲义 第 1 页 共 90 页-Page 2-目录序 4第一章 PHP 简介 6
- 最新章:第31章
- 路由器基本知识及应用实例(DOC格式)
- 第二章 路由器第一节 路由器发展概述自从1984年问世至今,路由器已经走过了近20年的快速技术发展历程。路由器的应用领域不断扩展、从单一的互通网关逐渐扩展到覆盖广域网、城域网乃至用户接入的各个领域。近年来,路由器早已逐渐脱离单纯用于企业网出口和互联的概念,开始成为运营网络和各种专用业务网络的核心设备
- 最新章:第48章
- Java编程思想第4版[中文版](PDF格式)
- -Page 1-Page 2《Thinking In Java》中文版作者:Bruce Eckel主页:http/BruceEckel.编译:Trans Bot主页:http/memberease~transbot致谢-献给那些直到现在仍在孜孜不倦创造下一代计算机语言的人们!指导您利用万维网的语言进
- 最新章:第295章