第13章制作含滚动条的用程序_第1页
第13章制作含滚动条的用程序_第2页
第13章制作含滚动条的用程序_第3页
第13章制作含滚动条的用程序_第4页
第13章制作含滚动条的用程序_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第1313章章 制作含滚动条的应用程序制作含滚动条的应用程序 滚动条是一个交互式的、高度可视化的控件,它包括一滚动条是一个交互式的、高度可视化的控件,它包括一个滑块、滚动条的两端的按钮等。个滑块、滚动条的两端的按钮等。滚动条控件与属于窗口的滚动条是不一样的滚动条控件与属于窗口的滚动条是不一样的处于窗口的滚处于窗口的滚动条是由该窗动条是由该窗口创建、管理口创建、管理和释放的和释放的滚动条控件是滚动条控件是由用户创建、由用户创建、管理和释放的管理和释放的13.1 滚动条类简介滚动条类简介作为任何一个窗口的子控件,滚动条可以通过通知代码来创作为任何一个窗口的子控件,滚动条可以通过通知代码来创建,但

2、也可以用对话框资源模板来创建建,但也可以用对话框资源模板来创建。表 13-1 cscrollbar 类的方法方法说明enablescrollbar()使滚动条的一个或两个箭头有效或无效getscrollinfo()获得滚动条的消息getscrolllimit()获得滚动条的范围getscrollpos()获得滚动条当前的位置getscrollrange()获得制定滚动条的当前最大和最小滚动位置setscrollinfo()设置滚动条的消息setscrollpos()设置滚动块当前的位置setscrollrange()设置制定滚动条的最大和最小滚动位置showscrollbar()显示或隐藏滚动

3、条创建与初始化滚动条类创建与初始化滚动条类创建创建cscrollbar对象的一般步骤对象的一般步骤(1) 用用c+关键字关键字new和构造函数和构造函数cscrollbar:cscrollbar()为一个为一个scrollbar对象分配一个实例对象分配一个实例(2) 初始化初始化cscrollbar对象,将一对象,将一个个windows滚动条赋予它,并用滚动条赋予它,并用cscroll:create()方法设置参数和方法设置参数和样式样式分配一个滚动条控件对象并返回指向该对象的指针分配一个滚动条控件对象并返回指向该对象的指针cscrollbar:pmyscroll=new cscrollbar

4、cscrollbar:pmyscroll=new cscrollbar调用调用cscrollbar:create()方法初始化指针方法初始化指针bool create(bool create(dword dwstyledword dwstyle, ,const rect& rectconst rect& rect, ,cwnd cwnd * *pparentwndpparentwnd, ,uint niduint nid););滚动条窗滚动条窗口的样式口的样式表示控件的表示控件的大小和位置大小和位置指向控件所属指向控件所属窗口的指针窗口的指针父窗口与滚动父窗口与滚动条通信的标识

5、条通信的标识在设置滚动条控件时,要通过在设置滚动条控件时,要通过cscrollbar:setscrollrange()设置其范围。设置其范围。例如,设置滚动范围为例如,设置滚动范围为-100到到100的垂直滚动条:的垂直滚动条:pmyscroll-setscrollrange(sb_vert,-100,100);pmyscroll-setscrollrange(sb_vert,-100,100);在设置了范围后,还要通过在设置了范围后,还要通过setscrollpos()设置滚动块当前位置。设置滚动块当前位置。例如,滚动块的位置在例如,滚动块的位置在-100到到100的中间,即为的中间,即为0

6、的位置:的位置:pmyscroller-setscrollpos(0);pmyscroller-setscrollpos(0);标题为标题为application of scrollbar滚动条的滚滚动条的滚动范围设为动范围设为0到到20单击滚动块与单击滚动块与箭头之间的区箭头之间的区域。滚动块上域。滚动块上移或下移三格,移或下移三格,编辑框中的数编辑框中的数字加字加3 或减或减3单击向上或向下的单击向上或向下的箭头,滚动块向上箭头,滚动块向上或向下移动一格,或向下移动一格,编辑框中的数字加编辑框中的数字加1或减或减1按住滚动块上按住滚动块上下拖动下拖动,编辑编辑框中的数字随框中的数字随之变化

7、之变化当前值为当前值为10单击单击up按钮,按钮,滚动块移到最滚动块移到最上边,编辑框上边,编辑框的数字变为的数字变为0单击单击down按钮按钮,滚动块移到最,滚动块移到最下边,编辑框的下边,编辑框的数字变为数字变为20单击单击reset 按按钮,滚动块移钮,滚动块移到中间,编辑到中间,编辑框的数字变为框的数字变为10单击单击exit 按钮,退按钮,退出应用程出应用程序序13.2 滚动条类编程实例滚动条类编程实例1. 应用程序的可视化编程部分应用程序的可视化编程部分 对话框中各个对象的属性对话框中各个对象的属性 对象对象 id caption 滚动条滚动条 idc_xcrollbar 无无 编

8、辑框编辑框 idc_edit1 无无 up 按钮按钮 idc_up_button &up down 按钮按钮 idc_down_button &down reset 命令按钮命令按钮 idc_reset_button &reset exit 按钮按钮 idc_exit_button &exit 2. 应用程序的代码编程部分应用程序的代码编程部分(1 )给滚动条连接变量)给滚动条连接变量id变量名变量名类别类别 类型类型idc_scrollbar m_scrollbarcontrolcscrollbaridc_editlm_editcontrolceditbool

9、 cscrollbardlg:oninitdialog()bool cscrollbardlg:oninitdialog() cdialog:oninitdialog(); cdialog:oninitdialog(); / /将将“about.”about.”菜单项加入到系统菜单中。菜单项加入到系统菜单中。 /idm_aboutbox/idm_aboutbox必须在系统命令范围内。必须在系统命令范围内。 assert(idm_aboutbox & 0 xfff0) = idm_aboutbox);assert(idm_aboutbox & 0 xfff0) = idm_abo

10、utbox); assert(idm_aboutbox 0 xf000); assert(idm_aboutbox appendmenu(mf_separator); psysmenu-appendmenu(mf_separator); psysmenu-appendmenu(mf_string,idm_aboutbox,straboutmenu); psysmenu-appendmenu(mf_string,idm_aboutbox,straboutmenu); (2)初始化滚动条)初始化滚动条/为该对话框设置图标,当该应用程序的主窗口不是一个对话框为该对话框设置图标,当该应用程序的主窗口不

11、是一个对话框时,程序将自动设置图标时,程序将自动设置图标 seticon(m_hicon, true);seticon(m_hicon, true);/ set big icon/ set big icon seticon(m_hicon, false); seticon(m_hicon, false);/ set small icon/ set small icon m_scrollbar.setscrollrange(0,20); m_scrollbar.setscrollrange(0,20); m_scrollbar.setscrollpos(10); m_scrollbar.sets

12、crollpos(10); char spos10; char spos10; itoa(m_scrollbar.getscrollpos(),spos,10);/ itoa(m_scrollbar.getscrollpos(),spos,10);/数值转成字符数值转成字符 m_edit.setsel(0,-1);m_edit.setsel(0,-1); m_edit.replacesel(spos); m_edit.replacesel(spos); updatedata(false); updatedata(false);return true; / return true unless

13、you set the focus to return true; / return true unless you set the focus to a controla control (3 )给滚动条消息添加代码)给滚动条消息添加代码void cscrollbardlg:onvscroll(uint nsbcode, uint npos,void cscrollbardlg:onvscroll(uint nsbcode, uint npos, cscrollbar cscrollbar* * pscrollbar) pscrollbar) char spos10; int inowpos

14、; char spos10; int inowpos; switch(nsbcode) switch(nsbcode) if(pscrollbar=&m_scrollbar) if(pscrollbar=&m_scrollbar) case sb_thumbtrack: case sb_thumbtrack:/拖动滚动滑块时拖动滚动滑块时m_scrollbar.setscrollpos(npos);m_scrollbar.setscrollpos(npos);itoa(npos,spos,10);itoa(npos,spos,10);m_edit.setsel(0,-1);m_

15、edit.setsel(0,-1); m_edit.replacesel(spos); break;m_edit.replacesel(spos); break; case sb_linedown: case sb_linedown:/单击滚动条向下的箭头单击滚动条向下的箭头inowpos=m_scrollbar.getscrollpos();inowpos=m_scrollbar.getscrollpos();inowpos=inowpos+1;inowpos=inowpos+1;if(inowpos20) inowpos=20;if(inowpos20) inowpos=20;m_scro

16、llbar.setscrollpos(inowpos);m_scrollbar.setscrollpos(inowpos);itoa(m_scrollbar.getscrollpos(),spos,10);itoa(m_scrollbar.getscrollpos(),spos,10);m_edit.setsel(0,-1);m_edit.setsel(0,-1); m_edit.replacesel(spos); break;m_edit.replacesel(spos); break; case sb_lineup: case sb_lineup:/单击滚动条向上的箭头单击滚动条向上的箭头

17、inowpos=m_scrollbar.getscrollpos();inowpos=m_scrollbar.getscrollpos();inowpos=inowpos-1;inowpos=inowpos-1;if(inowpos0)if(inowpos20)if(inowpos20)inowpos=20;inowpos=20;m_scrollbar.setscrollpos(inowpos);m_scrollbar.setscrollpos(inowpos);itoa(m_scrollbar.getscrollpos(),spos,10);itoa(m_scrollbar.getscrol

18、lpos(),spos,10);m_edit.setsel(0,-1);m_edit.setsel(0,-1);m_edit.replacesel(spos); m_edit.replacesel(spos); break;break;case sb_pageup:case sb_pageup:/单击滚动条上面的箭头与滚动块之间的区域单击滚动条上面的箭头与滚动块之间的区域inowpos=m_scrollbar.getscrollpos();inowpos=m_scrollbar.getscrollpos();inowpos=inowpos-3;inowpos=inowpos-3;if(inow

19、pos0)if(inowposappwizard step1-dialog based-(1)appwizard-appwizard step1-dialog based-其余默认其余默认(2)(2)打开对话框编辑器打开对话框编辑器 - - 将将“确定确定”和和“取消取消”通过通过properties“properties“开始开始” ” 和和“退出退出”,-将将“确定确定”按钮按钮idid改为改为id_beginid_begin(3)(3)在在controlcontrol工具条上选工具条上选picturepicture按钮按钮-创建一个空的图片框创建一个空的图片框-insertinsert菜

20、单菜单-resourceresource菜单项菜单项-在在resource typeresource type框中选中框中选中bitmapbitmap选项选项-import-import-加入加入bmpbmp文件文件-在在propertiesproperties中的中的typetype中选位图中选位图- - -接受默认的接受默认的idid值值-图片框中出现位图图片框中出现位图(4 4)在)在controlcontrol工具条中选择工具条中选择list controllist control按钮按钮-画一个列表框控画一个列表框控件件-在其上单击鼠标右键选择在其上单击鼠标右键选择propertyp

21、roperty菜单项菜单项-将将idid改为改为idc_listctrl1idc_listctrl1,注意还要选中,注意还要选中disableddisabled选项选项(5) (5) 在在controlcontrol工具条中选择工具条中选择progressprogress按钮按钮-画一个进度条控件画一个进度条控件-在其上单击鼠标右键选择在其上单击鼠标右键选择propertyproperty菜单项菜单项-将将idid改为改为idc_progress1idc_progress1,注意还要选中注意还要选中disableddisabled选项。选项。(6) insert(6) insert菜单菜单-r

22、esource-resource菜单项菜单项-resource type-resource type列表框中的列表框中的iconicon项项-单击单击importimport按钮按钮-加入加入resres文件夹中的文件夹中的arrow.icoarrow.ico,empty.icoempty.ico,finished.icofinished.ico三个文件三个文件-将将idid值改为值改为idi_icon_arrow, idi_icon_arrow, idi_icon_empty, idi_icon_finishedidi_icon_empty, idi_icon_finished给控件连接的变

23、量给控件连接的变量控件控件idid变量类型变量类型变量名变量名idc_listctrl1idc_listctrl1clistctrlclistctrlm_listctrl1m_listctrl1idc_progress1idc_progress1cprogressctrlcprogressctrlm_progressm_progress加入的变量加入的变量变量类型变量类型变量名变量名说明说明hiconhiconhicon7hicon7存储图像列表中各图标句柄的数组存储图像列表中各图标句柄的数组cstringcstringprocname7procname7 存储列表控件中字符信息存储列表控件中

24、字符信息cimagelistcimagelistm_imagelistm_imagelist 图像列表对象图像列表对象intintm_ncurprocm_ncurproc当前操作过程的号码当前操作过程的号码intintm_nprogressm_nprogress 进度条的位置进度条的位置classviewclassview卡卡-在在13_5dlg13_5dlg类上类上单击鼠标右键单击鼠标右键-add member -add member variablevariable打开打开13_5dlg.cpp13_5dlg.cpp文件文件, ,在构造函数中加入初始化变量的代码:在构造函数中加入初始化变量

25、的代码:/初始化变量初始化变量m_ncurproc = 1;m_ncurproc = 1;m_nprogress = 0;m_nprogress = 0;/列表框中的操作的名称列表框中的操作的名称procname0= ;procname0= ;procname1= checking partition table;procname1= checking partition table;procname2= checking boot record;procname2= checking boot record;procname3= checking file system;procname3=

26、 checking file system;procname4= checking directories;procname4= checking directories;procname5= checking compressed disks;procname5= checking compressed disks;procname6= checking disk surface;procname6= checking disk surface;在初始化函数在初始化函数oninitdialog()oninitdialog()中加入代码:中加入代码:int n;int n;m_imagelis

27、t.create(16,16,0,7,7);/m_imagelist.create(16,16,0,7,7);/创建图像列表对象,图标大小为创建图像列表对象,图标大小为16161616hicon0 = afxgetapp()-loadicon(idi_icon_arrow);hicon0 = afxgetapp()-loadicon(idi_icon_arrow); /加载图标加载图标hicon1 = afxgetapp()-loadicon(idi_icon_empty);hicon1 = afxgetapp()-loadicon(idi_icon_empty);hicon2 = afxge

28、tapp()-loadicon(idi_icon_empty);hicon2 = afxgetapp()-loadicon(idi_icon_empty);hicon3 = afxgetapp()-loadicon(idi_icon_empty);hicon3 = afxgetapp()-loadicon(idi_icon_empty);hicon4 = afxgetapp()-loadicon(idi_icon_empty);hicon4 = afxgetapp()-loadicon(idi_icon_empty);hicon5 = afxgetapp()-loadicon(idi_icon

29、_empty);hicon5 = afxgetapp()-loadicon(idi_icon_empty);hicon6 = afxgetapp()-loadicon(idi_icon_empty);hicon6 = afxgetapp()-loadicon(idi_icon_empty);for(n=0;n7;n+)for(n=0;n7;n+) m_imagelist.add(hiconn);m_imagelist.add(hiconn);/将图标加入图像列表将图标加入图像列表 /在列表控件中加入图象列表在列表控件中加入图象列表m_listctrl1.setimagelist(&m_

30、imagelist,lvsil_small);m_listctrl1.setimagelist(&m_imagelist,lvsil_small);for(n=0;n7;n+)for(n=0;nloadicon(idi_icon_empty);hicon0 = afxgetapp()-loadicon(idi_icon_empty); /加载图标加载图标m_imagelist.replace(0,hicon0);m_imagelist.replace(0,hicon0);/替换原有的图标替换原有的图标m_listctrl1.deleteitem(0);m_listctrl1.delet

31、eitem(0);/从列表控件中删除一项从列表控件中删除一项m_listctrl1.insertitem(0,(lpctstr)procname0,0);m_listctrl1.insertitem(0,(lpctstr)procname0,0); /列表中加入一项列表中加入一项/改变第一项的图标改变第一项的图标hicon1 = afxgetapp()-loadicon(idi_icon_arrow);hicon1 = afxgetapp()-loadicon(idi_icon_arrow);m_imagelist.replace(1,hicon1);m_imagelist.replace(1

32、,hicon1);m_listctrl1.deleteitem(1);m_listctrl1.deleteitem(1);m_listctrl1.insertitem(1,(lpctstr)procname1,1);m_listctrl1.insertitem(1,(lpctstr)procname1,1);getdlgitem(id_begin)-enablewindow(0); /getdlgitem(id_begin)-enablewindow(0); /使使“开始开始”按钮不可用按钮不可用 调用函数调用函数settimer()settimer()创建定时器,该定时器每隔创建定时器,该定

33、时器每隔0.010.01秒发秒发送送wm_timerwm_timer消息。消息。 调用函数调用函数loadicon()loadicon()加载空图标,然后调用函数加载空图标,然后调用函数replace()replace()替换图象列表中的题头的图标。替换图象列表中的题头的图标。 为了改变列表控件中显示的图标,还需要调用函数为了改变列表控件中显示的图标,还需要调用函数deleteitem()deleteitem()从列表控件中删除第从列表控件中删除第0 0项,并调用函数项,并调用函数insertitem()insertitem()在列表控件中加入对应空图标的一项。在列表控件中加入对应空图标的一项

34、。 同理可以改变第一项的图标。最后调用函数同理可以改变第一项的图标。最后调用函数enablewindow()enablewindow()使使“开始开始”按钮不可用。按钮不可用。 下述代码中首先根据当前操作号改变进度条的位置,并调下述代码中首先根据当前操作号改变进度条的位置,并调用函数用函数setpos()setpos()设置进度条的位置。当设置进度条的位置。当m_nprogress300m_nprogress300时,表时,表明当前操作已完成,跟前面的操作过程相同,调用函数改变当明当前操作已完成,跟前面的操作过程相同,调用函数改变当前操作项前的图标为一个对号。然后将进度条位置清零,操作前操作项

35、前的图标为一个对号。然后将进度条位置清零,操作号码加号码加1 1,此时还需要调用函数将当前操作前的图标改为一个箭,此时还需要调用函数将当前操作前的图标改为一个箭头。如果当前操作号大于头。如果当前操作号大于6 6表明所有的操作已完成,调用函数表明所有的操作已完成,调用函数killtimer()killtimer()删除定时器,最后调用函数删除定时器,最后调用函数messgebox()messgebox()弹出一个弹出一个消息对话框,显示操作的结果。消息对话框,显示操作的结果。 在在ontimer()ontimer()函数中加入代码如下:函数中加入代码如下:m_nprogress+=int(6.0/m_ncurproc);m_nprogress+=int(6.0/m_ncurproc);/进度条位置增加进度条位置增加m_progress.setpos(m_nprogress);m_progress.setpos(m_nprogress);if(m_nprogress=300)if(m_nprogress=300) / /改变刚完成的操作项的图标改变刚完成的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论