MFC编程基础-1-基于对话框的Windows应用程序_第1页
MFC编程基础-1-基于对话框的Windows应用程序_第2页
MFC编程基础-1-基于对话框的Windows应用程序_第3页
MFC编程基础-1-基于对话框的Windows应用程序_第4页
MFC编程基础-1-基于对话框的Windows应用程序_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

1、第1章基于对话框的windows应用程序1. 简介windows编程的m种方法,即windows api编程和mfc编程。2. 基于对话框的应用程序的创建过程:建立®于对话框的mfc应用程序框架;放置控件;设置控件属性;为控件连接变量,即为控件命名;添加并且编写消息处理函数。3. 常用基本控件:静态文木框:主要用来显示文木信息,不能接受用户输入命令按钮:是常见的、应用敁广泛的一种控件。在程序执行期间,当单击某个命 令按钮后就会执行相应的消息处理函数。编辑柅:是一个文本编辑区域,用户可以在该区域输入、编辑和显示正文内容。框架:将一组相关的控件框起来,达到标识一组控件的作用。单选按钮:用

2、户在一组单选按钮中最多只能选择一项。当某一项被选定后,其他选项自动变成未选状态。 s选框:列出了 nh共选择的项,用户可根据需耍选择其中的一项或多项,各选项之 间的状态互不相关。列表樞:通过显示多个选项,供用户选择,达到与用户对话的0的。组合框:组合了编辑框和列表框的特性而形成的一种控件。在列表框中列出可供用户选择的项,当用户选定某项后,该项内容自动装入编辑框中。滚动条:通常附在对话框上用来协助观察数据或确定位置,也讨以用来作为数据输入的工貝-。i. 1windows编程基础windows俺用程序的主要特点是:具冇标准的图形用户界谢。 ft有与硬件无关的特性。采用“消息传递,事件驱动”的运行机

3、制。川visual c+编写windows应川程序主要舍两种方法:一是使川windows提供的j.、v用程序接ui ( application programming interface , api )函数;二是使用 microsoft 提 供的微软雉础炎(microsoft foundation class , mfc )。1.1.1 windows an 编程从本质上来说,api足windows系统支持的函数定义、参数定义和消息格式的集合, 共有上千个标准的api w数可供应川程序调川。调川windows api函数的方法与调川c 语言库函数的方法基本相同。下面通过一个简单的实例來说明wi

4、ndows api编程足如何调川ah函数的。# include "windows.h"int apientry winmain(hinstance hlnstancc, hinstance hprcvinstancc,lpstr lpcmdline, int ncmdshow)messagebox ( null;*这足-个简单的windows应用程序! "/api阑数调川示 例",mb_ok);return 0;)apimuhsm这是一个简单的windows k、/:用程序。windows应用程序的主函数是winmain(),不 是main()函数。函数

5、体屮调用了 windows api函数messagebox(),弹出如图所示的对 话框。在直接使用api函数进行windows编程吋,程序员不仅需要熟记一大堆常用的api 函数,而且还要对windows操作系统有深入的了解,编写人景的代码。用这种方式即使是 开发一个很简单的用程序也需要人景的工作,直接用api函数进行编程是需要极人的耐 心和丰富的编程经验的。1.1.2 mfc 编程mfc是visual c+的核心。虽然在windows应用程序中4以直接调用api函数, 但是一般不经常直接调用,而是从mfc类创建对象外调用属于这些对象的成员函数。 mfc是microsoft公司提供的用来编写wi

6、ndows应用程序的c+类库,mfc人约有 200多个类,可以分成两种:一是cobject类的派生类,它们以层次结构的形式组织起来, 几乎甸个了戾次结构都与一个具体的windows实体对俺;二是非cobject派生:类,这些都 是独立的类,如表示点的cpoint类,表示矩形的crect类。在visual c+中,可以创建以下3类典型的windows应用程序,它们都是通过mfc appwizard(exe)(以卜简称 appwizard ) a导创建的:(1) 基于对话框的应用程序:这类程序适合于文档较少而交互操作较多的应用场合, 如windows ft带的计算器程序。(2) 单文档界而(sdi

7、 )应用程序:这类程序一次只能打开一个文档,如windows fi 带的notepad程序。(3)多文档界而(mdi )应用程序:这类程序可以m时打开多个文档并进行处理, 处理的过程屮很界易地进行切换,如microsoft word。1.2基于对话框的windows应用程序对话框是一种特殊类型的窗口,绝大多数windows程序都通过对话框与用户进行交互。 在visual c+41,对话框既可以单独组成一个简单的应用程序,又可以成为文档/视图结构 程序的资源。1.2.1简单应用程序实例创建对话框程序的步骤:(1)建立®于对话框的mfc应用程序框架;(2)放置控件;(3)设置控件属性;(

8、4)为控件连接变虽,即为控件命名;(5)添加并且编写消息处理函数。【例1.1】编写一个如图所示的应用程序。若单击“复制”按钮,则把上面的编辑框巾 的内容复制到k面的编辑框中;若单击“结朿”按钮,则退出程序的运行。sffibph程序的创建过程:(1)建立基于对话柅的mfc应用程序框架。 选择“文件i新建”命令; 在“工程”选项卡巾,选定“ mfcappwizard(exe) ”,输入工程名称,选择“确定”。 选定“ d基木对话”,即创建基于对话框的应用程序,选择“完成”。(2)放置控件删除原柯的控件。放置所需的控件:两个编辑框和两个命令按钮。方法是:先单击控件工其栏上的控 件阁标选择所需的控件,

9、然后在对诂枇设计界而上按住鼠标左键拖拉出所需要的大小后释 放。(3)设置控件属性选定控件,在其快捷菜单中选择“属性”命令,在弹出如阁所示的对话枢巾进行设置。上而编辑框的属性设置为:定定定 选选选“ multiline w复选框,编辑框中可以输入多行文本。“ vertical scroll ”和“ auto vscroll ”,编辑框将有垂直滚动条。“ want return ”。下而编辑框属性的设置与上面编樹框基木一样,只是可以不选定“ want return "owl i ! imuc从图屮可以看到编辑框的id为idc_edit1,这是该控件的标识。任何一个控件都 有一个id,某些

10、函数需要通过id对控件进行操作。(4)连接变景为控件连接变景就是为控件起一个名称。毎一个控件都是一个对象,调用mfc类库 中的函数都是通过对象来实现的。为idc_edit1连接变量m_el的步骤为: 在idc_edit1编辑框的快捷菜单屮选“建立类句异”,弹出“ mfc classwiard ” 对话框。 在“ member variables ” 中,选定“ idc_edit1 ”,再选择“ add variable ” 命令。 在“ add member variable ”对is椎中输入以卜的数据:member variable name (内存变量名):m_e 1 ;category

11、(类别):control ;variable type (类型):cedit用同样的方法再为idc_edit2连接一个变量m_e2。(5)添加并且编写消息处理函数。木例要求单击“复制”按钮后上面编辑框中的内界复制到下血的编辑框屮。也就是说, 在程序运行吋,在“复制”按钮上发生单击事件后,windows向对诘框发出了一个 bn_clicked消息,ctestdlg类应有一个处理该消息的函数。添加和编写这个消息处理蚋数的过程是: 双击“复制”按钮,弹出的“ add member function ”对话框,输入函数名(缺省 函数名为onbuttonl ),选择“确定”按钮后,添加了一个空函数。另一

12、个方法是在“ mfc classwiard ”对话框“ message maps ”选项卡中,选定 1dc_button 1 和 bn_cl1cked 泊息,然后选择“ add function "按钮即可。添加的空函数如下:void ctestdlg:onbuttonl()/ todo: add your control notification handler code here 为 void ctestdlg:onbuttonl()添加代码 void ctestdlg:onbutton 1 ()/ todo: add your control notification hand

13、ler code here m_el.setsel(o,-l);/选定编辑框m_el中的所有内容m_el.copy(); /把編辑框m_el中选定的内容s制到剪贴板me2.setsel(0,-l); /选定编辑框m_e2中的所有内容m_e2.paste(); /将剪贴板屮内界粘贴到编樹框m_e2屮,好换所有选定的内界用同样的方法为“结束”按钮添加、编写如下的消息处理函数: void ctestdlg:onbutton2()/ todo: add your control notification handler code here cdialog:onok();/返岀对话框程序1.2.2对话框

14、应用程序框架用appwizard创建®于对话框的应用程序框架(假定工程名为test )后,项f1工作 区上增加了一个“ resourceview "选项卞,中间是对话框设计界面,右边是控件工具栏。1. resourceview在visual c+屮,与用户进行交互的对话框界面被认为是一种资源。展开“ dialog ”, 可以看到有一个id为idd_test_dialog的资源,对应屮间的对话框设计界血。不管 在何时,只要双击对话框资源的id,对话框设计界血就会显示在中叫。2. classview在classview屮,如图所示,可以看到生成了 3个类:caboutdlg、c

15、testapp和 ctestdlg。(1) caboutdlg :对应生成的版本信息对话框。(2) ctestdlg :对话框类,从cdialog继承过来的,在程序运行时看到的对话框 就是它的一个具体对象。(3) ctestapp :应用程序类,从cwinapp继承过来,封装了初始化、运行、终 止该程序的代码。3. 对话框设计界血对话框设计界血是进行对话框设计的地方,可以将各种控件放置在这里。4. 控件工具栏控件工其栏上有26个控件图标,可以通过这些图标在对话框上设计出所需的控件。mcmiethexmsmblinl)姐#fldcmnda *thrmkh«m<senlkm wmm

16、cspimttcs&mmnsttoirtgamaft破 wmoom多助ms助ichjbfffrfcmoi-4« abl 口画画 哑囹eu 1£=a u國bktn mwkeaba *«n(imkn» wksnriaiuio wnslbtbo *ammbdscnb«4 m(pn«m)jbkhote) wvttttctmoaatadq wfahib)bmnkhamattepkbi) ip地城邮>mkm4 idhbanedaimlkiaariso do授件工站1.3静态文本框、命令按钮和编辑框静态文本框、命令按钮和编辑框是win

17、dows应用程序中最基本的控件。静态文本框是 cstatic类的对象,命令按钮是cbutton类的对象,编辑框是cedit类的对象。这三个类都是 从cwnd类直接派生來的,具奋cwnd类的全部功能。1.3.1静态文本框静态文本框是蛣简单的控件。它主要用来显示文木信息,不能接受用户输入,一般不盂 要连接变量,也不需要处理消息。静态文本框的重要属性宥:(1) id :所冇静态文本框的缺省id都是idc_static ,般不需要重新设置。(2) 标题:需要.w示的文本信息是在这里设置的。(3) 边框:边柅属性在styles选项卡屮,决定足否带奋边框。1.3.2命令按钮命令按钮是敁常见的、应用敁广泛的

18、一种控件。在程序执行期间,当单击某个命令按钮 后就会执行相应的消息处理蚋数。命令按钮的主要属性是称题属性,该属性川來没a在命令按钮上显示的文本。命令按钮一般不需要连接变量。命令按钮能处理的消息是bn_cl1cked。1.3.3编辑框1. 属性设置编辑枢的属性主要在styles选项卡屮设置。重要属性有:(1) multiline :定义该编辑框为多行文木框。(2) number :限定输入的字符只能是数字字符。(3) border :为控件创建边界。(4) read-only :编辑框成为u读的,禁止用户编辑。2. 成员函数编辑框常川的成员函数见表。此外编辑框还可以使用cwnd类的成员函数。cw

19、nd类的重要成员函数有:(1) 获取编辑中的内界形式 1 : void getwindowtext( cstring& rstring ) const;说明:将编辑框屮的内界复制到cstring类对象rstring中。示例:将编辑框m_e屮的内各复制到cstring类对象ch屮。cstring ch;m_e.getwindowtext(ch);形式 2 : int getwindowtext( lptstr ipszstringbuf, int nmaxcount) const;说明:将编辑框屮的内界复制到ipszstringbuf屮,最多复制nmaxcount个字符。ipszstri

20、ngbuf是字符数组或字符抬针。示例:将编辑框中的内界复制到字符数组ch屮。char ch80;m_e.getwindowtext(ch,80);(2) 设置编辑框中的内容形式:void setwindowtext( lpctstr ipszstring );说明:将ipszstring中的内界替换编辑框屮原奋内矜,ipszstring是字符数组或字符 指针。示例:设置编辑框中的内容为“ abcdefg ” char ch20="abcdefgm; m_e.setwindowtext(ch);3. 连接变量编辑框4:连接变量时,除了耍指定变量名之外,还耍确定变量类别。变量类別有两个可

21、 选择:一是contml,意味着该变m作控件使用,对应的变鲎类型只能是cedit,可以使用该 控件类的成员函数;二是value,意味着该变:w:当作c/c+屮普通的变朵使用,对俺的变県 类型有cstring、int、double等,可以使用这些数裾类型的函数,但是不能使用控件的成员 函数。若一个编辑框连接了一个value类别的变県,则该变朵就表示这个编辑框,编樹框屮显 示的闪界就是变量的位。但是,改变了编辑框的内界外不会f=l动更新对应的变:w:的位,同样, 改变了变量的值也不会自动刷新编辑框的容。若要保持一致,需要使用updatedataow数 更新,如阁所示。若编辑框的a稃改变了,贝婉使用

22、语ljupdatedata(true);更新对成的变 朵的位,若变朵的位改变了,则/、v:使用语川updatedata(false);刷新编辑框的闪稃。&变簠类别何題内審3»4. 消息处理函数在编辑框能处理的消息中是最重要的是en.change,这是编辑框屮的文本被修改后 发出的消息。【例1.2】输入一元二次方程ax2 +bx+c=0的系数a、b、c,计算并输出两个根 xl、x2,如图所示。么 testbci1卜3i2r'vfs"!钴束 |xi=fx2= p求方程的根对话框上有5个静态文本框、5个编辑框和2个命令按钮。编辑框按表连接变量,其余 控件不需要连接

23、变景。餅id湖«»»eabosnjt(smmbdbji -umdibncumhb(kmwiaonc为了要计算b2 -4ac的平方根,需要使用sqrt()函数,因此在testdlg.cpp文件的开 始添加了文件包含命令:#include "math.h" /n计算n按钮的函数这条要放/十:最后void ctestdlg:oncalc()/ todo: add your control notification handler code here updatedata(true);double a=m_a; double b=m_b; double

24、 c=m_c;m_x 1=(-b+sqrt(b*b-4*a*c)/(2*a); m_x2=(-b-sqrt(b*b-4*a*c)/(2*a); updatedata(false);/ “结朿”按钮的函数void ctestdlg:onok()/ todo: add your control notification handler code here cdialog:onok();/onok();【例1.3】字符中转换程序转换规则为:大写字付转换成小写; 将小写字母转换成人写; 挽行符和w车符不变; 其余字符转换为“ *”要求:每输入一个字符立即转换策1个编輯框连接变量m_el (contro

25、l)属性选定: multiline vertical scrollautovscroll(在多行控件中,当用户在最后一行按卜 enter键时a动叫上滚动文本) want return(使多行编辑器接收w车键,表示换行。如果不指定,按回车键会选择缺省的命令按钮,这往往会导致对话框的关w)第2个编辑框连接变量m_e2 (control)属性选定:multilinevertical scroll auto vscroll read-only对第1个编辑框添加en_change消息处理函数void ctestdlg:onchangceditl()/ todo: add your control not

26、ification handler code here char s80;m_cl .gctwindowtcxt(s,80); for(int i=0;si!=w;i+)if(si>=,a,&& si<=,z,)si=si+,a,-,a'elseif(slij>=,a, && sij<=,z,)slij=sij+,a,-,a,;elseif (si=n* | sij=v) si=si;elses =*;m_e2.setwindowtext(s);1.4框架、单选按钮和复选框框架、肀选按钮和复选框都足对话框的常见控件。框架与静态文本

27、框-样足cstatic类 的对象,单选按钮和复选框与命令按钮一样都足cbutton类的对象。1.4.1框架当对话框上控件较多时,对以使用框架将一组相关的控件框起來,达到标识一组控件的 作用。框架不需要连接变量,也不需要处理消息。框架的重要属性有:(1) id :所奋桐架的缺衍1d都是idc.static ,不需要重新没s。(2) 标题:该属性决定框架上的标题文木。1.4.2单选按钮1. 设计要求同一组中的按钮必须一个接一个地放进对话框中,中间不能插入其他控件,并且一个组 的第一个按扭要选中“group”属性,表示一组投件的7t始。2. 重要属性(1) id :每个命令按钮都有一个缺省id,如i

28、dc_radi01 ,可以重新设置。(2) 标题:该属性位就是单选按钮右边显示的文木标题。(3) group :组屮第一个按钮选中该属性,表示仑是一组的开始。3. 消息单选按钮能处理的消息是bn_clickedo4. 重要函数(1) 设定单选按钮选中状态初始时,hi'使用windows api函数checkradiobutton()'没定一组单选按钮中选中的按 钮。)杉式:void checkradiobutton(int nidfirstbutton, int nidlastbutton, int nidcheckbutton); 说明: nidfirstbutton是一组中

29、第一个单选按钮的id ; nidlastbutton是一组屮最后一个单选按钮的id ; nidcheckbutton为初始时设置为选中的那个单选按钮的id。(2) 判定单选按钮是否被选定形式:uint isdlgbuttonchecked( int nidbutton ) const;说明:如果id为nidbutton的按钮被选定,则该函数的返m伉为true ,否则为 false。【例1.4】设计一个如阁所示的程序。当单击“确定”后,用afxmessagebox函 数显示一个如阁所示的消息框。9aokm1dc.radio3mue(1) 界面设计首先创建一个对话框程序框架,然后放置各控件,进行属

30、性设置,将编辑框连接到 cstring类型的m_e变景,其余控件不需要连接变景。袼“男”和“教授”对极的单选钮 的group城性勾上。(2) 初始化单选按钮的初始化工作在对话框的初始化函数实现。bool ctestdig:oninitdialog()checkradiobutton(idc_radiol, idc_radi02, idc_rad101);/ checkradiobutton(idc_radio3, idc_radi05, idc_radi03);(3) 消息处理函数void ctestdlg:onbuttonl()/ todo: add your control notific

31、ation handler code hereupdatedata(true);/注意 “oxal”是表示岀现了 tab 键 cstring s;s+=m_e;if(isdlgbuttonchecked(idc_radio 1) s+="男"elses+=n 女";if(isdlgbuttonchecked(ldc_radio3) s+=”教授”;else if(isdlgbuttonchecked(idc_radio4)s+="副教授n;elses+=m讲师"afxmessagebox(s);1.4.3复选框1. 重要属性(1) id :每个

32、复选框都有一个缺楫id ,如idc_check1,可以重新设置。(2) 标题:该屈性值决定了复选框右边.w.示的文本标题。2. 连接变量复选框通常被连接到value类别bool类型的变g。3. 消息复选框能处理bn_clicked消息。【例5】没计一个如图所示的程序。当单击“确定”后,在右边的编辑框屮显示奋关信 息。s选框应用示例4. 界面设计首先创建一个对话框程序框架,然后放置各控件,进行属性设计,各编辑框和复选框按 表连接变量,k余控件不需要连接变釐。hh摘助ohhq无jbihmcsbirgfimhq无jdmbcsbivflhe助jclmbbool助jcqwhbool-d3mhbool5.

33、 消息处理函数void ctestdlg:onbuttonl()/ todo: add your control notification handler code here updatedata(true);cstring s;s=m_el;s+="爱好:"if(m_cl)s+="旅游;if(m_c2)s+=”运动"if (m_c3) s+= h 音乐";m_e2=s;updatedata(false);1.5列表框和组合框歹lj表框是clistbox类的对象,组合框是ccombobox的对象。1.5.1列表框1. 属性设置列表框的属性在如图

34、所示的属性脔u中设置。list box properties貨 general 丨 styles extended styles | £选择:|single |borderr horizontal scrollwant key inputq所有者:sortvertical scrolldisable no scrollnonotify1 no redraw/ no integral heighti las string multi-column f use tabstops丞要的属性有:(i) selection该属性决定川户的选择方式,缺竹仉为single。属性值奋: single

35、 单项选择multiple多项选择,似是忽略ctrl和alt键。 extended允许使川ctrl和alt进行多项选择 none 禁止选择(2) sort当该属性被选定后,列表框屮的选项按字母顺序排列。2. 常用成员函数(1) 添加项r格式:int addstring( lpctstr lpszltem );例如:语句mj. addstring(”陈蓉");把“陈蓉”添加到了列表框mj中。(2) 删除项0格式:int deletestring( uint nlndex );说明:nlndex表示被删除项el在列表桐中的位置,对于第一个选项,nlndex应为0。 例如:语句mj. de

36、letestring (4);删除列表框中的第5个项目。(3) 获取当前被选定的项fi的序号 格式:int getcursel() const;例如:语句inti=mj.getcursel();将使i获得m_l列表框中当前选定的项目的序号。(4) 获取列表框中指定的项鬥格式 1 : int gettext( int nlndex, lptstr ipszbuffer) const;格式 2 : void gettext( int nlndex, cstring& rstring ) const;说明:将列表框中第nlndex个选项的文本送到ipszbuffer或rstring中。例如:

37、假定有说明语句 char si20; cstring s2;,则语句 mj. gettext(4, si);和 mj.gettext(4, rstring);把第5项内容分别送到si和s2中。【例i. 6】编写一个能对列表框进行项n添加、修改和删除操作的应用程序,如闷所示。“添加”按钮的功能是将文本框中的内容添加到列表框,“删除”按钮的功能是删除列表 框中选定的选项。如果要修改列表框,则首先选定选项,然p单击“修改”按钮,所选的选 项显示在文木框屮,当在文木框屮修改完之r;再单击“修改确定”按钮更新列表框。列表框应用示例(1)界而设计首先创建一个对话框应用程序框架,然后放置按钮。列表框和命令按

38、钮按表连接变量, 其余控件不需要连接变量。(2)初始化列表框的选项在对话框的初始化函数中用addstring函数添加。 bool ctestdlg:oninitdialog()/ todo: add extra initialization here m_l.addstring("人学计算机基础n) m_l.addstring(nc/c+ 程序设计): m_l.addstring("vb 程序设计"); m_l.addstring("软件技术基础n);iii(3) 消息处理函数void ctestdlg:onbuttonl() /选择“添加”后执行的阑数

39、 / todo: add your control notification handler code here updatedata(true); m_l.addstring(m_e); m一e=""updatedata(false);void ctestdlg:onbutton2() /选择“删除”后执行的蚋数/ todo: add your control notification handler code hereint n=m_l.gctcurscl();m_l.deletestring(n);void ctestdlg:onbutton3() /选择“修改”后执

40、行的函数 /将选定的项目送编辑框供修改/todo: add your control notification handler code here cstring s;int n=m_l.getcursel();m_l.gcttcxt(n,s);m_e=s;updatedata(false);void ctestdlg:onbutton4() /选择“确定修改” 执行的函数 /将修改后的项0送回列表框屮,荇换原项实现修改。/ todo: add your control notification handler code hereupdatedata(true);int n=m_l.getcu

41、rsel();m_l.deletestring(n);m_l.insertstring(n,m_e);u pdatedata(false);1.5.2组合框1. 属性设置(1) 类(type )该属性用于指定组令框的戈型,共冇三个选择:simple、dropdown和droplist , 默认值为dropdown。(2) 键入列表框项(enter listbox items )在列表框的属性窗u “ data ”选项卡中宥一个键入列表框项,这足在设计阶段输入选 项的地力*,如图所示。毎当输入一项后按ctrl+enter键才能输入下一项。(注意在设计 combobox时,点下向下箭失,然后将控件

42、下边向下拉,之后才输入数据,这样才能显示出 combobox的下拉的项。或者,注新建该挽件时往下拖放足够大的区域)box froperties圍? general : data| styles | extended styles |王春华关钍梅入c键表:n列 *组合根属性樹u data选项卡2. 常用成员函数编辑框和列表框的成员函数几乎都对以用于组合框,但是列表框的成员函数gettexto 在组合框中的是getlbtext()。形式 1 : int getlbtext( int nlndex, lptstr ipsztext) const;形式 2 : void getlbtext( int

43、nlndex,cstring& rstring ) const;说明:使川getlbtext函数n以将组含框中的祐nlndex个项鬥的文木送入ipsztext 或 rstring 中。3. 组合框发出的消息(1) cbn_selectchange :组合框的列衷框屮的选项改变时发送。(2) cbn_editchange :组会框的编辑框中文木改变时发出。【例1.7】没计-个如图所示的对话框。如果单击“确定”按钮,则川messagebox显 示如图所示的信息樞。品牌:n 数量:(50么,组合稚(1)酋先创建一个对话框积序桐染,然后放s各控件,进行属性没h,飢合桐的选项 在设计阶段直接输入

44、,按表连接变兒,其余控件不需要连接变解:。xl74析9assu靈纽jbwmcstawhs一csta(2)消息处理函数void ctestdlg:onbutton 1 ()/ todo: add your control notification handler code here updatedata(true);cstring s; s="品牌:" s=s+m_c; s=s+unm; s=s+"数量:,; s=s+m_e;messagebox(s);1.6滚动条滚动条是cscrollbar类的对象,是windows应用程序巾一个很熏要的控件,通常附 在对话框上用

45、来协助观察数据或确定位置,也可以用来作为数据输入的工具。滚动条有水平 和基直两种。【例8】建立一个水平滚动条,最小值力0 ,最人值为100,单击滚动条两端箭头 时滑块移动的增量值为2 ,单击滚动条中的空白处(滑块与两端箭头之间的区域)时滑块 移动的增量值为10。w有一个只读的编辑框,显示;t滑块当前位置所代表的值。假定工程名为test。1 .界而设计官先创建一个对话根应用程序枢架,然后放置水平滚动条、编辑框,按表连接变景,编 辑框设置为只读。摘籌cmralcseaolbv(mbwv2 .初始化滚动条的初始化就是设置最小值,最大伉,以及初始时滑块所代表的伉。滚动条初始化 在对话框的初始化函数中完

46、成,涉及两个函数:(1)设置最人值和最小值形式:void setscrollrange(int nminpos , int nmaxpos,bool bredraw = true);说明:nminpos表示最小值,nmaxpos丧示最大值。当bredraw为true时重m滚动条。(2)设置滑块的位置格式:int setscrollpos( int npos,bool bredraw = true );说明:npos表示消块的位置。当bredraw为true时重画滚动条。 滚动条初始化代码如下:bool ctestdlg:oninitdialog()/ todo: add extra initi

47、alization herem_s.setscrollrange(0,100);m_s.setscrollpos(50);m_e=50; /初始时,编辑框兄示50。updatedata(false);/更新编辑框显示的内容。3 .编写消息处理函数当用户在滚动条上进行操作时,滚动条接收不到任何消息。但是对话框却能接收到 wm_hscroll (水t滚动条)或wm_vscroll (亟且滚动条)消息,也就是说,程序对滚 动条的操作只能在onhscrollo或onvscrolr)屮编写代码。滚动条处理wm.hscroll消息的函数为:void ctestdlg:onhscroll(uint nsbc

48、ode,uint npos,cscrollbar* pscrollbar)/ todo: add your message handler code here and/or call default cdialog: :onhscroll(nsbcode, npos, pscrollbar);i new windows message and event handlers for class cmyl_8dlg new windows mcssagcs/cvcnts: existing mcssagc/cvcnl handlers:wmcancelmodewmcapturechan6edwmc

49、harwmchartoitemwm closewmcompareitemwmcontextmenuwmcopydata-wmcreatewmctlcolorwmdeleteitemwmdestroywmdrawitemwmhelpinfowmhscrollwmkeydownwmkeyupwmkillfocuswmlbu1tondblclkwmlbuttondownwmlbuttonupwmmeasureitemwmmousemovewm initdialogwm paintclass or object to handle:idc_edit1 idc scr0llbar1filler for

50、messages available tookcanceladd handleradd and editedit existingdialogwm hscroll: indicates a click in a horizontal scroll bar做如阁选择hi “cidd andedit”就把onhscwll函数添加进去。说明: pscrollbar招*向用p正在进行操作的滚动条。 npos表示滑块当前的位置。 nsbcode指示用户正在进行的操作,k取位及其意义见表。a息hi户钃作sbthumbtrackhmfcsb ldfeleftisb ldveuf粘左)曲mtsbjimbbxi

51、ht /sbjjmbdown触at右)sb pmwlbft/sb ruwup粘赴(左)极期attzmucsd.ruhuqht f单jmt < 右)霤mwattzmfiktt程序代码:void ctestdlg:onhscroll(uint nsbcode, uint npos, cscrollbar* pscrollbar) / todo: add your message handler code here and/or call defaultif (pscrollbar=&m_s) int inowpos;switch(nsbcode) case sb_thumbtrack

52、: / 拖动滚动猶时 m_s.sctscrollpos(npo$); m_e=npos; break;case sb.lineleft : /单击滚动条h'd左的箭头inowpos=m_s.getscrollpos(); /获取滑块当前位h所代表的值 inowpos=inowpo$-2;if(inowpos<0)inowpos=0;m_s.setscrollpos(inowpos);m_c=inowpo$;break;case sb.lineright : /单击滚动条向的箭义inowpos=m_s.getscrollpos(); /获取滑块当前位置所代表的值 inowpos=i

53、nowpos+2;if(inowpos>100)inowpos=100;m_s.setscrollpos(inowpos);m_e=inowpos;break;case sb.pageleft : /单击滚动条左边的箭尖与滑块之间的区域 inowpos=m_s.getscrollpos(); /获取相块当前位置所代衷的值 inowpos=inowpos-10;if(inowpos<0)inowpos=();m_s.setscroll pos(inowpos);m_e=inowpos;break;case sb_pageright : /单击滚动条右边的箭头与滑块之叫的区域inowp

54、os=m_s.gctscrollpos(); /获取滑块当前位置所代表的值 inowpos=inowpos+10;if(inowpos>100)inowpos=100;m_s.setscrollpos(inowpos);m_e=inowpos;break;updatedata(false);cdialog:onhscroll(nsbcode, npos, pscrollbar);说明:(1) 山于对诂桐上可能有多个滚动条,因此函数首先需要根裾指针pscrollbar确定事 件发生在:哪一个滚动条上,方法是使用表达式pscrohbar=&m_s。因为,pscrollbar指 向发生

55、事件的滚动条,所以这个表达式为真时,意味着用户对滚动条m_s进行了操作。(2) 用户对滚动条的操作有5种,因此函数中必须以这5种情况分别进行处理。1.7程序举例对话框足windows应川程序屮最常川的一种与川户交互的方式。川户通过对话框输入 数据,程序通过对诂框显示执行的情况。【例1.9】设计如阁所示的对话框。若选定丫 “u期”或“时间” s选框,则在对应的只读编辑框中敁示系统当前日期或时间。idc check 1idc check2分析:ctime是mfc中的一个类,封装了 u期和时间。它有一个静态成员 getcurrenttime(),返回系统当前的f1期和吋间。实现:(1)界面设计首先创建一个对话框程序框架,然u放置各控件,按表进行属性设置和连接变景。析ju»b«&#

温馨提示

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

评论

0/150

提交评论