第4章MFC基于对话框编程

合集下载

MFC编程

MFC编程

MFC全称Microsoft Foundation Classes,也就是微软基础类库。

它是VC++的核心,是C++与Windows API的结合,很彻底的用C++封装了Windows SDK(Software Development Kit,软件开发工具包)中的结构和功能,还提供了一个应用程序框架,此应用程序框架为软件开发者完成了一些例行化的工作,比如各种窗口、工具栏、菜单的生成和管理等,不需要开发者再去解决那些很复杂很乏味的难题,比如每个窗口都要使用Windows API注册、生成与管理。

这样就大大减少了软件开发者的工作量,提高了开发效率。

基于对话框的MFC编程
1,对话框的添加,子对话框的添加,非模态对话框的创建和模态对话框的创建。

模态与非模态的区别就在于,模态对话框是必
须处理完对话框里面的事件才能进行别的事件的处理,而非模
态对话框则可以同时进行。

2,与下位机的通信用了COM控件,对信号进行接收和发送
3,画图用teechart控件比较好一点,比图片控件好很多
4,加入菜单栏
5,加入工具栏,一般来说都是把按钮结合到工具栏中,不要单独一个一个的按钮
6,定时器有的也比较多,因为数据的实时显示都是需要用到定时器才能实现。

mfc对话框编程

mfc对话框编程

Ok按钮的消息处理函数
如果在编辑框上按回车键,对话框就关闭了。原因
是OK按钮是缺省按钮。作为缺省按钮,当你在对话 框上按了回车键后,就由你的缺省按钮的处理函数 来进行响应。在基类的OnOk函数中,关闭对话框。
WM_INITDIALOG
WM_INITDIALOG消息,是在对话框创建完成以及
它上面的控件创建完成,在显示之前发送的消 息。我们可以捕获这个消息。在这个消息处理
• 创建对话框窗口 :分有模式对话框的创建(DoModal)和 非模式对话框的创建(Create)
对话框的种类
•有模式对话框
用于交换一些重要信息,强制用户完成所要求的动作
有模式对话框在打开状态时,禁止用户在应用的其它 地方进行工作,但多数允许用户切换到其他的应用程 序中。
•无模式对话框
不禁止父窗口,它允许用户不需要关闭该无模式对话 框,就可返回到另一任务。Find对话框就是一例
对话框控件访问七种方式
• GetDlgItem()->Get(Set)WindowText( )
• GetDlgItemText()/SetDlgItemText( ) • GetDlgItemInt()/SetDlgItemInt( ) • 将控件和数值型变量相关联 • 将控件和控件变量相关联 要用到UpdataData函数,这个函数的作用是用来初始化数据
逃跑按钮的其他实现方法
可以只创建一个按钮,将这个按钮关联我们新创建 的类,然后跟踪鼠标移动消息,通过SetWindowPos
或MoveWindow函数来移动按钮实现。
GetClientRect(&rect)是得到窗口客户区域的大小,左上角坐标永远是 (0,0),右下角坐标是窗口的宽度和高度。 GetWindowRect(&rect)是得到整个窗口的大小和位置,左上角坐标和 右下角坐标,是相对于屏幕左上角来说的。 MoveWindow或 SetWindowPos中的 x,y坐标,对于对话 框来说,是相对于屏 幕左上角的,对于对 话框上的控件来说, 是相对于对话框的客 户区的左上角来说的

MFC基于对话框程序

MFC基于对话框程序

如果是.net的朋友则在菜单上选择新建・>项目,在项目类型中选择Visual C++项目,在模板中选择MFC应用程序,在名称中输入Dialog,按确定。

在应用程序类型中选择基于对话框,后按完成。

「是一个基「对话框程序就做好了。

第一次使用MFC的朋友,一定会为之喳舌.自己从零开始编程许久了,也许还不习惯别人为咱们生成代码吧.“第一映象就是乱”,这就是我的同学给我的回答。

没关系,我们可以一点一点来看和理解VC给我们生成的代码。

毕竟,它为我们节省了很多时间来打WindowSDK框架代码。

请打开类视图(ClassView),如果无误的话,我们可以看到三个类。

分别是CAboutDIg, CDialogApp, CDialogDIg 这三个类。

其中,CDialogApp是最重要的一个类。

双击CDialogApp,打开其定义体。

我们会看到它是这么定义的:1.class CDialogApp : public CWinApp我们可以看到这个类是派生于CWinApp的.在MFC编程中,这种情况很多见,继承类库类来添加自己需要的功能,然后再去使用。

在MFC应用程序中,CWinApp就是这样使用的。

查一查类库关于CWinApp的描述,是这样的;MFC中的主应用程序类」寸装用于Windows操作系统的应用程序的初始化、运行和终止。

基于框架生成的应用程序必须有且仅有一个从CWinApp派生的类的对象。

在创建窗FI之前先构造该对象.CWinApp是从CWinThread派生的,后者表示可能共布•一个或多个线程的应用程序的上执行线程。

任最新版木的MFC中,Initlnstance、Run、Exitinstance和Onldle成员函数实际位于CWinThread类中。

此处将这些函数作为CWinApp成员来探讨,因为探讨所关心的是X寸象作为应用程序对象而不是主线程的角色。

与用于Windows 操作系统的任何程序一样,框架应用程序也具有WinMain函数。

第4章 MFC框架、消息和对话框

第4章 MFC框架、消息和对话框

3)输入上面的代码。选择“工程”→“设置”命令,在出现的对话框中选 择“常规”标签。在“Microsoft基础类”(Microsoft Foundation Classes)组合 框中,选择“使用MFC作为共享的DLL”(Use MFC in a Shared DLL),如图 4-5所示。单击 按钮。
在Visual C++ 6.0创建和运行上述程序的步骤与【例Ex_HelloMsg】相同。程 序运行后,单击鼠标左键,就会弹出一个对话框,结果如图4-4所示。
1. 消息驱动机制 前面已经看到,Windows应用程序和C++控制台应用程序之间的一个最根本 区别就在于,C++控制台应用程序是通过调用系统函数来获得用户输入的, Windows应用程序则是通过系统发送的消息来处理用户输入。例如,对鼠标消息 WM_LBUTTONDOWN的处理。 2. 图形设备接口 在传统的DOS环境中,想要在屏幕或打印机上显示或打印一幅图形是非常复 杂的,因为用户必须按照屏幕分辨率模式以及专用绘图函数在屏幕上绘图,或根 据打印机类型及指令规则向打印机输送数据。Windows提供了一个抽象的接口, 称为图形设备接口(Graphical Device Interface,GDI),这使得用户直接利用 系统的GDI函数就能方便实现图形和文本的输出,而不必关心与系统相连的外部 设备的类型。
5)输入上面的代码,运行程序,结果如图4-3所示。
从上面的程序代码可以看出:
1)C++控制台应用程序以main函数作为进入程序的初始入口点,但在
Windows应用程序中,main主函数被WinMain函数取代。WinMain函数的原型如
下。
int WINAPI WinMain ( HINSTANCE hInstance, // 当前实例句柄 HINSTANCE hPrevInstance, // 前一实例句柄 LPSTR lpCmdLine, // 指向命令行参数的指针 int nCmdShow) // 窗口的显示状态

MFC编程_基于对话框的Windows应用程序

MFC编程_基于对话框的Windows应用程序

MFC编程_基于对话框的Windows应用程序第1章基于对话框的Windows应用程序1. 简介Windows编程的两种方法,即Windows API编程和MFC 编程。

2. 基于对话框的应用程序的创建过程:建立基于对话框的 MFC 应用程序框架;放置控件;设置控件属性;为控件连接变量,即为控件命名;添加并且编写消息处理函数。

3. 常用基本控件静态文本框:主要用来显示文本信息,不能接受用户输入命令按钮:是最常见的、应用最广泛的一种控件。

在程序执行期间,当单击某个命令按钮后就会执行相应的消息处理函数。

编辑框:是一个文本编辑区域,用户可以在该区域输入、编辑和显示正文内容。

框架:将一组相关的控件框起来,达到标识一组控件的作用。

单选按钮:用户在一组单选按钮中最多只能选择一项。

当某一项被选定后,其他选项自动变成未选状态。

复选框:列出了可供选择的项,用户可根据需要选择其中的一项或多项,各选项之间的状态互不相关。

列表框:通过显示多个选项,供用户选择,达到与用户对话的目的。

组合框:组合了编辑框和列表框的特性而形成的一种控件。

在列表框中列出可供用户选择的项,当用户选定某项后,该项内容自动装入编辑框中。

滚动条:通常附在对话框上用来协助观察数据或确定位置,也可以用来作为数据输入的工具。

1.1 Windows编程基础Windows 应用程序的主要特点是:具有标准的图形用户界面。

具有与硬件无关的特性。

采用“消息传递,事件驱动”的运行机制。

用 Visual C++ 编写 Windows 应用程序主要有两种方法:一是使用Windows 提供的应用程序接口(Application Programming Interface ,API )函数;二是使用Microsoft 提供的微软基础类( Microsoft Foundation Class , MFC )。

1.1.1 Windows API编程从本质上来说, API 是Windows 系统支持的函数定义、参数定义和消息格式的集合,共有上千个标准的API 函数可供应用程序调用。

创建基于对话框的MFC工程(详细图示)

创建基于对话框的MFC工程(详细图示)

实例001 如何创建基于对话框的MFC工程《Visual C++开发实战1200例(第I卷)》本书以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Visual C++进行程序开发各个方面的知识和技巧,主要包括编程基础、界面设计、应用程序控制和图形图像。

本节为大家介绍实例001 如何创建基于对话框的MFC工程。

AD:第1章开发环境工程创建开发环境设置与使用程序调试1.1 工程创建实例001 如何创建基于对话框的MFC工程要使用Visual C++开发软件,首先要创建一个工程,而基于对话框的MFC工程则是用户广泛使用的工程。

图1.1将是一个新创建的基于对话框的MFC工程。

本实例将介绍如何创建基于对话框的MFC工程。

(New窗口的Projects选项卡中选择MFC AppWizard[exe](MFC应用程序向导)选项,在Project name文本框中输入创建的工程名"Hello",在Location文本(2)单击OK按钮,弹出MFC AppWizard-Step 1窗口,如图1.3所示。

在MFC AppWizard-Step1窗口中可以指定生成框架的类型。

Single document:生成单文档应用程序框架。

Multiple documents:生成多文档应用程序框架。

Dialog based:生成基于对话框的应用程序框架。

Document/View architecture support:选中该复选框,允许生成文档/视图和非文档/视图结构程序。

(3)本实例选中Dialog based单选按钮,创建一个生成基于对话框的应用程序。

单击Next按钮,弹出MFC AppWizard-Step 2 of 4窗口,如图1.4所示。

MFC AppWizard-Step 2 of 4窗口中的主要选项介绍如下。

About box:生成"关于"对话框。

对话框编程(修改版)

对话框编程(修改版)

Example:
CNonMdlDlg * m_pNameDlg;
bool m_bActive; m_pNameDlg = new CNonMdlDlg; ……
m_bActive = TRUE;
CDialog::Create(CNonMdlDlg::IDD); …… m_bActive = FALSE; DestroyWindow(); …… m_pNameDlg->SetActiveWindow(); …… delete m_pNameDlg;
4.2.3 属性页对话框 属性表的功能都被封装在一对MFC类中: CPropertySheet和CPropertyPage。 CPropertySheet代表属性表自身,是从CWnd 派生而来。 CPropertyPage代表属性表的页, 是从CDialog派生而来。
创建属性表的步骤
1、针对属性表的每一页创建一个对话框模板,定义页的 内容和特性。将对话框标题设成你希望在属性表页上方标 签中显现的标题。 2、针对属性表的每一页由CPropertyPage派生出一个类 似对话框的类。 3、由CPropertySheet定义一个属性表对象。将属性表 类和第二步中得到的属性表页类实例化。在构造函数中利 用CPropertySheet::AddPage将各页按期望中的显示顺 序添加到属性表中。 4、调用属性表的DoModal函数将属性表显示在屏幕上 (也可以像对话框那样建立无模式的属性表)。
4.2.1 模态对话框(Modal Dialog Box)
Example: CMyDialog dlg; dlg.DoModal();
垄断消息
OK按钮消息
载入对话框模板
OnInitDialog()

基于MFC的对话框程序

基于MFC的对话框程序

管理器”、“类视图”、“属性管理器”和“资源视图”等。如图 9。
图 9 资源管理器等 图 8 窗口的中间区域为客户区,用于修改编辑窗口等资源、编写修改源
代码。 如果当前工作处于设计对话框(Dialog)时,浮动窗口“工具箱”中会出
现 VC++提供的各种常用“控件”,如图 10 所示。图 8 的最右侧是”属性”窗口, 负责显示所有控件等资源的静态属性,比如控件的标题、类型等,可根据需要对 各种属性进行修改。如图 11
MyDlgDlg.cpp文件。
图 15 事件处理程序向导 可以看到,在程序最后向导自动添加了如下函数: void CMyDlgDlg::OnBnClickedButton1() {
// TODO: 在此添加控件通知处理程序代码 } 根据任务要求,在该函数中添加需要的代码,该函数修改为: void CMyDlgDlg::OnBnClickedButton1() {
UpdateData(); // 使得Slider当前位置值进入到变量 m_nSliderH 中 CString str; // 定义字符串对象 str.Format(_T("Slider位置:%d"),m_nSliderH); // 将m_nSliderH转换为字符串 m_strShowText = str; UpdateData(FALSE); // 更新显示编辑框内容
4. 添加静态文本变量:鼠标右键单击对话框上的静态文本,跳出浮动菜单, 如图13. 单击”添加变量”, 弹出“添加成员变量向导“窗口如图14. “类别”选择 “Value”,“变量类型”选择“CString”,变量名输入m_strShowStatic.然后点击“完 成”按钮,退出该向导。如果查看MyDlgDlg.h文件,会看到在 class CMyDlgDlg 类中新添加了成员变量:
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

4.3公用对话框
使用公用对话框步骤 使用公用对话框的步骤如下: (1)创建一个对话框对象并对其属性进行设置。 (2)通过对话框类的DoModal函数向用户显示对话
框并让用户选择。 (3)获得DoModal函数的返回值,判断用户是否做
出了选择。如果用户单击了“确定”按钮返回值为 IDOK,则读取用户设置来响应用户的操作;如果用 户单击了“取消”,则不响应用户的操作。
4.2基本消息框
按钮风格参数
按钮类型
按钮风格参 数
按钮类型
MB_ABORTRETR 终止、重试、 MB_RETRY
YIGNORE
忽略
CANCEL
重试,取消
MB_OK
确定
MB_YESNO 是,否
MB_OKCANCEL
确定,取消
MB_YESNO 是,否,取
CANCEL

4.2基本消息框
图标
图标参数
信息 问号
4.4创建自定义对话框
对话框的基本知识 对话框按照其功能的不同可以分为模式对话框和无模式对话框,
它们在外观上没有什么区别,但是在对话框的创建和删除上 却有一定的区别。 模式对话框是最常见的对话框,当用户在应用程序中显示一个 模式对话框时,不能在该对话框与该应用程序的其它窗口之 间切换,而必须关闭对话框之后,才能将输入焦点转移到应 用程序的其它窗口,这种类型的对话框叫做模式对话框,也 称模态对话框。如Word字处理程序的“打开”对话框。 相对于模式对话框而言,无模式对话框不仅允许在对话框与其 它应用程序的窗口之间切换,而且允许在对话框与同一程序 的窗口之间切换,这种类型的对话框称为无模式对话框,也 称非模态对话框。在Word字处理中,“查找与替换”对话 框就是一个典型的无模式对话框,用户可以一边查找文字, 一边编辑文本。
函数? (4)模式对话框与无模式对话框的数据是如何交换的? 4.5.2作业设计 (1)扩展【例4.1】应用程序功能,设计一模式对话框,当单
击“打开对话框”按钮时,弹出该对话框。 (2)设计一个简单的计算器,有加、减、乘、除、等于等运
算符按钮和数字按钮,能够计算四则运算,将结果显示在窗 口中。
4.2基本消息框
MessageBox( )函数有三个参数。 第一个参数lpszText,是要显示给用户的消息
文本; 第二个参数lpszCaption,是要显示在消息框的
标题栏中的标题,它是可选的; 第三个参数nType,用来指定显示给用户的按
钮或图标,它也是可选的。
函数的第三个参数还可以指定消息框要显示的 图标及按钮风格,
4.4创建自定义对话框
自定义对话框的创建步骤: (1)使用对话框的资源编辑器设计对话框的外观和
控件的布局 (2)使用类向导创建新的对话框类。 (3)在对话框类中加入与控件相关联的成员变量。 (4)给对话框中的控件添加消息处理函数。 (5)在应用程序中声明对话框对象,并利用对话框
的成员函数向用户显示对话框并接收用户的选择。
4.4创建自定义对话框
非模式对话框的数据交换机制
4.4创建自定义对话框
模式对话框的数据交换机制
4.5专题讨论与作业设计
4.5.1专题讨论 (1)为什么必须指定应用程序窗口中控件的切换顺序? (2)为什么要给控件指定惟一的ID值? (3)在检查每个控件的值之前,为什么必须调用UpdateData
MB_ICONINFORMATION MB_ICONASTERISK MB_ICONHAND
MB_ICONQUESTION
停止号 MB_ICONSTOP MB_ICONERROR
惊叹号 MB_ICONWARNING MB_ICONEXCLAMATION
4.2基本消息框
按钮 确定 取消 终止 重试 忽略 是 否
第4章 MFC基于对话框编程
保定职业技术学院
第4章 MFC基于对话框编程
4.1基于对话框的应用程序 4.2基本消息框 4.3公用对话框 4.4创建自定义对话框 4.5专题讨论与作业设计
4.1基于对话框的应用程序
创建基于对话框的应用程序框 在对话框中添加控件 编辑控件的属性 关联控件与变量 关联功能与控件
4.3公用对话框
例如,使用文件打开对话框获得要打开文件 名的一般代码为:
CFileDialog fdlg(TRUE); //调用对话框,让用户选择
if(fdlg.DoModal()==IDOK) { m_edit_sRV=fdlg.GetPathName(); UpdateData(FALSE);}
返回值 1 2 3 4 5 6 7
4.2基本消息框
4.3公用对话框
公用对话框类 MFC类库提供的公用对话框类主要有: CColorDialog类:用于颜色选择对话框。 CFileDialog类:用于文件的打开或保存对话框。 CFindReplaceDialog类:用于查找或查找替换对话框。 CFontDialog类:用于字体设置对话框。 CPrintDialog类:用于打印设置对话框。
4.2基本消息框
消息框函数 消息框函数MessageBox( )是窗口类用来创建
消息框的一个成员函数,函数的定义如下: int MessageBox(
LPCTSTR lpszText, LPCTSTR, LPCTSTR lpszCaption = NULL, UINT nType = MB_OK );
相关文档
最新文档