第04章 MFC基本应用程序的建立

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

4.1Windows编程基础 编程基础
程序运行,单击鼠标左键,如图. 窗口过程函数WndProc用来接收和处理各种不同的消息,WinMain函数通常 要完成: 调用API函数RegisterClass注册应用程序的窗口类. 调用相关API函数创建和显示窗口,并进行必要的初始化.CreateWindow 创建已注册窗口类的窗口.Windows每一个窗口都有一些基本属性.窗口 类就是充当这些属性的模板. 创建和启动应用程序的消息循环.Windows应用程序接受各种不同的消息. Windows系统首先将消息放入消息队列中,应用程序的消息循环就是从应 用程序的消息队列中检取消息,并将消息发送相应的窗口过程函数中作进 一步处理. 如果接收到WM_QUIT消息,则退出应用程序
4.1Windows编程基础 编程基础
hwnd = CreateWindow ("HelloWin", // 窗口类名 "我的窗口", // 窗口标题 WS_OVERLAPPEDWINDOW, // 窗口样式 CW_USEDEFAULT, // 窗口最初的 x 位置 CW_USEDEFAULT, // 窗口最初的 y 位置 CW_USEDEFAULT, // 窗口最初的 x 大小 CW_USEDEFAULT, // 窗口最初的 y 大小 NULL, // 父窗口句柄 NULL, // 窗口菜单句柄 hInstance, // 应用程序实例句柄 NULL) ; // 创建窗口的参数 ShowWindow (hwnd, nCmdShow) ; // 显示窗口 UpdateWindow (hwnd) ; // 更新窗口,包括窗口的客户区 // 进入消息循环:当从应用程序消息队列中检取的消息是WM_QUIT时,则退出循环. while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg) ; // 转换某些键盘消息 DispatchMessage (&msg) ; // 将消息发送给窗口过程,这里是 WndProc } return msg.wParam ; }
4.1Windows编程基础 编程基础
4.1.3Windows基本数据类型 基本数据类型
4.1Windows编程基础 编程基础
需要说明的是: 这些基本数据类型都是以大写字符出现. 凡是数据类型的前缀是P或LP,表示该类型是一个指针或长指针数据类型. 前缀是H,表示是句柄类型.前缀是U,表示是无符号数据类型. 还提供一些宏来处理上述基本数据类型.LOBYTE和HIBYTE分别用来获取16 位数值中的低位和高位字节;LOWORD和HIWORD分别用来获取32位数值 中的低位和高位字;MAKEWORD是将两个16位无符号值结合成一个32位无 符号值.
4.1Windows编程基础 编程基础
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_CREATE: // 窗口创建产生的消息 return 0 ; case WM_LBUTTONDOWN: MessageBox (NULL, "你好,我的Visual C++世界!", "问候", 0) ; return 0 ; case WM_DESTROY: // 当窗口关闭时产生的消息 PostQuitMessage (0) ; return 0 ; } return DefWindowProc (hwnd, message, wParam, lParam) ; // 执行默认的消息 处理 }
图4.2 Ex_HelloWin运行结果 运行结果
4.1Windows编程基础 编程基础
应用程序的基本流程,如图.
图4.3 Windows应用程序的基本流程 应用程序的基本流程
4.1Windows编程基础 编程基础
4.1.2Windows编程特点 编程特点
消息驱动机制 DOS程序是通过调用系统的函数来获得用户输入的,Windows程序则是通 过操作系统发送的消息来处理用户输入的. 无论是系统产生的动作或是运行应用程序产生的动作,都称为事件(Events) 产生的消息(Message).在应用程序中,通过接收消息,分发消息,处理消 息来和用户进行交互.许多消息都经过了严格的定义,并且适用于所有的 应用程序. 图形设备接口(GDI ) DOS环境中,要在打印机上打印一幅图形是非常复杂的事件.Windows则 提供了一个抽象的接口,称为图形设备接口(Graphical Device Interface, 简称GDI),使得用户直接利用系统的GDI函数就能方便实现输入或输出,而 不必关心与系统相连的外部设备的类型. 基于资源的程序设计 Windows应用程序常常包含众多图形元素,每一个这样的元素都作为一种 可以装入应用程序的资源来存放.这些资源可以被编辑,修改,也可以被 其他应用程序所共享.VC中提供的许多编辑器能"所见即所得"地进行不 同类型资源的设计,编辑等.
4.1Windows编程基础 编程基础
动态链接库 提供一些特定结构的函数,能被应用程序在运行过程中装入和连接,多个 程序可以共享同一个动态链接库.从编程角度,动态链接库可以提高程序 模块的灵活性,它本身是可以单独设计,编译和调试的. Windows提供了应用程序可利用的丰富的函数调用,大多数用于实现其用 户界面和在显示器上显示的文本和图形,都是通过动态链接库来实现的. Windows中,KERNEL32用来处理存储器低层功能,任务和资源管理等核心 服务; GDI32用来提供图形设备接口,管理用户界面和图形绘制;USER32 负责窗口的管理. 进程和线程 Windows是一个32位多任务操作系统,采用进程和线程的管理模式. 进程是装入内存中正在执行的应用程序.进程包括私有的虚拟地址空间, 代码,数据及其它操作系统资源.进程包括了一个或多个在进程上下文内 运行的线程. 线程是操作系统分配CPU时间的基本实体.线程可以执行应用程序代码的任 何部分,包括当前正在被其它线程执行的那些部分.同一进程的所有线程 共享同样的虚拟地址空间,全局变量和操作系统资源. 一个应用程序,包括一个或多个进程,每个进程由一个或多个线程构成.
4.1Windows编程基础 编程基础
输入上面的代码,运行程序,如图. 从程序可以看出 : 图4.1 Ex_HelloMsg运行结果 运行结果 传统的DOS程序以main函数作为进入程序的初始入口点,但在Windows应 用程序中,main函数被WinMain函数取而代之,WinMain函数的原型如下: int WINAPI WinMain ( // 当前实例句柄 HINSTANCE hInstance, HINSTANCE hPrevInstance, // 前一实例句柄 // 指向命令行参数的指针 LPSTR lpCmdLine, int nCmdShow) // 窗口的显示状态 句柄是一个标识Windows资源(如菜单,图标,窗口等)和设备等对象的变量, 或者是一个对操作系统资源的间接引用. 每一个Windows应用程序都需要Windows.h头文件,它还包含了其他的一些 Windows头文件.这些头文件定义了Windows的所有数据类型,函数调用, 数据结构和符号常量. MessageBox是一个Win32 API(Application Programming Interface, 应用程 序接口)函数,用来弹出一个对话框窗口,显示短信息.该函数第一个参数 用来指定父窗口句柄,即对话框所在的窗口句柄.第二,三个参数分别用来 指定显示的消息内容和对话框窗口的标题,最后一个参数用来指定在对话框 中显示的按钮.
4.2编制一个 编制一个MFC应用程序 编制一个 应用程序
4.2.1MFC概述 概述
1987年微软公司推出了第一代Windows产品,并为应用程序设计者提供了 Win16 API,在此基础上推出了Windows GUI(图形用户界面),然后采用面 向对象技术对API进行封装.1992年推出应用程序框架产品AFX(Application Frameworks),并在AFX的基础上进一步发展为MFC产品.MFC类的基本层 次结构如图. CObject
第4章MFC基本应用程序的建立 章 基本应用程序的建立
4.1 Windows编程基础 编程基础 4.2 编制一个 编制一个MFC应用程序 应用程序 4.3 使用 使用MFC AppWizard 4.4 使用ClassWizard 使用 作业
4.1Windows编程基础 编程基础
4.1.1简单的 简单的Windows应用程序 简单的 应用程序
4.1Windows编程基础 编程基础
[例Ex_HelloWin] 一个完整的Windows应用程序. #include <windows.h> LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); // 窗口过程 int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { HWND hwnd ; // 窗口句柄 MSG msg ; // 消息 WNDCLASS wndclass ; // 窗口类 wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc= WndProc ; wndclass.cbClsExtra =0; wndclass.cbWndExtra= 0 ; wndclass.hInstance= hInstance ; wndclass.hIcon= LoadIcon (NULL, IDI_APPLICATION) ; wndclass.hCursor= LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground= (HBRUSH) GetStockObject (WHITE_BRUSH) ; wndclass.lpszMenuName= NULL ; wndclass.lpszClassName= "HelloWin"; // 窗口类名 if (!RegisterClass (&wndclass)) // 注册窗口 { MessageBox (NULL, "窗口注册失败!", "HelloWin", 0) ; return 0 ; }
CWinTread
ห้องสมุดไป่ตู้
CCmdTarget
[例Ex_HelloMsg] 一个简单的Windows应用程序. #include <windows.h> int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MessageBox (NULL, "你好,我的Visual C++世界!", "问候", 0) ; return 0 ; } 运行上述程序需要进行以下步骤: 选择"File" "New".单击Projects,选中Win32 Application项. 在Project Name框中键入项目名称Ex_HelloMsg.在Location下的编辑框中 直接键入文件夹名称,或单击Browse按钮(...)选择一个已有的文件夹. 单击[OK].选中An empty project项.单击[Finish],单击[OK]系统将自动 创建此应用程序. 选择"File" "New".单击File标签,在左边的列表框中选择C++ Source File项,在右边的File框中键入Ex_HelloMsg.cpp,单击[OK].
相关文档
最新文档