第5章 文本与字体 2019/4/25 面向对象与可视化 程序设计 --Visual C++ 编程 主讲教师: 唐 龙教授 (计算机科学与技术系) 黄维通博士 (计算机与信息管理中心) 清 华 大 学 2001年2月 2019/4/25 Huang Weitong
第5章 文本与字体 2019/4/25 第十三章 滚动条类及其应用 2019/4/25 Huang Weitong
内容提要 滚动条类简介 滚动条类控件的应用 2019/4/25
第5章 文本与字体 2019/4/25 §13.1. 滚动条类简介 2019/4/25 Huang Weitong
1. 滚动条和滚动条类 滚动条是可视化的交互式控件,它包括一个滑块、滚动条的两端的按钮等。 两种不同的滚动条 第5章 文本与字体 2019/4/25 1. 滚动条和滚动条类 滚动条是可视化的交互式控件,它包括一个滑块、滚动条的两端的按钮等。 两种不同的滚动条 滚动条控件——由用户创建、管理和释放的 属于窗口的滚动条——由该窗口创建、管理和释放的。 作为任何一个窗口的子控件,滚动条可以通过通知代码来创建,但也可以用对话框资源模板来创建。 Huang Weitong
滚动条类Cscrollbar是由CWnd类直接派生的。
2.CScrollBar类的创建与初始化 CScrollBar::pMyScroll=new CScrollBar; 关键字new和构造函数CScrollBar::CScrollBar() 为一个 ScrollBar对象分配一个实例 CScrollBar::pMyScroll=new CScrollBar; 初始化CScrollBar对象,将一个Windows滚动条赋予它,并用CScroll::Create()方法设置参数和样式 BOOL Create(DWORD dwStyle, //滚动条窗口的样式 const RECT& rect,//表示控件的大小和位置 CWnd *pParentWnd,//指向控件所属窗口的指针 UINT nID); //父窗口的标识
3.滚动条的设置 调用CScrollBar::SetScrollRange()设置滚动条控件范围。 例如,设置滚动范围为-100到100的垂直滚动条 pMyScroll->SetScrollRange(SB_VERT,-100,100); 调用SetScrollPos()设置滚动块当前位置。 例如,滚动快的位置在-100到100的中间,即为0的位置 pMyScroller->SetScrollPos(0);
第5章 文本与字体 2019/4/25 §13.1. 滚动条类的应用技术 2019/4/25 Huang Weitong
[例13-1]带滚动条类的应用程序,其界面标题为Application of ScrollBar,滚动条的滚动范围设为0到20,当前值为 10,右编辑框显示当前值。四个按键控制滚动条动作: 单击Up按钮,滚动块移到最上边,编辑框的数字变为0 单击Down按钮,滚动块移到最下边,编辑框的数字变为20; 单击Reset按钮,滚动块移到中间,编辑框的数字变为10 单击Exit按钮,退出应用程序。
单击滚动块与箭头之间的区域。滚动块上移或下移三格,编辑框中的数字加3或减3 单击Reset,滚动块移到中间,编辑框的数字为10 单击Up,滚动块移 到最上边 拖动滚动块。编辑框中的数字随之变化 单击Down,滚动块移到最下边 单击Exit,退出应用程序 单击上/下的箭头,滚动块向上/向下移动一格,编辑框中的数字加1或减1 编辑框显示当前滚动块位置
应用程序的可视化编程 应用程序的代码编程 (1)给滚动条连接变量 ID 变量名 类别 类型 IDC_SCROLLBAR m_Scrollbar Control Cscrollbar IDC_EDITl m_Edit Control CEdit
(2)初始化滚动条 BOOL CSCROLLBARDlg::OnInitDialog() { CDialog::OnInitDialog(); ASSERT((IDM_ABOUTBOX & 0xFFF0)==IDM_ABOUTBOX); //加 “About...”菜单项。 ASSERT(IDM_ABOUTBOX < 0xF000);//IDM_ABOUTBOX应在系统命令范围内 CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu); }
//为该对话框设置图标,当该应用程序的主窗口不是一个对话框时,程序将自动设置图标 SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon m_Scrollbar.SetScrollRange(0,20); m_Scrollbar.SetScrollPos(10); char sPos[10]; 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, CScrollBar* pScrollBar) { char sPos[10]; int iNowPos; switch(nSBCode) { if(pScrollBar==&m_Scrollbar) { case SB_THUMBTRACK: //拖动滚动滑块时 m_Scrollbar.SetScrollPos(nPos); itoa(nPos,sPos,10); m_Edit.SetSel(0,-1); m_Edit.ReplaceSel(sPos); break; case SB_LINEDOWN: //单击滚动条向下的箭头 iNowPos=m_Scrollbar.GetScrollPos(); iNowPos=iNowPos+1; if(iNowPos>20) iNowPos=20; m_Scrollbar.SetScrollPos(iNowPos); itoa(m_Scrollbar.GetScrollPos(),sPos,10);
iNowPos=m_Scrollbar.GetScrollPos(); iNowPos=iNowPos-1; case SB_LINEUP: //单击滚动条向上的箭头 iNowPos=m_Scrollbar.GetScrollPos(); iNowPos=iNowPos-1; if(iNowPos<0) iNowPos=0; m_Scrollbar.SetScrollPos(iNowPos); itoa(m_Scrollbar.GetScrollPos(),sPos,10); m_Edit.SetSel(0,-1); m_Edit.ReplaceSel(sPos); break; case SB_PAGEDOWN: //单击滚动条下箭头与滚动块之间的区域 iNowPos=iNowPos+3; if(iNowPos>20) iNowPos=20;
case SB_PAGEUP: //单击滚动条上箭头与滚动块之间的区域 iNowPos=m_Scrollbar.GetScrollPos(); iNowPos=iNowPos-3; if(iNowPos<0)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) 给Exit按钮连接代码 (5) 给Up按钮连接代码 void CSELECTBOXDlg::OnExitButton() { OnOK(); } (5) 给Up按钮连接代码 void CSCROLLBARDlg::OnUpButton() { m_Scrollbar.SetScrollPos(0); m_Edit.SetSel(0,-1); m_Edit.ReplaceSel("0"); }
(6) 给 Down按钮添加代码 (7) 给Reset按钮添加代码 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)将编辑框设置为只读的 在此应用中, 编辑框只显示, 不编辑,其属 性应为只读。 第5章 文本与字体 2019/4/25 Huang Weitong
(第十三章) 完 2019/4/25
第13-14章课后练习题 编写一个程序,用含有按钮和滚动条等控件的三个分组框,实现功能包括: [注]5月28日前完成 控制显示日期和时间; 选择加或减运算,并显示数据; 滚动条输入数据; [注]5月28日前完成 2019/4/25