资源预览内容
第1页 / 共22页
第2页 / 共22页
第3页 / 共22页
第4页 / 共22页
第5页 / 共22页
第6页 / 共22页
第7页 / 共22页
第8页 / 共22页
第9页 / 共22页
第10页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第13章 制作含滚动条的应用程序,滚动条是一个交互式的、高度可视化的控件,它包括一个滑块、滚动条的两端的按钮等。,滚动条控件与属于窗口的滚动条是不一样的,处于窗口的滚动条是由该窗口创建、管理和释放的,滚动条控件是由用户创建、管理和释放的,13.1 滚动条类简介,作为任何一个窗口的子控件,滚动条可以通过通知代码来创建,但也可以用对话框资源模板来创建。,创建与初始化滚动条类,在设置滚动条控件时,要通过CScrollBar:SetScrollRange()设置其范围。 例如,设置滚动范围为-100到100的垂直滚动条: pMyScroll-SetScrollRange(SB_VERT,-100,100);,在设置了范围后,还要通过SetScrollPos()设置滚动块当前位置。 例如,滚动块的位置在-100到100的中间,即为0的位置: pMyScroller-SetScrollPos(0);,13.2 滚动条类编程实例,1. 应用程序的可视化编程部分,2. 应用程序的代码编程部分,(1 )给滚动条连接变量,ID 变量名 类别 类型 IDC_SCROLLBAR m_Scrollbar Control Cscrollbar IDC_EDITl m_Edit Control CEdit,BOOL CSCROLLBARDlg:OnInitDialog() CDialog:OnInitDialog(); /将“About.”菜单项加入到系统菜单中。 /IDM_ABOUTBOX必须在系统命令范围内。 ASSERT(IDM_ABOUTBOX ,(2)初始化滚动条,/为该对话框设置图标,当该应用程序的主窗口不是一个对话框时,程序将自动设置图标 SetIcon(m_hIcon, TRUE); / Set big icon SetIcon(m_hIcon, FALSE); / Set small icon m_Scrollbar.SetScrollRange(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, CScrollBar* pScrollBar) char sPos10; int iNowPos; switch(nSBCode) if(pScrollBar=,case SB_PAGEDOWN: /单击滚动条下面的箭头与滚动块之间的区域 iNowPos=m_Scrollbar.GetScrollPos(); iNowPos=iNowPos+3; if(iNowPos20) iNowPos=20; m_Scrollbar.SetScrollPos(iNowPos); itoa(m_Scrollbar.GetScrollPos(),sPos,10); m_Edit.SetSel(0,-1); m_Edit.ReplaceSel(sPos); 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 )给Exit按钮连接代码,void CSELECTBOXDlg:OnExitButton() / 在此处加入控件通知句柄代码 /编写代码开始 OnOK(); /编写代码结束 ,(5 )给Up按钮添代码,void CSCROLLBARDlg:OnUpButton() / TODO:在此处加入控件通知句柄代码 /代码编写开始 m_Scrollbar.SetScrollPos(0); m_Edit.SetSel(0,-1); m_Edit.ReplaceSel(“0“); /代码编写结束 ,(6) 给 Down按钮添加代码,void CSCROLLBARDlg:OnDownButton() / TODO: 在此处加入通知句柄代码 m_Scrollbar.SetScrollPos(20); m_Edit.SetSel(0,-1); m_Edit.ReplaceSel(“20“); ,(7 )给Reset按钮添加代码,void CSCROLLBARDlg:OnResetButton() / TODO: 在此处加入通知句柄代码 m_Scrollbar.SetScrollPos(10); m_Edit.SetSel(0,-1); m_Edit.ReplaceSel(“10“); ,创建如图界面,单击“开始”按钮时,按照顺序执行各项操作,在执行完的操作前加对号标志,在正在进行的操作前加箭头标志。,(1)AppWizardAppWizard Step1Dialog based其余默认 (2)打开对话框编辑器 将“确定”和“取消”通过Properties“开始” 和“退出”,将“确定”按钮ID改为ID_BEGIN,(3)在Control工具条上选Picture按钮-创建一个空的图片框-Insert菜单-Resource菜单项-在Resource type框中选中Bitmap选项-Import-加入bmp文件-在Properties中的type中选位图-接受默认的ID值-图片框中出现位图,(4)在Control工具条中选择List Control按钮-画一个列表框控件-在其上单击鼠标右键选择Property菜单项-将ID改为IDC_LISTCTRL1,注意还要选中Disabled选项,(5) 在Control工具条中选择Progress按钮画一个进度条控件-在其上单击鼠标右键选择Property菜单项-将ID改为IDC_PROGRESS1,注意还要选中Disabled选项。,(6) Insert菜单Resource菜单项Resource type列表框中的Icon项单击Import按钮加入Res文件夹中的arrow.ico,empty.ico,finished.ico三个文件将ID值改为IDI_ICON_ARROW, IDI_ICON_EMPTY, IDI_ICON_FINISHED,给控件连接的变量 控件ID 变量类型 变量名 IDC_LISTCTRL1 ClistCtrl m_ListCtrl1 IDC_PROGRESS1 CprogressCtrl m_Progress,加入的变量 变量类型 变量名 说明 HICON hIcon7 存储图像列表中各图标句柄的数组 CString ProcName7 存储列表控件中字符信息 CImageList m_ImageList 图像列表对象 int m_nCurProc 当前操作过程的号码 int m_nProgress 进度条的位置,ClassView卡 在13_5Dlg类上 单击鼠标右键 Add member variable,打开13_5Dlg.cpp文件,在构造函数中加入初始化变量的代码: /初始化变量 m_nCurProc = 1; m_nProgress = 0; /列表框中的操作的名称 ProcName0=“ “; ProcName1=“ Checking Partition Table“; ProcName2=“ Checking Boot Record“; ProcName3=“ Checking File System“; ProcName4=“ Checking Directories“; ProcName5=“ Checking Compressed Disks“; ProcName6=“ Checking Disk Surface“;,在初始化函数OnInitDialog()中加入代码: int n; m_ImageList.Create(16,16,0,7,7);/创建图像列表对象,图标大小为1616 hIcon0 = AfxGetApp()-LoadIcon(IDI_ICON_ARROW); /加载图标 hIcon1 = AfxGetApp()-LoadIcon(IDI_ICON_EMPTY); hIcon2 = AfxGetApp()-LoadIcon(IDI_ICON_EMPTY); hIcon3 = AfxGetApp()-LoadIcon(IDI_ICON_EMPTY); hIcon4 = AfxGetApp()-LoadIcon(IDI_ICON_EMPTY); hIcon5 = AfxGetApp()-LoadIcon(IDI_ICON_EMPTY); hIcon6 = AfxGetApp()-LoadIcon(IDI_ICON_EMPTY); for(n=0;n7;n+) m_ImageList.Add(hIconn); /将图标加入图像列表 /在列表控件中加入图象列表 m_ListCtrl1.SetImageList( /设置进度条的位置,(7)单击“开始”按钮,按照顺序执行列表框中的各项操作,可以通过设置定时器的办法来完成这项功能。单击Ctrl+W打开ClassWizard对话框,选择Message Maps卡,映射如下的消息处理函数。 ID 消息类型 消息处理函数 ID_BEGIN BN_CLICKED OnBegin() CMy13_5Dlg WM_TIMER OnTimer() 在OnBegin()函数中加入代码如下: m_nCurProc=1; m_nProgress=0; SetTimer(1,10,NULL); /设置定时器 /改变题头的图标 hIcon0 = AfxGetApp()-LoadIcon(IDI_ICON_EMPTY); /加载图标 m_ImageList.Replace(0,hIcon0); /替换原有的图标 m_ListCtrl1.DeleteItem(0); /从列表控件中删除一项 m_ListCtrl1.InsertItem(0,(LPCTSTR)ProcName0,0); /列表中加入一项 /改变第一项的图标 hIcon1 = AfxGetApp()-LoadIcon(IDI_ICON_ARROW); m_ImageList.Replace(1,hIcon1); m_ListCtrl1.DeleteItem(1); m_ListCtrl1.InsertItem(1,(LPCTSTR)ProcName1,1); GetDlgItem(ID_BEGIN)-EnableWindow(0); /使“开始”按钮不可用,调用函数SetTimer()创建定时器,该定时器每隔0.01秒发送WM_TIMER消息。 调用函数Loa
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号