1 / 24

第 2 章 Windows 编程基础

第 2 章 Windows 编程基础. 2.1.1 简单的 Windows 应用程序. 简单的 Windows 应用程序。 [ 例 Ex_HelloMsg] 一个最简单的 Windows 应用程序 ( 1 ) 运行 Microsoft Visual C++ 6.0 后,选择“文件”  “新建”菜 单命令,打开应用程序向导,显示出“新建”对话框。. 2.1.1 简单的 Windows 应用程序. ( 2 )在工程名称框中键入 Win32 应用程序项目名称 elloMsg 。 ( 3 )单击 [ 确定 ] 按钮继续。.

elani
Download Presentation

第 2 章 Windows 编程基础

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第2章 Windows编程基础

  2. 2.1.1 简单的Windows应用程序 简单的Windows应用程序。 [例Ex_HelloMsg] 一个最简单的Windows应用程序 (1) 运行Microsoft Visual C++ 6.0后,选择“文件”“新建”菜 单命令,打开应用程序向导,显示出“新建”对话框。

  3. 2.1.1 简单的Windows应用程序 (2)在工程名称框中键入Win32应用程序项目名称elloMsg。 (3)单击[确定]按钮继续。 (4)再次选择“文件”“新建”菜单命令,显示出“新建”对话框。 “新建”对话框文件页面

  4. 2.1.1 简单的Windows应用程序 (6)在文档窗口中输入下面的代码: #include <windows.h> int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance ,LPSTR lpCmdLine, int nCmdShow) { MessageBox (NULL, "你好,我的Visual C++世界!", "问候", 0) ; return 0 ; }

  5. 2.1.1 简单的Windows应用程序 • 编译并运行程序从上面的程序可以看出: • WinMain函数的原型如下: • int WINAPI WinMain ( • HINSTANCE hInstance, // 当前实例句柄 • HINSTANCE hPrevInstance,// 以前的实例句柄 • LPSTR lpCmdLine,// 指向命令行参数的指针 • int nCmdS // 窗口的显示状态 • 每一个Win32应用程序都需要Windows.h头文件,包含了一些Windows头文件。 • 程序中,MessageBox是一个Win32 PI(ApplicationProgramming Interface, 应用程序接口)函数,用来弹出一个对话框窗口,显示短信息。

  6. 2.1.1 简单的Windows应用程序 [例Ex_HelloWin] 一个较完成的Windows应用程序 (1) 按照Ex_HelloMsg示例方法,创建一个An empty project类型的Win32 Application(Win32 应用程序)项目Ex_HelloWin。 (2)选择“文件”“新建”菜单命令,显示出“新建”对话框。单击“文件”标签,在左边的列表框中选择C++ Source File项,在右边的“文件”框中键入Ex_HelloWin.cpp,单击[确定]按钮。 (3)在文档窗口中输入代码: Ex_HelloMsg示例相比,Ex_HelloWin要复杂的多,可以将其分是两个基本函数的程序结构。 函数WndProc用来接收和处理各种不同的消息,而WinMain函数通常要完成以下几步工作: 定义并调用API函数RegisterClass注册应用程序的窗口类。

  7. 2.1.1 简单的Windows应用程序 函数CreateWindow用来创建已注册窗口类的窗口。CreateWindow函数具有下列原型: HWND CreateWindow( LPCTSTR lpClassName, // 已注册的窗口类名 LPCTSTR lpWindowName, // 窗口标题 DWORD dwStyle, // 窗口风格 int x, // 窗口的水平位置 int y, // 窗口的垂直位置 int nWidth, // 窗口宽度 int nHeight, // 窗口高度 HWND hWndParent, // 父窗口句柄 HMENU hMenu, // 菜单句柄或控件标识 HINSTANCE hInstance, // 应用程序实例句柄 LPVOID lpParam// 其他窗口创建时的参数数据

  8. 2.1.1 简单的Windows应用程序 • API函数GetMessage 和DispatchMessage就是起到这样的作用。 如果接收到WM_QUIT消息,则退出应用程序。 (4) 编译运行程序,窗口中单击鼠标左键,会弹出对话框。

  9. 2.1.1 简单的Windows应用程序 Windows应用程序的基本流程:

  10. 2.1.2 Windows编程特点 完整的Windows应用程序除了WinMain函数外,包含用于处理用户动作和窗口消息的窗口函数。 还会发现一个Windows应用程序还常常具有一些特性: • 消息驱动机制 • 图形设备接口(GDI) • 基于资源的程序设计 • 动态链接库 1. 消息驱动机制 Windows程序和控制台应用程序之间一个最根本区别,在于控制台应用程序是通过调用系统函数来获得用户输入,而Windows程序则是通过系统发送的消息来处理用户输入。 Windows操作环境中,无论是系统产生的动作或用户运行应用程序产生的动作,称为事件(Events)产生的消息(Message)。

  11. 2.1.2 Windows编程特点 2. 图形设备接口(GDI) 而Windows则提供了一个抽象的接口,称为图形设备接口,使得用户直接利用系统的GDI函数就能方便实现图形和文本的输出。 • 基于资源的程序设计 • Windows应用程序包含众多图形元素,如光标、菜单、工具栏、位图、对话框等。 4. 动态链接库 在Windows操作系统中,最主要的DLL有KERNEL32.DLL、GDI32.DLL和USER32.DLL。 KERNEL32.DLL用来处理存储器低层功能、任务和资源管理等Windows核心服务; GDI32.DLL提供图形设备接口,管理用户界面和图形绘制,包括Windows元文件、位图、设备描述表和字体等; USER32.DLL负责窗口的管理,包括消息、菜单、光标、计时器及其它与控制窗口显示相关的一些功能。

  12. 2.1.3 Windows基本数据类型 Windows常用的基本数据类型 :

  13. 2.1.3 Windows基本数据类型 HINSTANCE和LPSTR等,这样的数据类型只是一些基本数据类型的别名,在Windows编程中常用的基本数据类型。 需要说明的是: 这些基本数据类型都是用大写字符来表示,以与一般C++基本数据类型相区别。 凡是数据类型的前缀是P或LP,则表示该类型是一个指针或长指针数据类型。若前缀是U,则表示无符号数据类型,等等。 Windows还提供一些宏来处理上述基本数据类型。例如,LOBYTE和HIBYTE分别用来获取16位数值中的低位和高位字节;LOWORD和HIWORD分别用来获取32位数值中的低位字和高位字;MAKEWORD是将两个16位无符号值结合成一个32位无符号值,等等。

  14. 2.2.1 绘制文本 Windows窗口通常有标题栏和边框,其中默认背景色为白色区域称为窗口的客户区。 [例Ex_WinText] 文本绘制 (1)新建一个“An empty project”类型的Win32 pplication(Win32 应用程序)项目Ex_WinText。 (2)新建一个C++源文件(Source File)Ex_WinText.cpp。 (3)编译并运行程序,Ex_WinText运行结果:

  15. 2.2.1 绘制文本 hdc定义的是句柄HDC变量,TextOut等GDI函数都要通过这样的HDC句柄来绘制图形和文本。 EndPaint用来释放设备描述表句柄,并使先前无效区域变为有效,使Windows不再发送M_PAINT消息。 PAINTSTRUCT是“绘图信息结构”,BeginPaint和EndPaint函数都需要PAINTSTRUCT结构变量作为自己的参数。 TextOut函数是用来显示文本的最常用的GDI函数,有下列原型: BOOL TextOut( HDC hdc, // 设备描述表句柄 int nXStart, // 文本显示的水平起始位置 int nYStart, // 文本显示的垂直起始位置 LPCTSTR lpString, // 要显示的文本 int cbString// 要显示的文本长度

  16. 2.2.2 使用控件 在Win32应用程序中,可在窗口基础上通过CreateWindow函 数来创建一个控件窗口。 例Ex_WinControl] 控件的使用 (1) 新建一个“An empty project”类型的Win32 ApplicationWin32 应用程序)项目Ex_WinControl。 (2) 新建一个C++源文件(Source File) _WinControl.cpp,并输入代码 (3) 编译并运行程序,填入一元二次方程的系数后,单击[计算]按钮,求解的结果就会显示出来,

  17. CObject CWinTread CCmdTarget CDocument CWinApp CWnd CFrameWnd CView CDialog及控件 CMDIChildWnd CMiniFrameWnd CMDIFrameWnd 2.3.1 MFC概述 微软公司为应用程序设计者提供了Win16 API,在此基础 上推出了Windows GUIMFC类的基本层次结构如图 :

  18. 2.2.3 设计一个MFC程序 例Ex_HelloMFC] 一个MFC应用程序。 (1) 创建一个“An empty project”类型的Win32 Application(Win32 应用程序)项目Ex_HelloMFC。 (2) 选择“文件”“新建”菜单命令,显示出“新建”对话框。单击“文件”标签,在左边的文件类型列。 (3) 表框中选择C++ Source File项,在右边的“文件”下的编辑框中键入Ex_HelloMFC.cpp,单击[确定]按钮。在文档窗口中输入代码 。 (4) 选择“工程”“设置”菜单命令,在出现的对话框中选择“General”标签。然后在“Microsoft Foundation Classes”组合框中,选择“Use MFC in a Shared DLL”。单击[OK]按钮。 (5) 程序运行后,单击鼠标左键,就会弹出一个对话框,结果同Ex_HelloWin。

  19. 2.3.3 理解程序代码 1. 程序运行机制 MFC是使用afxwin.h来代替头文件windows.h,在Ex_HelloMFC程序中却看不到Windows应用程序所必须的程序入口函数inMain。 自动查找该应用程序类CHelloApp的全局变量eApp,然后自动调用CHelloApp的虚函数InitInstance,该函数会进一步调用相应的函数来完成主窗口的构造和显示工作。 首先执行的是: m_pMainWnd = new CMainFrame();然后执行后面两 句,用作窗口的显示和更新。 m_pMainWnd->ShowWindow(m_nCmdShow); m_pMainWnd->UpdateWindow(); 最后返回TRUE,表示窗口创建成功。

  20. 2.3.3 理解程序代码 映射一个消息的过程是由三个部分组成的: (1) 在处理消息的类中,使用消息宏LARE_MESSAGE_MAP()声明对消息映射的支持,并在该宏之前声明消息处理函数。 (2) 使用BEGIN_MESSAGE_MAP和END_MESSAGE_MAP 宏在类声明之后的地方定义该类支持的消息映射入口点,所 有消息映射宏都添加在这里,当然不同的消息MFC都会有不 同的消息映射宏。 (3) 定义消息处理函数。例如: void CMainFrame::OnLButtonDown(UINT nFlags, CPoint point) { MessageBox ("你好,我的Visual C++世界!", "问候", 0) ; CFrameWnd::OnLButtonDown(nFlags, point); }

  21. 2.3.4 使用MFC AppWizard 表2.2 MFC AppWizard创建的应用程序类型

  22. 2.3.4 使用MFC AppWizard [例Ex_SDIDemo] 创建一个默认的单文档应用程序 1.开始 选择“文件”“新建”菜单,在弹出的“新建”对话框中选择“工程”标签,这时显示出一系列的应用程序项目类型; 2 .选择程序类型 (1) 从应用程序类型单个文档(Single Document,简称SDI)、 多重文档(Multiple Document ,简称MDI)和基本对话框(Dia log Based,基于对话框的应用程序)中选择“单个文档”。 (2) 决定应用程序中是否需要MFC的文档视图(“文档/查看体 系结构支持”)结构的支持。

  23. 2.3.4 使用MFC AppWizard (3) 选择资源所使用的语言 3. 简单创建 保留其他的默认选项,单击[完成]按钮出现一个对话框,显示 出用户在步骤中作出的选择,单击[确定]按钮系统开始创建。 4. 编译并运行 到这里为止,用户虽然没有编写任何程序代码,但MFC AppW izard已经根据用户的选择内容自动生成基本的应用程序框架。 单击编译工具条 上的运行工具按钮 ”或按快捷键Ctrl+F5,系统开始编连并运行生成的单文档应用程序可执行文件Ex_SDIDemo.exe

  24. 习 题 (1) 分别编写一个Win32 API应用程序和一个Win32 MFC应用程序,给定一元二次方程的系数,然后将求 解的结果用消息对话框显示出来。 (2) 编写一个Win32 API应用程序,在主窗口中创建 一个编辑框和一个按钮,单击按钮后,将编辑框的内 容用消息对话框显示出来。 (3) 用MFC AppWizard创建一个单文档应用程序,看 看该文档应用程序组成的类,并说明各类的基类,然 后简要说明各类的作用。 (4) 上机练习本章的示例。

More Related