当前位置:文档之家› Windows编程入门

Windows编程入门

25
2.对话框与控件
对话框
是应用程序用于显示或提示,并且等待用户输 入信息的弹出式窗口。对对话框的操作一般是通过在对话
框上添加控件来实现的。对话框与控件密不可分,在每个 对话框内都有一些控件,对话框依靠这些控件与用户交互。 可以说,对话框是Windows应用程序中最重要的用户界面 元素,是应用程序与用户进行交互的主要部件。
事实上,MFC封装了一个Windows应用程序操作的每一 方面,因此使用MFC编程,编程者可以把注意力集中于自己程 序所特有的部分,不需要事事亲自动手。与直接调用API函数 相比,这将大大减少编程者编写的代码数量,使编程工作变得 更容易;同时,程序标准部分由MFC的类来提供,可使程序变 得更规范,更具可读性,效率也更高。 对编程新手来说,MFC的最大优点是它以高效简洁的方式 为编程者做了所有标准部分的工作,特别是编程者可以在不需 要写一行代码的情况下完成一个完整的应用 程序架构(约需千行代码)。MFC中包含了成 千上万行功能强大的、经过优化的Windows 程序代码。编程者只要定义了某个MFC类的对象,就可以调用 该类的成员函数,轻轻松松完成本该由你自己一行行编写的程 序代码。从这点上说,MFC极大地降低了程序开发难度,。
20
MFC是一个很大的类层次体系(MFC6.0中包含了200多个 类),它由一个称为CObject的类作为根基类,其他类大 部分从该类派生而来,其整个类体系可大致划分为: ■基类 ■应用程序框架类。 包括:应用程序类、命令类、文档/ 视窗类、框架窗口类、文档模板类等 ■可视对象类。 包括:窗口类、对话框类、控件类等 ■绘图类。 包括:绘图工具类、设备描述表类等。 ■简单数据类型类 ■通用类 包括:数组类、类表类、映像类 ■文件和数据库类 包括:文件I/O类、ODBC类、ADO类 ■Internet和网络工作类 包括:Win32 Internet类、 Windows Socket类等 ■对象链接和嵌入(OLE, Object Lingking and Embedding)类 21 ■调试和异常类
API支持所有Windows应用程序的开发系统, 如VC++、VB、Java等。
19
2. 基于Microsoft MFC的编程方法
MFC是微软基础类库(Microsoft Foundation Class)
的缩写。与API不同,MFC不是Windows操作系统的组成 部分,而是微软公司专为VC++开发的配套软件包。与VC6 配套的是MFC6.0。 MFC充分使用了面向对象方法中的继承和多态性技术,以 类的方式封装了Windows应用程序所涉及的几 乎所有的标准部件,如Windows应用程序的 架构、各种标准的图形界面元素、其核心是 它以C++的形式封装了Windows API的大部分函数。
事件(event)是什么?事件的含义很广泛,简单地说,事
件就是激活对象执行程序代码的一种动作。
在Windows的操作环境中,无论系统产生的动作还是运行程 序时用户产生的动作都称为事件。最常见的用户事件是鼠标 事件和键盘事件。实际上,任何一个拥有设备驱动程序的系 统输入设备(包括端口)都可以产生各种事件,发送自己的 消息。
24
■单文档(Single document)窗口 由CframeWnd类支持。文档窗口主要由边框、标题栏、 菜单栏、工具栏、编辑区等组成。 ■多文档(Multiple documents,MDI)窗口 由多个文档窗口组成,其中第一个打开的是主框架窗口, 由CMDIFrameWnd类支持,其他为子框架窗口,由 CMDIChildWnd类支持。子框架窗口没有菜单栏 和工具栏,它们共享主窗口的菜单栏和工具栏。 ■对话框(Dialog) 对话框是一种特殊类型的窗口,它没有菜单栏和工具栏, 且一般不能改变窗口的大小。对话框由Cdialog类支持。
即应用程序的运行没有严格的起点和终点以及固 定的流程,各对象之间没有规定的执行顺序, 即程序的运行过程是不明确的,而是由事件 及其消息控制着对象的激活和程序的运行过程。 对象通常处于循环休眠状态,当发生了某个事件并有相应 消息传递给对象,才会按照消息的指示执行程序代码,一 次消息的处理工作完毕后又恢复休眠状态以等待下一个事 件的发生及其消息的到来。 13
从MFC的面向对象模型看,一个Windows应
用程序可以拆分成许多功能独立的对象,各 自负责不同类型的工作,其最基本的构成对象可以分为两大 类:程序对象和窗口对象。
11
一个应用程序的执行就像一场舞台演出。应用程序对象是幕后人员 (导演、剧务等),它们负责安排并指挥“演员”(窗口)上场,准 备和调度各种演出“资源”(如菜单、工具栏、图标等)。从操作系 统来看,具有“法人”地位的是应用程序对象而非窗口对象,应用程 序可以占有CPU时间和内存空间,还可拥有演出所需的“资源”。
6
【例1.2】 #include<iostream> using namespace std; int main() { double r; cout<<”请输入圆半径:”<<endl; cin>>r; cout<<”圆周长=”<<2*3.1416*r <<endl; cout<<”圆面积=”<<3.1416*r*r<<endl; return 0; } 这是基于控制台的文字用户界面应用程序。运行这种程序之 后,屏幕出现MS-DOS窗口,并且按照程序代码的流程执 7 行,用户输入数据后即显示执行结果。
22
1.3 窗 口
窗口是Windows图形用户界面的最基本和最重要的部
件,每一个Windows程序至少有一个窗口。故Windows 图形用户界面也称窗口界面。
23
1. 框架窗口
框架窗口是应用程序的主窗口,负责管理其包容的其 他窗口。一个应用程序的最顶层的框架窗口是应用程序启 动时创建的第一个窗口。 MFC提供了由基类CWnd(窗口类)派生的4个框架 窗口类: CFrameWnd CMDIFrameWnd CMDIChildWnd Cdialog 用于支持三种标准框架窗口:
15
当在对象上发生了某个事件并发出了相应的消息后,接收 者对象就要响应并处理该消息。每个需要响应的消息要求 对应一个处理该消息的程序——事件驱动程序。响应 消息就是启动相应的事件驱动程序 。 Windows 中将响应 消息的过程称为消息映射。
16
1.;进行Windows编程有两种方法: ■基于Windows API函数的编程方法 ■基于Microsoft MFC的编程方法
17
1. 基于Windows API函数的编程方法
API是应用程序编程接口(Application Programming
Interface)的缩写,是Windows操作系统与Windows应 用程序之间的标准接口。作为Windows操作系统的组成 部分(shell),API提供了1000多个可供应用程序直接调 用的C函数(在Windows API参考手册中有详细介绍), 这些函数大致可分为三类: ■窗口管理函数:实现窗口的创建、移动和修改功能。 ■图形设备接口函数:实现与具体显示设备无关的图形操 作。 ■系统服务函数:实现操作系统提供的各种实用服务功能。
消息(message)是Windows定义
(WinUser.h头文件)的一种特殊的数据 结构(MSG),它打包了“事件”发生 的相关信息,例如:消息接收者的句柄、 事件的类型和来源、消息参数等。
14
Windows系统有各种各样的消息,消息的传递无时不在发 生,即使电脑闲置时,还会有系统时间的消息传递出来。 任何一个看似十分简单的动作都会引发窗口之间许多消息 的交换。在VC++中, 什么对象可以产生或接收什么事件,是由MFC规定的。 例如,命令按钮有鼠标单击(BN_CLICKED)和双击 (BN_DOUBLECLICKED)事件; 文本编辑框有改变文本(EN_CHANGE) 、接受输入焦点(EN_SETFOCUS)、 失去输入焦点(EN_KILLFOCUS)、 单击垂直滚动条(EN_VSCROLL)等事件。
9
Visual C++支持可视化的图形用户界面设计。Windows 应用程序的每个图形界面元素(如对话框、菜单、命令按 钮、文本框等)都是可视的(Visual),即设计时在显 示器屏幕上是可见的,且所见即所得。编程者可根据具体 用户界面设计的要求,直接使用VC++系统提供的标准工
具在屏幕上“画”出各种Windows风格的图形界面元素, 而不必为这些界面元素的构建设计大量代码,VC++会自动 生成这些界面元素的设计代码,开发人员只需为每个图形 界面元素设置特定的属性值,代码编写只针 对界面元素所要实现的具体功能。
18
使用API设计Windows应用程序,对于理解和掌握面 向对象程序设计的思想和方法是相当关键的,是想成为 Windows编程高手的必经之路。但它要求编程者必须熟 知Windows应用程序的架构、事件驱动以及消息传递等 内部机制,并且仍然必须编写大量代码,即它要求编程者 具备较高的专业素质,这对初学者来说无疑是比较困难的。 当然,使用API编程更具灵活性和个性化。
8
进行 Windows 编程,同样可以写出相同功能的程序,程 序运行出现如图1和图2所示的窗口。图1中的窗口称为文 档窗口,图 2 中的窗口称为对话框。显然,它们比 MSDOS的文字用户界面更为友好且方便。这种界面称为
图形用户界面(GUI, Graphical User Interface)。
在非可视化环境下,图形用户界面的设计 都需通过编写程序代码来实现,且在设计 过程中是看不到界面的实际显示效果的。
Windows系统给每个对象分配一个句柄 (handle),它是一个4字节长的整数值, 是对象的唯一内部编号。应用程序通过句柄 访问相应的对象。每个对象除了句柄外,还 有一个对象标识符ID,可看作是对象的外 部名。ID与句柄的区别主要在于:ID可以是 用户自行设定的;而句柄是系统内定的,对 用户是透明的,这能防止应用程序直接访问 对象的内部信息。
相关主题