当前位置:高等教育资讯网  >  中国高校课件下载中心  >  大学文库  >  浏览文档

《Windows程序设计》课程教学资源(PPT课件讲稿)第四章 MFC基本应用程序的建立

资源类别:文库,文档格式:PPT,文档页数:54,文件大小:383KB,团购合买
第4章MFC基本应用程序的建立 4.1 Windows编程基础 4.2编制一个MFC应用程序 4.3使MFC用 AppWizard 4.4使用 ClassWizard
点击下载完整版文档(PPT)

第4章MFC基本应用程序的建立 41 Windows编程基础 4.2编制一个MFC应用程序 43使用 MFC Appwizard 4.4使用 Classwizard 作业

第4章MFC基本应用程序的建立 4.1 Windows编程基础 4.2 编制一个MFC应用程序 4.3 使用MFC AppWizard 4.4 使用ClassWizard 作业

4.1 Windows编程基础 41.1简单的 Windows应用程序 [例 Ex_ HelloMsg]一个简单的 Windows应用程序。 #include int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MessageBox(NULL,"你好,我的 Visual c++世界!","问候",0); return i 运行上述程序需要进行以下步骤: 选择“Fie”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]

4.1Windows编程基础 4.1.1简单的Windows应用程序 [例Ex_HelloMsg] 一个简单的Windows应用程序。 #include 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]

4 Windows编程基础 候 输入上面的代码,运行程序,如图 你好,我的 Vi sual c+世界 确定 从程序可以看出: Ex HelloMsg运行结果 传统的DOS程序以man函数作为进入程序的初始入口点,但在 Windows应 用程序中,main函数被 WinMain函数取而代之, Winmain函数的原型如下: int WINAPI Win Main( NSTANCE hinstance∥/当前实例句柄 HINSTANCE hPrevInstance,∥/前一实例句柄 LPSTR lpCmdline ∥/指向命令行参数的指针 nt ncmdshow ∥/窗口的显示状态 句柄是一个标识 Windows资源(如菜单、图标、窗口等)和设备等对象的变量, 或者是一个对操作系统资源的间接引用。 >每一个 Windows应用程序都需要 Windows. h头文件,它还包含了其他的一些 Windows头文件。这些头文件定义了 Windows的所有数据类型、函数调用、 数据结构和符号常量。 MessageBox是一个Win32API( Application Programming Interface,应用程 序接口)函数,用来弹出一个对话框窗口,显示短信息。该函数第一个参数 用来指定父窗口句柄,即对话框所在的窗口句柄。 个参数分别用来 指定显示的消息内容和对话框窗口的标题,最后一个参数用来指定在对话框 中显示的按钮

4.1Windows编程基础 ➢ 输入上面的代码,运行程序,如图。 从程序可以看出 : ➢ 传统的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.1 Ex_HelloMsg运行结果

4 WIndows编程基础 [例 Ex Hellowin]一个完整的 Windows应用程序。 #include LRESULT CALLBACK Wnd Proc(HWND, UINT, WPARAM, LPARAM);∥/窗口过程 nt WiNAPi Win Main(HINSTANCE hInstance, hinSTaNCe hPrevinstance, LPSTR pCmdLine, int nCmdShow) HWND hwnd i ∥/窗口句柄 MSG msg i ∥/消息 WNDCLASS wndclass ∥/窗口类 wndclass style =CS_HREDRAWI CS-VREDRAW i wndclass. IpfnWndProc= WndProc wndclass. cbClsExtra 0 wndclass. cbWndExtra=0i wndclass hInstance= hInstance wndclass hIcon= LoadIcon(NULL, IDI_ APPLICATION); wndclass h Cursor= Load Cursor(NULL, IDC_ARROW)i wndclass hbr Background= (HBRUSH) GetstockObject(WHITE_BRUSH) wndclass. IpszMenuName= NUL wndclass. IpszclassName=“" Hellowin”; ∥/窗口类名 if (!RegisterClass( &wndclass)) /注册窗口 MessageBox(NUL,"窗口注册失败!"," Hellowin",0); return 0

4.1Windows编程基础 [例Ex_HelloWin] 一个完整的Windows应用程序。 #include 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 ; }

4.1 Windows编程基础 hwnd= CreateWindow( HelloWin ∥/窗口类名 我的窗口" ∥/窗口标题 WS_ OVERLAPPEDWINDOW,∥/窗口样式 CW USEDEFAULT ∥/窗口最初的x位置 CW USEDEFAULT ∥/窗口最初的y位置 CW_ USEDEFAULT ∥/窗口最初的x大小 CW USEDEFAULT ∥/窗口最初的y大小 NULL ∥/父窗口句柄 NULI ∥/窗口菜单句柄 hInstance, ∥/应用程序实例句柄 NULL)i ∥/创建窗口的参数 Show Window(hwnd, nCmdShow)i ∥/显示窗口 UpdateWindow(hwnd) ∥/更新窗口,包括窗口的客户区 ∥/进入消息循环:当从应用程序消息队列中检取的消息是 WM_ QUIT时,则退出循环 while(GetMessage(&msg, NULL, 0, o)) t TranslateMessage( &msg ∥/转换某些键盘消息 DispatchMessage(&msg)i ∥/将消息发送给窗口过程,这里是 Wnd Proc } return msg. wParam

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.1 Windows编程基础 LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM WParam LPARAM IParam) switch(message) case WM create ∥/窗口创建产生的消 return o case WM LBUTTONdOWN MessageBox(NUL,"你好,我的 Visual c++世界!","问候",0) return o case WM destroy ∥/当窗口关闭时产生的消息 PostQuitMessage(0)i return 0 return defwindow proc( hwnd, message, pAran, IParam);∥/执行默认的消息 处理

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.1 Windows编程基础 程序运行,单击鼠标左键,如图。 窗口过程函数 WndProc用来接收和处理各种不同的消息, WinMain函数通常 要完成 >调用API函数 Register Classi注册应用程序的窗口类 调用相关API函数创建和显示窗口,并进行必要的初始化。 Create Window 创建已注册窗口类的窗口。 Windows每一个窗口都有一些基本属性。窗口 类就是充当这些属性的模板。 创建和启动应用程序的消息循环。 Windows应用程序接受各种不同的消息。 Windows系统首先将消息放入消息队列中,应用程序的消息循环就是从 用程序的消息队列中检取消息,并将消息发送相应的窗口过程函数中作进 步处理 如果接收到 WM QUT消息,则退出应用程序 我的窗口 你好,我的vsua1c+世界 图42 Ex Hellowin运行结果

4.1Windows编程基础 程序运行,单击鼠标左键,如图。 窗口过程函数WndProc用来接收和处理各种不同的消息,WinMain函数通常 要完成: ➢ 调用API函数RegisterClass注册应用程序的窗口类。 ➢ 调用相关API函数创建和显示窗口,并进行必要的初始化。CreateWindow 创建已注册窗口类的窗口。Windows每一个窗口都有一些基本属性。窗口 类就是充当这些属性的模板。 ➢ 创建和启动应用程序的消息循环。Windows应用程序接受各种不同的消息。 Windows系统首先将消息放入消息队列中,应用程序的消息循环就是从应 用程序的消息队列中检取消息,并将消息发送相应的窗口过程函数中作进 一步处理。 ➢ 如果接收到WM_QUIT消息,则退出应用程序 图4.2 Ex_HelloWin运行结果

4.1 Windows编程基础 应用程序的基本流程,如图 图43 Windows应用程序的基本流程

4.1Windows编程基础 应用程序的基本流程,如图。 图4.3 Windows应用程序的基本流程

4.1 Windows编程基础 412 Windows编程特点 >消息驱动机制 DOS程序是通过调用系统的函数来获得用户输入的, Windows程序则是通 过操作系统发送的消息来处理用户输入的 无论是系统产生的动作或是运行应用程序产生的动作,都称为事件( Events) 生的消息( Message)。在应用程序中,通过接收消息、分发消息、处理消 息来和用户进行交互。许多消息都经过了严格的定义,并且适用于所有的 应用程序。 图形设备接口(GDI) DOS环境中,要在打印机上打印一幅图形是非常复杂的事件。 Windows则 提供了一个抽象的接口,称为图形设备接口( Graphical Device Interface, 简称GDI),使得用户直接利用系统的GDI函数就能方便实现输入或输出,而 不必关心与系统相连的外部设备的类型 基于资源的程序设计 Windows应用程序常常包含众多图形元素,每一个这样的元素都作为一种 可以装入应用程序的资源来存放。这些资源可以被编辑、修改,也可以被 其他应用程序所共享。VC中提供的许多编辑器能“所见即所得”地进行不 同类型资源的设计、编辑等

4.1Windows编程基础 4.1.2Windows编程特点 ➢ 消息驱动机制 DOS程序是通过调用系统的函数来获得用户输入的,Windows程序则是通 过操作系统发送的消息来处理用户输入的。 无论是系统产生的动作或是运行应用程序产生的动作,都称为事件(Events) 产生的消息(Message)。在应用程序中,通过接收消息、分发消息、处理消 息来和用户进行交互。许多消息都经过了严格的定义,并且适用于所有的 应用程序。 ➢ 图形设备接口(GDI ) DOS环境中,要在打印机上打印一幅图形是非常复杂的事件。Windows则 提供了一个抽象的接口,称为图形设备接口(Graphical Device Interface, 简称GDI),使得用户直接利用系统的GDI函数就能方便实现输入或输出,而 不必关心与系统相连的外部设备的类型。 ➢ 基于资源的程序设计 Windows应用程序常常包含众多图形元素,每一个这样的元素都作为一种 可以装入应用程序的资源来存放。这些资源可以被编辑、修改,也可以被 其他应用程序所共享。VC中提供的许多编辑器能“所见即所得”地进行不 同类型资源的设计、编辑等

4.1 Windows编程基础 >动态链接库 提供一些特定结构的函数,能被应用程序在运行过程中装入和连接,多个 程序可以共享同一个动态链接库。从编程角度,动态链接库可以提高程序 模块的灵活性,它本身是可以单独设计、编译和调试的 Windows提供了应用程序可利用的丰富的函数调用,大多数用于实现其用 户界面和在显示器上显示的文本和图形,都是通过动态链接库来实现的 Windows中, KERNEL32用来处理存储器低层功能、任务和资源管理等核心 服务;GDI32用来提供图形设备接口,管理用户界面和图形绘制;USER32 负责窗口的管理 进程和线程 Windows是一个32位多任务操作系统,采用进程和线程的管理模式 进程是装入内存中正在执行的应用程序。进程包括私有的虚拟地址空间 代码、数据及其它操作系统资源。进程包括了一个或多个在进程上下文内 运行的线程。 线程是操作系统分配CPU时间的基本实体。线程可以执行应用程序代码的任 何部分,包括当前正在被其它线程执行的那些部分。同一进程的所有线程 共享同样的虚拟地址空间、全局变量和操作系统资源 个应用程序,包括一个或多个进程,每个进程由一个或多个线程构成

4.1Windows编程基础 ➢ 动态链接库 ◆ 提供一些特定结构的函数,能被应用程序在运行过程中装入和连接,多个 程序可以共享同一个动态链接库。从编程角度,动态链接库可以提高程序 模块的灵活性,它本身是可以单独设计、编译和调试的。 ◆ Windows提供了应用程序可利用的丰富的函数调用,大多数用于实现其用 户界面和在显示器上显示的文本和图形,都是通过动态链接库来实现的。 ◆ Windows中,KERNEL32用来处理存储器低层功能、任务和资源管理等核心 服务; GDI32用来提供图形设备接口,管理用户界面和图形绘制;USER32 负责窗口的管理。 ➢ 进程和线程 ◆ Windows是一个32位多任务操作系统,采用进程和线程的管理模式。 ◆ 进程是装入内存中正在执行的应用程序。进程包括私有的虚拟地址空间、 代码、数据及其它操作系统资源。进程包括了一个或多个在进程上下文内 运行的线程。 ◆ 线程是操作系统分配CPU时间的基本实体。线程可以执行应用程序代码的任 何部分,包括当前正在被其它线程执行的那些部分。同一进程的所有线程 共享同样的虚拟地址空间、全局变量和操作系统资源。 ◆ 一个应用程序,包括一个或多个进程,每个进程由一个或多个线程构成

点击下载完整版文档(PPT)VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
共54页,可试读18页,点击继续阅读 ↓↓
相关文档

关于我们|帮助中心|下载说明|相关软件|意见反馈|联系我们

Copyright © 2008-现在 cucdc.com 高等教育资讯网 版权所有