版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章可视化编程第8章可视化编程教学提示:随着计算机软件工程技术的迅速发展,可视化编程技术已经成为当今软件开发的重要工具和手段,尤其是VisualC++、Delphi、VisualBasic等开发工具的出现,大大推动了可视化编程技术的发展和应用。作为理工科专业的大学生在学习了程序设计课程后,还应掌握一些开发工具,同时也能提高开发应用系统的基本能力。教学目标:通过可视化编程的学习,掌握VisualC++等开发工具的基本原理、开发环境、文档视图结构、单文档与多文档程序、对话框和控件,提高实践操作和独立编程的能力。1/13/202328.1文档与视图的概念8.1.1文档视图结构8.1.2单文档(SDI)应用程序8.1.3多文档(MDI)应用程序1/13/202338.1.1文档视图结构在文档视图结构里,文档是一个应用程序数据基本元素的集合,它构成应用程序所使用的数据单元;另外它还提供了管理和维护数据的手段。文档是一种数据源,数据源有很多种,最常见的是磁盘文件。视图是数据的用户窗口,为用户提供文档的可视的数据显示,它把文档的部分或全部内容在窗口中显示出来。视图还给用户提供了一个与文档中的数据交互的界面,它把用户的输入转化为对文档中数据的操作。1/13/202348.1.1文档视图结构文档视图结构带来的好处主要有:将数据操作和数据显示、用户界面分离开提供标准的操作界面支持打印预览和电子邮件发送功能1/13/202358.1.2单文档(SDI)应用程序在单文档界面程序中,用户在同一时刻只能操作一个文档。如Windows中的记事本。单文档应用程序一般都提供一个File菜单,在该菜单下有一组命令:新建文档(New)打开已有文档(Open)保存(Save)换名存盘(Saveas)等。1/13/202368.1.2单文档(SDI)应用程序使用VisualC++集成开发环境的AppWizard就可以创建单文档的应用程序框架:在New对话框的ProjectName编辑框中输入项目名为Editor在AppWizard的第一步中选择Singledocument(单文档)AppWizard第二和第三步选项使用默认值AppWizard后面的几页对话框都使用默认值。最后可得到的结果:1/13/202378.1.3多文档(MDI)应用程序多文档界面(MultipleDocumentInterface,MDI)是在一个应用程序中能够同时处理两个或者更多个窗体的界面形式。一个多文档界面应用程序也能操作文档,但它允许同时操作多个文档。MicrosoftExcel就是这样的例子。可以打开多个文件,可以通过切换活动窗口激活相应的文档进行编辑。多文档应用程序也提供一个File菜单,用于新建、打开、保存文档。与单文档应用程序不同的是,它往往还提供一个Close(关闭)菜单项,用于关闭当前打开的文档。多文档应用程序还提供一个窗口菜单,管理所有打开的子窗口,包括对子窗口的新建、关闭、层叠、平铺等。关闭一个窗口时,窗口内的文档也被自动关闭。1/13/202388.1.3多文档(MDI)应用程序VisualC++提供了一整套设计MDI应用程序的组件,可以很容易、很快速地开发一个MDI的应用程序。在File菜单中选择New菜单项,在弹出New对话框的Projects选项卡选中列表中的选项MFCAppWizard(exe),并在Projectname(工程名)的编辑框内输入工程名称:MdiForm,单击OK按钮后,进行AppWizard选项的各个步骤。第一步,接收系统的默认值,即选中Multipledocuments单选按钮。第二步,接收系统默认设置。第三步,去掉复选框ActiveXControls,其他设置接收系统默认设置。第四步,去掉复选框Printingandprintpreview,其他接收系统默认设置。第五步,接收系统默认设置。第六步,接收系统默认设置。单击OK按钮后,结束AppWizard的设置。1/13/202398.2对话框和控件8.2.1对话框8.2.2常用控件8.2.3控件使用举例1/13/2023108.2.1对话框对话框的基本概念对话框(Dialog)实际上是一个窗口。在MFC中,对话框的功能被封装在了CDialog类中,CDialog类是CWnd类的派生类。对话框分为:模态对话框:只能与当前对话框进行交互非模态对话框:可以与其他对话框交互从MFC编程的角度来看,一个对话框由两部分组成:对话框模板资源:用于指定对话框的控件及其分布。Windows根据对话框模板来创建并显示对话框。对话框类:用来实现对话框的功能。由于对话框行使的功能各不相同,因此一般需要从CDialog类派生一个新类,以完成特定的功能。1/13/2023118.2.1对话框创建对话框应用程序启动VisualC++,在VisualC++中,New命令,弹出New对话框来新建一个工程项目。在Projectname编辑框中输入要创建的项目名称:Mydialog。单击OK按钮后,进行AppWizard的各个步骤。进入MFCAppWizard-Step1对话框,选中Dialogbased单选按钮,在语言支持资源中选择Chinese(PRC)(APPWZCHS.DLL)弹出MFCAppWizard-Step2of4对话框,默认的设置。弹出MFCAppWizard-Step3of4对话框,选用默认设置。弹出MFCAppWizard-Step3of4对话框,不需要做任何修改,单击Finish按钮,完成项目创建向导的有关设置。在指定的目录下生成应用程序的框架所必须的全部文件。编辑和运行对话框应用程序在对话框中,可以进行可视化的设计、布局安排各种控件、定义编辑对话框各种资源。1/13/2023128.2.2常用控件对话框实际上只提供了一个窗口,用户与对话框的交互还要利用对话框中的控件进行。控件功能对应控件类StaticText(静态正文)显示正文,一般不能接受输入信息CStaticPicture(图片)显式位图、图标、方框和图元文件,一般不能接受输入信息CStaticEditBox(编辑框)输入并编辑正文,支持单行和多行编辑CEditPushbutton(命令按钮)响应用户的输入,触发相应的事件CButtonCheckBox(检查框)用作选择标记,可以有选中和不选中两种状态CButtonRadioButton
(单选按钮)用来从两个或多个选项中选中一项CButtonGroupBox(组框)显示正文和方框,主要用来将相关的一些控件聚成一组CButtonListBox(列表框)显示一个列表,用户可以从该列表中选择一项或多项CListBoxComboBox(组合框)是一个编辑框和一个列表框的组合,分为简易式、下拉式和下拉列表式CComboBoxScrollBar(滚动条)主要用来从一个预定义范围值中迅速而有效地选取一个整数值CScrollBar1/13/2023138.2.2常用控件控件在Control工具栏上都有对应的工具按钮。可以利用这些工具按钮在对话框中进行可视化设置控件。1/13/202314对话框工具条1/13/202315对控件的操作和使用一般按以下步骤进行在对话框资源中添加控件。通过属性对话框可以对控件的风格进行设置。通过定义与控件相关的控件类的对象或相应的数值变量。通过定义控件的消息响应函数,生成对话框类的成员函数。在消息响应函数中添加适当的代码。1/13/2023168.2.2常用控件1静态控件(CStatic)用来显示一个字符串、框、矩形、图标及位图等,可用于显示提示信息和其他控件标题。静态控件有静态文本、组框和图片等,一般不接收用户输入,也不产生消息。在控件工具窗口中选择Aa,在编辑对话框窗口中单击,创建一个静态文本,在此静态文本上单击鼠标右键,选择Properties(属性)选项,如图8.20所示。弹出属性对话框,对此文本进行设置。修改Caption编辑框内的内容:姓名。1/13/2023172按钮类控件按钮类控件是窗口类名被系统预定义为BUTTON的一类控件,该类控件用于响应用户的鼠标按键操作,常见的按钮有三种:按键按钮PushButton:可以产生某个动作,执行某个命令,如确认或取消等命令。单选按钮RadioBox:用来从多项中选择一项,一般都是成组使用。复选按钮CheckBox:用作选择标记,有选中、非选中和不确定等状态。1/13/2023183编辑框控件文本编辑框控件是一个让用户从键盘输入和编辑文本的矩形窗口,用户可以通过它进行单行或多行的文本输入,也可以进行数值、时间和日期数据的输入。当编辑框被激活时,具有输入焦点,出现一个闪动的插入符。用对话框编辑器可以方便地设置编辑控件的属性和风格。1/13/202319举一个简单的例子说明编辑框的使用方法。用MFCAppWizard(exe)创建一个项目名为MyDialog的基于对话框的应用程序。P221Updatedata(TRUE)==将控件的值赋值给成员变量;(默认)Updatedata(FALSE)==将成员变量的值赋值给控件1/13/202320voidCDdDlg::OnExit(){OnOK(); }voidCDdDlg::OnCalculate(){ UpdateData(); floatarea=(float)2*3.14*m_Radius*m_Radius; m_Area.Format("%8.2f",area); UpdateData(FALSE);
}1/13/202321关于编辑框的赋值和取值
向编辑框中赋值和取值时:1、建一个控制型的变量,如m_edit1,用CWnd的SetWindowText()和GetWindowText()来赋值和取值。m_edit1.SetWindowText("Hello");
或者GetDlgItem(IDC_EDIT1)->SetWindowText(str);2、建立一个控制型的变量,如m_edit1,用SetDlgItemText()和GetDlgItemText()来赋值和取值CStringStr="Hello":m_edit1.SetDlgItemText(IDC_EDIT1,str);2、直接建一个
数值形的变量
如m_strEdit;
用
UpdateData()来控制得到变量,还是更新变量。//取值
UpdateData(TRUE);
CString
buf
=
m_Edit1;
//赋值
m_Edit1="ok!";
UpdateData(FALSE);1/13/2023224列表框列表框是一个可以列有多个项目让用户选择的列表控件,可往列表框中添加或删除某些项,并可自动提供滚动条让用户浏览列表框中数目较多的项目。ListBox窗口用来列出一系列可供用户从中选择的项,这些项一般以字符串的形式给出。MFC类ClistBox封装了标准列表框控件,其成员函数提供了对标准列表框的绝大多数操作,下表列出了一些重要的成员函数。1/13/2023231/13/2023245组合框组合框(ComboBox)的功能是将列表框与编辑框控件结合在一起,完成一些较为复杂的输入功能。组合框有:简单组合框下拉组合框下拉式列表框1/13/2023251/13/2023266滚动条控件
滚动条分为水平滚动条和垂直滚动条两种,通常使用滚动条来进行定位之类的操作。1/13/2023271滚动条控件样式
Top/Left表示将滚动条的左上边与由函数CreateWindowEx的参数定义的矩形的左上边对齐;Button/Right则表示与右下边对齐;该属性的默认值为None,即不进行任何对齐操作1/13/2023282CScrollBar类
1/13/202329.3滚动条控件消息
当对滚动条操作后,所在的对话框会接受到WM_HSCOLL消息和WM_VSCOLL消息。在这两个消息的响应函数中可以判断是哪一个滚动条发生了变化,然后进行相应的操作。 CWnd类中定义了处理该消息的成员函数OnHScoll和OnVScoll。1/13/202330OnHScoll成员函数的原型: afx_msgvoidOnHScoll( UINTnSBCode,UINTnPos, CScrollBar*pScrollBar );1/13/2023318.2.3控件使用举例P225设计这个应用程序包括两个对话框:一个主对话框(学生信息管理),用来打开另一个对话框及查询学生信息;另一个对话框(输入学生信息),用来输入学生的信息,它是通过主对话框的按钮来打开运行的。1/13/202332常用控件应用实例
本节例子主要用来说明对话框和控件的使用。例子的实现功能是在程序主界面出现一个用户调查表图所示:1/13/202333操作步骤(创建工程):步骤1.在VC++集成开发环境中,通过菜单File|New,弹出New对话框;步骤2.在Projects标签中选择MFCAppWizar(exe),在Projectname中输入“Eg7_1”,Location读者可以自己选择;步骤3.按下OK按钮,在弹出的MFCAppWizardStep-1对话框中选择程序框架为单文档框架,即选中SingleDocument;步骤4.按下OK按钮,在弹出的NewProjectInformation对话框中按下OK按钮后等待创建完相应的工程。1/13/2023341创建对话框资源
在工作区中选中ResourseView标签展开Eg7_1Resourse|Dialog条目,可以察看当前工程中的对话框资源;选择Dialog条目,单击鼠标右键,弹出活动菜单,选择菜单InsertDialog命令;将鼠标移动到对话框资源上,单击鼠标右键,在弹出的菜单中选择Properties菜单命令,将对话框的标题设置为“用户调查表”标识号不变。1/13/202335创建对话框资源(续)删除对话框资源本来就有的静态控件,利用鼠标将按钮OK和CANCEL移动到对话框的底部,将按钮的标题分别改为确定,取消。在工具栏中的静态控件上单击一下鼠标左键,然后在对话框资源中按下鼠标左键拖动,出现一个矩形框,松开鼠标左键,则在对话框资源中出现一个静态控件,将该静态控件的标题改为“姓名”其标识号改为IDC_STATIC_NAME。1/13/202336创建对话框资源(续)按照上面的方法在对话框资源上加入其它的控件,它们的类型、标题和标识号如下:1/13/202337创建对话框资源(续)1/13/2023382生成对话框类
资源创建完毕以后,还需要创建一个与对话框资源相关联的类,这个类需要从对话框类派生,然后定义一个派生类的对象,通过派生类的对象使对话框的功能得以实现。1/13/202339生成对话框类的操作步骤:在对话框资源上单击右键,在弹出的菜单中选择ClassWiizard,在MFCClassWIizard对话框弹出以后紧接着弹出AddingClass。在打开对话框的过程中,如果系统监测到有新建的对话框资源,菜单资源等,并且该资源没有与之相关联的类,就会弹出对话框,询问是否创建新的类。1/13/202340生成对话框类的操作步骤(续):在AddingClass对话框中确认默认选择Createanewclass,单击按钮弹出NewClass对话框,在编辑框中输入新建类的名称CEg7-1Dialog,其他设置取默认值。单击OK按钮后显示出MFCClassWIizard对话框。1/13/2023413为控件建立相关联的成员变量
在MFCClassWiizard对话框中默认的Projects和Classname项为Eg7-1和CEg7-1Dialog。选中MemberVariables标签中的ControlIds项中的IDC_EDIT_NAME条目,单击AddVariables按钮,将弹出AddVariables对话框。在AddVariables对话框中添加成员变量m_Name,与编辑控件IDC_EDIT_NAME相关联,类型为CString,catogory为Value。单击OK按钮,添加变量完成。1/13/202342为控件建立相关联的成员变量(续)
AddVariables对话框:1/13/202343为控件建立相关联的成员变量(续) 按照上述方法为其它控件添加相关联的变量,如表所示:1/13/2023444成员变量的初始化
成员变量的初始化需要重载对话框类的OnInitDialog()函数。OnInitDialog是一个虚函数,它在对话框显示之前被调用,用户可以通过重载该函数对对话框中的各种控件进行初始化。 操作如下: 打开MFCClassWizzard,选中标签MemberMap标签中的ControlIDs项中的IDC_COMBO1条目,在Messages里面选择WM_INITDIALOG,单击AddFuction按钮,然后单击EditCode按钮,进入源程序,编辑OnInitDialog()函数。1/13/202345成员变量的初始化(续)
增加以后的代码如下:BOOLCInvest::OnInitDialog(){ CDialog::OnInitDialog(); //TODO:Addextrainitializationhere
m_Province.AddString("湖南"); m_Province.AddString("河南"); returnTRUE;//returnTRUEunlessyousetthefocustoacontrol}1/13/2023465建立消息映射与响应函数
需要在用户选择了省份以后更新有关城市的信息,这就需要在组合框中增加消息响应函数,功能是当用户打开第二个组合框的下拉式列表框的时候及时更新相关省份的城市信息。 操作步骤: 打开MFCClassWizard,选中标签MemberMap标签中的ControlIDs项中的IDC_COMBO2条目,在Messages里面选择CBN_DROPDOWN,单击“AddFuction”按钮,接受系统默认的函数名,然后单击“EditCode”按钮,进入源程序,编辑函数如下:1/13/202347响应函数:voidCEg7_1Dlg::OnDropdownCombo2(){ //TODO:Addyourcontrolnotificationhandlercodehere
CStringm_1; m_Province.GetWindowText(m_1); if(m_1=="河南") { m_City.ResetContent(); m_City.AddString("郑州"); m_City.AddString("洛阳"); } if(m_1=="湖南") { m_City.ResetContent(); m_City.AddString("长沙"); m_City.AddString("岳阳"); } }1/13/2023486函数建立与调用
在Workspace工作区打开CLassView,选中要加入函数的类CEg7_1Dlg,点击鼠标右键,在弹出的对话框中选择“AddMemberFuntion”。 在FuntionType(函数类型)中填入CString,表示函数类型是字符串对象;在FuntionDeclareation(函数声明)中填入GetRadio。该函数用来获得单选按钮的信息。1/13/202349函数建立与调用(续)然后在CEg7_1Dlg.cpp文件中找到该函数,添加函数代码如下:CStringCEg7_1Dlg::GetRadio(){CStringRadiotext;UINTm_6=GetCheckedRadioButton(IDC_RADIO1,IDC_RADIO2); if(m_6==IDC_RADIO1) {Radiotext="男"; } else { Radiotext="女"; } return(Radiotext);}1/13/202350函数建立与调用(续)说明:CWnd的成员函数:GetCheckedRadioButton()返回指定组中的第一个所选中的单选钮的ID,如果没有按钮选中则返回0。 该成员函数的原型:intGetCheckedRadioButton(intnIDFirstButton,intnIDLastButton);其中,第一个参数是nIDFirstButton同一组中的第一个单选按钮的ID,nIDLastButton是同一组中最后一个单选按钮的ID。1/13/202351建立第二个成员函数:同样为CEg7_1Dlg类加入另一个成员函数GetCheck()以获得复选框的信息。在FuntionType(函数类型)中填入CString,表示函数类型是字符串对象;在FuntionDeclareation(函数声明)中填入GetCheck。在CEg7_1Dlg.cpp文件中找到该函数,添加函数代码如下:1/13/202352函数代码:CStringCEg7_1Dlg::GetCheck(){int m=0; CStringstr,Checktext;for(inti=IDC_CHECK1;i<IDC_CHECK6+1;i++){m=((CButton*)GetDlgItem(i))->GetCheck(); if(m==1) { CWnd::GetDlgItemText(i,str); str+=";"; Checktext+=str; } } return(Checktext);}1/13/202353函数代码分析:说明:CButton类的成员函数GetDlgItem()得到指向各个复选框控件的指针;CButton类的成员函数GetCheck()用来返回复选框是否被选中,选中则返回1;CWnd::GetDlgItemText()用来获得所选中的复选框的标题1/13/202354重载OnOK()函数:该例将在OnOK()函数中调用这两个成员函数。打开对话框资源,双击“确定”按钮,接受系统默认的函数名,重载OnOK()函数:voidCMy21Dlg::OnOK(){ //TODO:AddextravalidationhereCStringm_1,m_2,m_3,str;m_3=GetRadio();//调用成员函数以得到单选按钮的信息str=GetCheck();//调用成员函数以得到复选框中的信息}1/13/202355.7重载其他函数
重载以后的OnOK()函数源代码如下:voidCMy21Dlg::OnOK(){ //TODO:AddextravalidationhereUpdateData(TRUE);//将对话框控件中的内容传给其成员变量 CStringm_1,m_2,m_3,str; m_3=GetRadio(); str=GetCheck(); m_Province.GetWindowText(m_1); m_City.GetWindowText(m_2); SetDlgItemText(IDC_STATIC_NAME,"");1/13/202356重载以后的OnOK()函数源代码(续)
SetDlgItemText(IDC_STATIC_EMAIL,""); SetDlgItemText(IDC_STATIC_EDIT,""); SetDlgItemText(IDC_STATIC_SEX,""); SetDlgItemText(IDC_STATIC_HOBBY,""); SetDlgItemText(IDC_STATIC_PROVINCE,""); SetDlgItemText(IDC_STATIC_CITY,""); m_Display.SetWindowText(m_Name+","+m_3+","+m_1+m_2+"人也。\n您的兴趣有:" +str+"\n"+"您的地址:"+m_Email+"\n"+"您要说的话:"+m_Edit); m_Display.ShowWindow(TRUE); m_City.ShowWindow(FALSE);m_Province.ShowWindow(FALSE); ((CEdit*)GetDlgItem(IDC_EDIT_NAME))->ShowWindow(FALSE); ((CEdit*)GetDlgItem(IDC_EDIT_EMAIL))->ShowWindow(FALSE); ((CEdit*)GetDlgItem(IDC_EDIT_EDIT))->ShowWindow(FALSE); GetDlgItem(IDC_STATIC1)->ShowWindow(FALSE);1/13/202357重载以后的OnOK()函数源代码(续)GetDlgItem(IDC_STATIC2)->ShowWindow(FALSE); ((CButton*)GetDlgItem(IDC_RADIO1))->ShowWindow(FALSE);
((CButton*)GetDlgItem(IDC_RADIO2))->ShowWindow(F
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024河北省建筑施工合同示范文本
- 2024网站建设合同书范本版
- 合成材料在智能评估中的应用考核试卷
- 公共设施管理的安全与防范工作考核试卷
- 医药制造业的前沿技术研究考核试卷
- 哲学思维审视人性的本质考核试卷
- 苏州科技大学天平学院《服装设计基础》2023-2024学年第一学期期末试卷
- 建筑装饰与建筑物理环境的调整与改善考核试卷
- 人事管理与薪资福利的培训考核试卷
- 化工企业法律顾问服务考核试卷
- 去分母解一元一次方程教案
- 泵盖铸造工艺课程设计
- 爆破片日常检查及定期更换记录
- 运转车间钢包管理制度
- 销售大户监管办法
- 小型装配式冷库设计(全套图纸)
- 西师版小学数学二年级上册半期考试
- 八六版高中英语课文全集
- 审计工作手册
- 胰腺癌一病一品知识分享
- 【原创】《基于地理实践力培养的校本课程开发研究》中期报告
评论
0/150
提交评论