第2章 Windows程序设计基础

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第2章Windows程序设计基础——勿在浮沙筑高楼,打好基础是关键教学内容§2.1Windows编程基础§2.2MFC程序设计基础§2.3应用程序框架§2.4综合实例——创建宾馆管理系统的框架§2.5小结思考与练习§2.1Windows编程基础2.1.1Windows编程基本概念1、窗口窗口是Windows应用程序中一个非常重要的元素。一个Windows应用程序至少要有一个窗口,称为主窗口。从用户的角度讲,窗口是屏幕上与一个应用程序相对应的矩形区域,是用户与应用程序之间的图形化的接口。每当用户打开一个应用程序时,应用程序就会创建并显示一个窗口;当用户操作窗口中的对象时,窗口就会做出反映;关闭主窗口时就会终止应用程序的运行;通过选择应用程序窗口,就会选择与窗口对应的应用程序。从程序员的角度讲,窗口是Windows应用程序的基本操作单元,是系统管理应用程序的基本单位,是应用程序与用户之间交互的接口。应用程序的运行过程就是窗口内部、窗口与窗口之间、窗口与系统之间进行数据处理和数据交换的过程。因此,编写应用程序就是要创建一个或多个窗口,管理多个窗口之间的数据处理与交换。§2.1Windows编程基础2.1.1Windows编程基本概念窗口的特性是由一个WNDCLASS结构体进行定义的。WNDCLASS定义如下:typedefstructtagWNDCLASS{UINTstyle;//窗口风格WNDPROClpfnWndProc;//指向窗口处理函数的函数指针intcbClsExtra;//窗口结构中的预留字节数intcbWndExtra;//为其它创建窗口预留字节数HINSTANCEhInstance;//注册该窗口类的实例句柄HICONhIcon;//代表该窗口类的图标句柄HCURSORhCursor;//该窗口客户区鼠标光标句柄HBRUSHhbrBackGround;//该窗口背景颜色句柄LPCSTRlpszMenuName;//指向窗口菜单名的字符指针LPCSTRlpszClassName;//指向窗口名的字符指针}WNDCLASS;§2.1Windows编程基础2.1.1Windows编程基本概念2、句柄在Windows程序中,每产生一个资源(如图标、光标、窗口、应用程序的实例等),操作系统都要将它们放入相应的内存,并为这些内存指定一个唯一的标识号,这个标识号即该资源的句柄。操作系统要管理和操作这些资源,都是通过句柄来找到对应的资源的,句柄是系统用来唯一标识某个Windows对象的符号。句柄的数据类型在winnt.h中说明如下:typedefvoid*HANDLE;从物理上看句柄是一个泛型(无类型)指针,但它不是指向一个Windows对象的存储首地址,而是指向包含了使用该对象有关信息的一块内存单元。从逻辑上说它是一个代号,一个对象的代号。句柄所指向的内容是不能由句柄操作来改变的,只能由系统来改变。§2.1Windows编程基础2.1.1Windows编程基本概念3、消息和消息队列Windows程序设计是面向事件的。在Windows环境下,应用程序启动后,系统等待用户在图形用户界面内的输入选择,如鼠标按键、键盘按键、窗口被创建、关闭、改变大小、移动等,在Windows看来,这些都是事件。只要有事件发生,系统即产生特定的消息,驱动相应的处理函数进行处理,因此Windows应用程序也称为事件驱动程序。消息描述了事件的类别,包含了相关信息,Windows应用程序利用消息与系统及其它应用程序进行信息交换。由于windows事件的发生是随机的,程序的执行先后顺序也无法预测,系统采用消息队列来存放事件发生的消息。每个Windows程序都有一个消息队列,该队列是一个先进先出的缓冲区,通常是一个某种变量类型的数组。§2.1Windows编程基础2.1.1Windows编程基本概念3、消息和消息队列在winuser.h中,消息结构的定义如下:typedefstructtagMSG{HWNDhWnd;//指定消息发向的窗口句柄UINTmessage;//标识消息的消息值WPARAMwParam;//消息参数LPARAMlParam;//消息参数DWORDtime;//消息进入队列的时间POINTpt;/消息进入队列时鼠标指针的屏幕坐标}MSG;§2.1Windows编程基础4、数据类型数据类型说明BYTE8位无符号字符BSTR32位字符指针COLORREF32位整数,表示一个颜色WORD16位无符号整数LONG32位有符号整数DWORD32位无符号整数,是WORD的两倍长度UINT32位无符号整数BOOL布尔值,值为TRUE或FALSEHANDLE句柄LPSTR32位指针,指向字符LPCSTR32位指针,指向字符串常量LPTSTR32位指针,指向字符串,此字符串可移植到Unicode和DBCS双字符集LPCTSTR32位指针,指向字符串常量,此字符串可移植到Unicode和DBCS双字符集LPVOID32位指针,可指向任何类型数据LPRESULT32位数值,作为窗口函数或CALLBACK函数的返回类型WNDPROC32位指针,指向一个窗口函数§2.1Windows编程基础2.1.2Windows应用程序的结构1、Windows应用程序的构成构成Windows程序的基本元素包括程序代码、用户界面资源和动态链接库(dynamic-linklibrary)库。程序代码主要由可执行代码构成,Windows程序要求有两个函数:一个是WinMain。WinMain函数是应用程序的基础,Windows应用程序的入口函数。当Windows操作系统启动一个程序时,它调用的就是该程序的WinMain函数。另一个是窗口处理函数WndProc,对来自系统的消息进行处理。资源是应用程序能够使用的一类预定义工具,用户界面资源是应用程序定义的图形用户接口GUI(graphicaluserinterface),如菜单、对话框、按钮等。§2.1Windows编程基础2.1.2Windows应用程序的结构2、Windows消息处理(1)当Windows应用程序开始执行时,操作系统在预定的入口WinMain与应用程序连接。(2)应用程序创立一个或多个窗口,每个窗口(包括对话框)都有一个窗口过程函数,程序通过窗口接收用户的输入和决定窗口显示。(3)各种输入产生的消息首先进入系统队列,由系统根据产生消息的窗口将消息发至窗口所在应用程序的消息队列。(4)程序的消息循环代码段检索从消息队列中来的消息,并把它们返回Windows系统,由系统发送到对应的窗口过程函数进行处理,对于程序未响应的消息,发送至缺省窗口过程函数进行处理。§2.1Windows编程基础2.1.3Windows程序示例为了帮助读者理解Windows编程的概念,下面编写一个简单的Windows应用程序。该程序创建一个窗口,并在该窗口响应鼠标和键盘消息。程序的实现步骤如下:WinMain函数的定义。创建一个窗口。进行消息循环。编写窗口过程函数§2.2MFC程序设计基础2.2.1MFC类库的层次结构CObjectCWndCCmdTargetCFrameWndCControlBarCPropertySheetCButtonCComboBoxCEditCListBoxCStaticCTreeCtrlCDialogBarCToolBarCStatusBarCDialogCPropertyPageCCommonDialogCViewCScrollViewCScrollView§2.2MFC程序设计基础2.2.2MFC定义的宏、全局函数及全局变量1.MFC提供的主要宏:□消息映射宏:声明消息映射表宏DECLARE_MESSAGE_MAP、定义消息映射表宏BEGIN_MESSAGE_MAP和END_MESSAGE_MAP对、消息映射表入口宏ON_加消息名。□动态MFC对象宏:DECLARE_DYNCREATE和DECLARE_DYNAMIC,IMPLEMENT_DYNCREATE和IMPLEMENT_DYNAMIC□运行时类宏:RUNTIME_CLASS□序列化宏:DECLARE_SERIAL和IMPLEMENT_SERIAL□诊断服务宏:ASSERT、VERIFY□跟踪服务宏:TRACE□异常处理宏:THROW§2.2MFC程序设计基础2.2.2MFC定义的宏、全局函数及全局变量2.全局函数MFC提供一些不属于任何类的全局函数,函数名以Afx开头,可以被应用程序中的所有类和函数所调用。如:□AfxAbort:无条件终止一个应用程序的执行;□AfxGetAppName:返回指向应用程序名的字符串指针;□AfxWinInit由WinMain调用,对MFC应用程序进行图形用户界面(GUI)的初始化等等。□AfxGetApp:返回指向应用程序的CWinApp对象的指针。§2.3应用程序框架2.3.1构架Windows应用程序框架1、创建应用程序框架使用VisualC++.NET的应用程序向导,生成一个名为AnalyzeMFC的VC++.NET项目。注意,我们这个例程中的应用程序的类型为“单文档”类型。在项目AnalyzeMFC中,应用程序向导为用户生成了4个类,这些类所对应的头文件和源文件如表2-5所示。序号类名头文件实现文件1CAnalyzeMFCAppAnalyzeApp.hAnalyzeMFC.cpp2CAnalyzeMFCDocAnalyzeMFCDoc.hAnalyzeMFCDoc.cpp3CAnalyzeMFCViewAnalyzeMFCView.hAnalyzeMFCView.cpp4CMainFrameMainFrm.hMainFrm.cpp§2.3应用程序框架2.3.1构架Windows应用程序框架2、应用程序的执行过程intAFXAPIAfxWinMain(...){CWinApp*pApp=AfxGetApp();AfxWinInit(...);pApp-IninApplication();pApp-InintInstance();nReturnCode=pApp-Run();AfxWinTerm();}CMyWinApptheApp;BOOLCMyWinApp::InitInstance(){m_pMainWnd=newCMyFrameWnd();m_pMainWnd-ShowWindow(m_nCmdShow);m_pMainWndUpdateWindow();returnTRUE;}CMyFrameWnd::CMyFrameWnd(){Create(NULL,„,„,„)}CWinApp::Run();CWinThread::Run(){„do{::GetMessage(&msg,„);PreTranslateMessage(&msg);::TranslateMessage(&msg);::DispatchMessge(&msg);„}while(::PeakMessage());„}DefWindowProc()AfxWndProc()§2.3应用程序框架2.3.2文档和视图1、文档与视图的概念:文档(document)指的是数据组合的抽象,它通常对应磁盘文件,也可以对应I/O端口(包括打印机、键盘)或一块内存空间(串流)。同样的数据,我们可以用不同的方式来表示。把纯的数据放在文件中或数据库中,而把显示方式分离出来,可以让一份数据有多种不同的显示方式,程序中的数据表现称为“视图”(view)。这样就可以分别考虑数据的保存——文档,和数据的表现——视图。文档就是数据,CDocument就可以简单地理解为负责处理数据的类。在MFC编程时,我们应该把所有要处理的从外部获得的数据全部放在文档类及其派生类的对象中。CDocument类是一个预先编好的类,只是提供了一个外壳或者讲框架,程序员可以在Document中建立实际要用的数据格式及其管理方法。最常用的方法当

1 / 24
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功