医用仪器软件设计-基于MFC-C5_第1页
医用仪器软件设计-基于MFC-C5_第2页
医用仪器软件设计-基于MFC-C5_第3页
医用仪器软件设计-基于MFC-C5_第4页
医用仪器软件设计-基于MFC-C5_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

医用仪器软件设计——基于MFCMFC程序设计05Contents.1对话框实验2消息映射实验3函数指针实验4

多线程实验1.对话框实验1.1实验内容对话框窗口是一个顶级窗口,主要用于执行短期任务以及和用户进行简要通信,对于一个完善的应用程序来说,对话框窗口是不可或缺的一部分。本节先介绍对话框的创建方法,再学习模态对话框和非模态对话框的基本知识,最后通过一个简单的实验来介绍对话框如何与程序代码协同运作,形成一个完整的应用程序。初始界面点击“模态对话框”后点击“非模态对话框”后1.对话框实验1.2实验原理—头文件的创建和使用创建一个.h头文件创建对应.cpp源文件头文件中写定义源文件中写实现(使用作用域符号::说明函数所在的类)test.cpp定义类入口函数test.h定义类(仅声明变量和函数)test.cpp头文件(test.h)实现类中的函数入口函数类分文件编写,将类的定义和实现分开,具体步骤入下:以控制台程序为例:1.对话框实验1.2实验原理—创建对话框项目创建MFC对话框项目MFC对话框项目最基本的组成:一个应用程序类(CHelloWorldApp)一个窗口框架类(CHelloWorldDlg)1.对话框实验1.2实验原理—对话框的执行顺序创建应用程序类的全局对象:theApp(应用程序.cpp文件中定义),调用构造函数调用WinMain函数(Windows程序的入口函数),隐式调用,项目文件中找不到通过InitInstance()函数初始化窗口,包括注册、创建和显示对话框,InitInstance函数是CHelloWorldApp类中除构造函数以外唯一的成员函数应用程序创建完,程序开始运行,进入消息循环。windows程序的事件都是消息驱动的,每产生一个消息就触发一个响应事件,消息和事件通过消息映射DECLARE_MESSAGE_MAP()联系在一起。默认包含三个消息:ON_WM_SYSCOMMAND()

//响应控制指令(调用系统菜单时被调用)ON_WM_PAINT()//响应绘图消息,用于刷新窗口(窗口被最大化或最小化等需要重新绘图时发出)ON_WM_QUERYDRAGICON()//当用户拖动最小化窗口时发出当用户关闭应用程序时,会发送一个WM_CLOSE消息,程序响应后结束程序1.对话框实验1.2实验原理—添加对话框添加对话框主要分为两步第一步:创建对话框资源,包括创建新的对话框模板、设置对话框属性和为对话框添加控件;第二步:生成对话框类,主要包括新建对话框类、添加控件变量和控件的消息处理函数等。1.对话框实验1.2实验原理—对话框中的数据交互对话框中的各类控件间如何进行数据交互?关联变量是控件所属类的一个实例,可通过该变量调用类中的所有函数对控件进行操作仅用于数据传递,不能对控件进行操作对话框的数据交互机制:通过系统为对话框类自动生成的成员函数DoDataExchange()来实现注意:DoDataExchange()函数并非自动调用,而是需要调用CDialogEx::UpdateData()函数间接调用函数原型UpdateData(BOOLbSaveAndValidate=TRUE)。参数用于指示数据传输方向

TRUE-从控件传给变量(默认),FALSE-从变量传给控件关联变量控件类型值类型1.对话框实验1.2实验原理—模态对话框和非模态对话框对话框类型特点特点描述显示方式应用场景模态对话框阻塞模态对话框关闭后,才能访问应用程序中的其他窗口,对其他应用程序没有影响调用DoModal()函数新建项目,应用程序的配置选项界面非模态对话框非阻塞非模态对话框不会影响应用程序中其他窗口的交互操作调用Create()和ShowWindow()函数文字处理的“查找”和“替换”场景创建模态对话框CModalDlgmodalDlg;modalDlg.DoModal();其中CModalDlg为对话框类创建非模态对话框1)在对话框类的头文件中声明一个指针变量:private:CModelessDlg*mModelessDlg;其中CModelessDlg为对话框类2)再在相应的CPP文件中要创建对话框的位置添加如下代码:mModelessDlg=newCModelessDlg();mModelessDlg->Create(IDD_MODELESS_DIALOG,this);mModelessDlg->ShowWindow(SW_SHOW);3)最后在所在类的析构函数中收回指针所指向的内存:deletemModelessDlg;注意:创建非模块对话框时,必须有一个标志表明非模态对话框是否已创建,以防多次重复创建1.对话框实验1.3代码分析初始界面点击“模态对话框”后点击“非模态对话框”后创建对话框工程添加控件新增两个对话框(对话框资源+对话框类)创建两个消息响应函数(分别创建模态和非模态对话框)2.消息映射2.1实验内容消息映射机制是MFC编程的基础,也是MFC不同于其他开发框架的核心特征。消息映射机制用于完成界面操作的响应,或实现线程之间的通信。本节先介绍消息映射机制的特点和用法,然后通过一个简单的实验来介绍消息映射机制的实际应用。2.消息映射2.2实验原理—消息映射机制类内声明(DialogTestDlg.h):声明消息宏DECLARE_MESSAGE_MAP()类外实现(DialogTestDlg.cpp):消息映射表(分界宏)BEGIN_MESSAGE_MAP(CDialogTestDlg,CDialogEx)

END_MESSAGE_MAP()(消息映射所属类,父类)(发出消息按钮的资源ID,消息处理函数)声明消息处理函数afx_msgvoidOnBnClickedButtonModaldlg();ON_BN_CLICKED(IDC_BUTTON_MODALDLG,&CDialogTestDlg::OnBnClickedButtonModaldlg)实现消息处理函数voidCDialogTestDlg::OnBnClickedButtonModaldlg(){ //TODO:在此添加控件通知处理程序代码}2.消息映射2.2实验原理—消息分类除WM_COMMAND外,所有前缀为“WM_”的消息

通常消息是从系统发送到窗口,或从窗口发送到窗口,比如:绘图、键盘、鼠标消息等其所对应的宏一般为在消息WM_前面加上ON_:ON_WM_***,来自菜单、工具栏按钮等的通知消息,以WM_COMMAND形式呈现Windows窗口消息命令消息控件消息由控件产生,这类消息也是以WM_COMMAND形式呈现比如:按钮单击、列表框的选择等,均产生此类消息,为的是向其父窗口通知事件的发生2.消息映射2.3代码分析初始界面修改姓名修改结果3.函数指针3.1实验内容函数指针是进行MFC程序设计时常用到的指针数据类型。本节先介绍函数指针的基本概念和用法,然后通过一个简单的实验来介绍函数指针的具体应用。3.函数指针3.2实验原理—函数指针函数指针:是指向函数的指针变量函数本身不是变量,但可以定义指向函数的指针函数指针可以被赋值、传递给函数及作为函数的返回值每个函数都有一个入口地址,该入口地址就是函数指针所指向的地址typedefint(*pFunc)(int,int);intCompare(pFuncfunc,inta,intb){returnfunc(a,b);}intMax(inta,intb){

//若a>b为真则返回a,否则返回breturn(a>b)?a:b;}intMin(inta,intb){

//若a<b为真则返回a,否则返回breturn(a<b)?a:b;}intm=5;Intn=3;intbigNumber=Compare(Max,m,n);//bigNumber=5intsmallNumber=Compare(Min,m,n);//smallNumber=3①声明一个函数指针声明时应当指定函数的返回类型及函数的参数列表②声明一个通用接口函数通用接口函数将函数指针作为形参,实现对其他函数的封装③使用函数指针来调用函数函数的函数名即为地址,要将函数作为参数进行传递,只需传递函数名即可3.函数指针3.3代码分析初始界面加法运算测试4.多线程4.1实验内容为了满足用户构造复杂图形界面系统的需求,MFC提供了丰富的多线程编程支持。本节将介绍多线程的优点及多线程的创建方法,然后介绍线程同步的概念,最后通过实验设计一个多线程的程序。4.多线程4.2实验原理线程和进程的区别:进程是资源分配的基本单位,一个正在运行的软件(如微信)就是一个进程线程是程序执行时的最小单位,一个进程可以由很多个线程组成,线程间共享进程的所有资源多线程:—多线程的介绍一个应用程序中只有一个主线程,在执行耗时操作时会阻塞主线程,从而导致用户界面失去响应。在这种情况下,可以再创建一个单独的线程,将耗时的操作转移到新建的线程中执行,并处理好该线程与主线程之间的同步与数据交互即可避免上述问题,这就是多线程应用程序。多线程的特点:可提高应用程序的响应速度可提高多处理器系统的CPU利用率4.多线程4.2实验原理使用MFC函数AfxBeginThread()创建线程创建用户界面线程:有自己的消息队列和消息循环响应用户输入和系统消息等—多线程的使用CWinThread*AFXAPIAfxBeginThread(CRuntimeClass*pThreadClass,intnPriority,UINTnStackSize,DWORDdwCreateFlags,LPSECURITY_ATTRIBUTESlpSecurityAttrs)创建工作者线程:无消息机制常用于执行后台计算和维护工作CWinThread*AFXAPIAfxBeginThread(AFX_THREADPROCpfnThreadProc,LPVOIDpParam,intnPriority,UINTnStackSize,DWORDdwCreateFlags,LPSECURITY_ATTRIBUTESlpSecurityAttrs)第1个参数:pThreadClass是由CWinThread类派生的CRuntimeClass类的对象;第2个参数指定线程优先级,若为0,则与创建该线程的线程优先级相同;第3个参数指定线程的堆栈大小,若为0,则与创建该线程的线程相同;第4

温馨提示

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

评论

0/150

提交评论