1、2018/7/19,1,面向对象与可视化程序设计 -Visual C+ 编程主讲教师:唐 龙教授 (计算机科学与技术系)黄维通博士 (计算机与信息管理中心)清 华 大 学2001年2月,2018/7/19,2,第十三章滚动条类及其应用,2018/7/19,3,内容提要,滚动条类简介滚动条类控件的应用,2018/7/19,4,13.1.滚动条类简介,1. 滚动条和滚动条类,滚动条是可视化的交互式控件,它包括一个滑块、滚动条的两端的按钮等。两种不同的滚动条滚动条控件由用户创建、管理和释放的属于窗口的滚动条由该窗口创建、管理和释放的。作为任何一个窗口的子控件,滚动条可以通过通知代码来创建,但也可以用
2、对话框资源模板来创建。,滚动条类Cscrollbar是由CWnd类直接派生的。,2.CScrollBar类的创建与初始化,关键字new和构造函数CScrollBar:CScrollBar() 为一个 ScrollBar对象分配一个实例CScrollBar:pMyScroll=new CScrollBar;初始化CScrollBar对象,将一个Windows滚动条赋予它,并用CScroll:Create()方法设置参数和样式BOOL Create(DWORD dwStyle,/滚动条窗口的样式 const RECT/父窗口的标识,3.滚动条的设置,调用CScrollBar:SetScrollRa
3、nge()设置滚动条控件范围。例如,设置滚动范围为-100到100的垂直滚动条pMyScroll-SetScrollRange(SB_VERT,-100,100);调用SetScrollPos()设置滚动块当前位置。例如,滚动快的位置在-100到100的中间,即为0的位置pMyScroller-SetScrollPos(0);,2018/7/19,9,13.1.滚动条类的应用技术,例13-1带滚动条类的应用程序,其界面标题为Application of ScrollBar,滚动条的滚动范围设为0到20,当前值为 10,右编辑框显示当前值。四个按键控制滚动条动作:单击Up按钮,滚动块移到最上边,
4、编辑框的数字变为0单击Down按钮,滚动块移到最下边,编辑框的数字变为20;单击Reset按钮,滚动块移到中间,编辑框的数字变为10单击Exit按钮,退出应用程序。,单击Up,滚动块移到最上边,单击Down,滚动块移到最下边,单击Exit,退出应用程序,单击Reset,滚动块移到中间,编辑框的数字为10,单击上/下的箭头,滚动块向上/向下移动一格,编辑框中的数字加1或减1,拖动滚动块。编辑框中的数字随之变化,单击滚动块与箭头之间的区域。滚动块上移或下移三格,编辑框中的数字加3或减3,编辑框显示当前滚动块位置,应用程序的可视化编程,应用程序的代码编程,(1)给滚动条连接变量,ID变量名类别 类型
5、IDC_SCROLLBARm_ScrollbarControlCscrollbarIDC_EDITlm_EditControlCEdit,BOOL CSCROLLBARDlg:OnInitDialog() CDialog:OnInitDialog(); ASSERT(IDM_ABOUTBOX ,(2)初始化滚动条,/为该对话框设置图标,当该应用程序的主窗口不是一个对话框时,程序将自动设置图标 SetIcon(m_hIcon, TRUE);/ Set big icon SetIcon(m_hIcon, FALSE);/ Set small icon m_Scrollbar.SetScrollRa
6、nge(0,20); m_Scrollbar.SetScrollPos(10); char sPos10; itoa(m_Scrollbar.GetScrollPos(),sPos,10);/数值转成字符 m_Edit.SetSel(0,-1); m_Edit.ReplaceSel(sPos); UpdateData(FALSE); return TRUE;/return TRUE unless you set the focus to a control,(3)给滚动条消息添加代码,void CSCROLLBARDlg:OnVScroll(UINT nSBCode, UINT nPos, C
7、ScrollBar* pScrollBar) char sPos10; int iNowPos; switch(nSBCode) if(pScrollBar=,case SB_LINEUP:/单击滚动条向上的箭头iNowPos=m_Scrollbar.GetScrollPos();iNowPos=iNowPos-1;if(iNowPos20) iNowPos=20;m_Scrollbar.SetScrollPos(iNowPos);itoa(m_Scrollbar.GetScrollPos(),sPos,10);m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(sPo
8、s); break;,case SB_PAGEUP:/单击滚动条上箭头与滚动块之间的区域iNowPos=m_Scrollbar.GetScrollPos();iNowPos=iNowPos-3;if(iNowPos0)iNowPos=0;m_Scrollbar.SetScrollPos(iNowPos);itoa(m_Scrollbar.GetScrollPos(),sPos,10);m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(sPos); break; CDialog:OnVScroll(nSBCode, nPos, pScrollBar);,(4) 给Exi
9、t按钮连接代码,void CSELECTBOXDlg:OnExitButton() OnOK();,(5) 给Up按钮连接代码,void CSCROLLBARDlg:OnUpButton() m_Scrollbar.SetScrollPos(0);m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(0);,(6) 给 Down按钮添加代码,void CSCROLLBARDlg:OnDownButton() m_Scrollbar.SetScrollPos(20);m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(20);,(7) 给Reset按钮添加代码,void CSCROLLBARDlg:OnResetButton() m_Scrollbar.SetScrollPos(10);m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(10);,(8)将编辑框设置为只读的,在此应用中,编辑框只显示,不编辑,其属性应为只读。,2018/7/19,21,(第十三章)完,2018/7/19,22,第13-14章课后练习题,编写一个程序,用含有按钮和滚动条等控件的三个分组框,实现功能包括:控制显示日期和时间;选择加或减运算,并显示数据;滚动条输入数据;注5月28日前完成,