醋酸氯已定栓图片:转贴:MFC Windows程序设计语言总结

来源:百度文库 编辑:中财网 时间:2024/05/02 04:48:11

我在刚开始接触Windows编程时, 从Visual Basic开始, 从MFC开始, 虽然写出了程序, 但自己都不知道程序是如何运行的, 从而造成写程序"容易"修改难, 设计程序"容易"维护难的状况. 经过MFC Windows程序设计的学习之后,明白了有关知识。     
        API函数是Windows提供给应用程序的编程接口, 任何用户应用程序必须运行在API函数之上. 直接使用API编程是了解操作系统运行细节的最佳方式, 而且熟知API函数也是对程序开发者的一个最基本的要求. 这课程以API函数作为起点介绍Windows编程, 使我撇开C++的特性专心熟悉Win32编程思路和消息驱动机制.
      但是, 在开发大型系统的时候, 往往并不完全直接使用API函数, 而是使用MFC类库框架程序. MFC对90%以上的API函数进行了面向对象化包装, 完全体现了对象化程序设计的特点, 是目前流行的类库.
      当我熟悉最基本的API函数编程以后, 就可以学习更高级的MFC编程了. 但是, 虽然MFC仅仅是对API函数的简单封装, 由于我之前对C++语言的了解不够, 不清楚框架程序的工作机制, 即便是有经验的程序员在MFC复杂的结构面前也显得非常困惑. 他们会"用"MFC, 却不知道为什么这么"用", 在运行程序出错时这种现象带来的问题就很明显, 他们不会改.
      面对一个大的项目, 代码往往需要手工添加和修改, 而很少能够依靠VC++的向导. 为此, 这门课程介绍了设计MFC中的类. 函数和宏定义. 通过对MFC类库的分析和了解, 不仅能够使我更好地使用MFC类库, 同时, 对于自己设计和实现框架和类, 无疑也有相当大的帮助. 之后, 这课程还讲述了Windows系统编程中当前最为热门的话题--DLL注入技术. 远程进程技术. HOOKAPI技术等, 并配有完整而具体的实例.
      
    从这门MFC Windows 应用程序设计,我掌握了 :
1 .Windows应用程序的基础知识
Windows应用程序是靠消息来驱动的,消息是一个描述事件的结构。
在Windows应用程序的主函数中,首先要注册窗口类,然后创建并显示窗口。创建窗口后程序就进入消息循环,在消息循环中,程序不断地获得消息并将消息派送给对应的窗口函数进行处理。
   窗口函数是处理事件的地方,它为switch-case结构,每一个case对应一段消息相应代码。
    用函数对Windows应用程序进行封装可以使程序的结构更为清晰。
Windows应用程序的类封装
   CWinApp类是MFC对Windows主函数的封装,通过派生 CWinApp可以得到自己的应用程序类,在应用程序类中主要实现了全局初始化操作,应用程序类创建了主窗口后便进入了消息循环。
      应用程序的主窗口一般都是CFrameWnd的派生类,可以通过派生该类得到自己的主窗口类。
    Windows应用程序的窗口函数封装到CCmdTarget类中,所有希望相应消息的类都应该以CCmdTarget为基类来派生。
     MFC是用消息映射表来实现消息与消息相应函数之间的映射的。MFC通过四个宏来声明和实现消息映射表。MFC的这种表驱动的机制使消息处理结构变

得更加清晰,明了。
3 . MFC应用程序框架
   应用程序类,框架窗口类,试图类,文档类构成了应用程序的框架,框架的功能是通过各类之间的协调工作实现的类。
   MFC采用文档/试图结构来实现数据和数据表现的分离,文档试图的分离有利于数据和数据表现的单独改变。
   MFC用类信息存储了动态创建类对象时所需要的消息。
4 图形
   Windows提供了图形用户接口使用户得以在窗口中绘图。
    在MFC中使用CDC类的派生类来向窗口和打印机等输出设备绘图。每个设备环境中包含笔画.画刷,位图,调色板,字体等GDI对象。
    可以通过创建GDI对象并将其选入设备环境来实现所需要的绘图操作。
5   MFC的通用类
在MFC中,仍然可以使用Windows及C的所有数据类型。但是,为了把数据与对数据的操作方法封装在一起,MFC又定义了一些和数据相关的类从而使得数据的使用更加方便。习惯上人们把这些类叫做通用类。
简单的数据类CPoint,CSize和CRect;
字符串类CString;
集合数据类的基本概念及CArray类;
文档类和视图类之间的数据传递。
    视图类对象用成员函数GetDocument获得文档类对象指针,然后视图对象通过这个指针来访问文档对象中的数据。
6 Windows应用程序的界面的设计
Windows应用程序的界面有单文档界面和多文档界面的区别,目前多文档界面已经不被人们所喜欢。
    每次绘图操作结束后调用视图类成员函数InvalidateRect启动OnDraw函数以更新显示。
      文档/视图类型的应用程序可以实现一个文档多个显示,但是在文档的内容发生改变的时候,要对所有的视图进行更新。
   在需要时,应用程序的界面可以设计为带有滚动条的窗口形式。但在设计时要注意文档坐标与视图坐标之间的转换。
7   鼠标和键盘
   在应用程序的界面上,可以通过鼠标左击,右击,移动等事件来对用户的鼠标输入进行处理。
     鼠标消息有用户区鼠标消息和非用户区鼠标消息两种,在应用程序中主要使用用户区鼠标消息。
     可以用消息捕获函数来捕获窗口外的鼠标消息,以完成某些特殊的操作。可以通过处理字符消息,按键等键盘消息对用户的键盘操作进行相应。在计算机的显示器屏幕上,如果有多个窗口存在的话,则具有焦点的窗口所对应的应用程序是具有接收用户消息能力的程序,这个程序叫做“正在活动状态的应用程序”。可以用鼠标单击窗口使它具有焦点,当应用程序的窗口获得输入焦点时,会发出WM_SETFOCUS消息;而当窗口失去输入焦点时,会发出WM_KILLFOCUS消
息。
8 资源
资源是供Windows应用程序使用的数据,它们驻留在执行文件中。程序运行时,随着程序的需要,这些数据可以被动态地加载进入内存。资源是程序用户界面的重要组成部分。常用资源有菜单,加速键,图标,位图。程序所需要的资源使用资源描述文件来说明,并在资源头文件中用标识符唯一地标识。资源可以使用VisualC++的资源编辑器来创建和编辑,也可以使用文本编辑器来编辑。
    菜单的使用与Windows的命令消息WM_COMMAND相关。
    菜单项消息映射宏的格式是:
    ON_COMMAND
    菜单项动态修改的消息映射宏的格式是:
    ON_UPDATE_COMMAND_UI
    在文档/视图结构的程序中,资源的加载是由应用程序类的InitInstance函数通过构造CDocTemplate(包括其派生类)对象来完成的。
   加速键在资源描述文件中与所对应的菜单项关联。
    图标使用Visual C++开发环境的菜单ProjectAdd To Project/Files添加。
    位图要用CBitmap对象来保存,由成员函数LoadBitmap来加载,在显示时需先绘制到内存DC中,然后再用BitBlt函数把它由内存DC复制到显示设备的DC上。
9 MFC的文件处理机制
    文件是存储在永久性存储介质上的数据的集合。在面向对象的应用程序中也涉及对象存盘的问题。对象存盘使用序列化的机制实现。
    序列化就是把对象的当前状态以文件的形式写入永久性存储体中,在需要的时候从文件中读取它,并在应用程序中重建对象的过程。使用序列化机制把对象存盘称为对象的永久化,这样的对象称为永久性对象。
     MFC通过宏DECLARE_SERIAL和IMPLEMENT_SERIAL给类添加动态重建对象和序列化操作的代码。宏DECLARE_SERIAL用在类声明中,宏IMPLEMENT_SERIAL用在类实现中。同时,该类必须从CObject类或其派生类派生,并重载Serialize函数。Serialize函数借助类CArchive对象实现对象的序列化。CArchive对象是一种I/O,它借助CFile对象完成磁盘文件数据的存取操作。MFC把文件的打开,关闭,读写操作封装在类CFile中。CFile对象代表一个磁盘文件,使用CFile对象可以直接对文件进行操作。
10 控件
控件是应用程序窗口的子窗口。MFC的控件类封装了Windows的标准控件和通用控件,这些控件类都派生于类CWnd。
   静态文本控件由类CStatic封装,按钮控件由类CButton封装,编辑控件由类CEdit封装,进度条控件由类CProgessCtrl封装,微调器控件由类CSpinButtonCtrl封装,图象列表控件由类CImageList封装,列表视图控件由类CListCtrl封装。控件类的使用与窗口类CWnd的使用基本相同。
     控件自己有特有的行为特点,在各自的类中由相应的成员函数实现。
控件颜色的设置在Windows消息WM_CTLCOLOR的消息响应函数OnCtlColor中完成。其消息映射宏是ON_WM_CTLCOLOR()。
11    对话框
   对话框是Windows应用程序与用户交互的重要手段,分为模态对话框和非模态对话框。对话框的基本行为由类CDialog封装,对话框的外观由模版资源定义。对话框模版资源可以使用Visual C++的资源编辑器来创建和编辑。
    掌握了对话框模版资源描述文件,对话框的定义及使用,对话框的数据交换和检验,对话框的应用程序,通用对话框,非模态对话框,属性页方面的知识。
12 进程与线程的管理
   进程是一个正在运行的应用程序的实例,拥有应用程序的所有资源,进程由一个或多个线程组成。线程是进程中一个独立的执行路径。Windows按照一定的规则,如优先级和先后次序,给线程分配CPU时间。
还掌握了工作线程和用户界面线程,线程同步,线程通信。
13 动态链接库
    动态链接库(DLL)是程序运行时装载和连接的一种二进制文件,主要是通过它的各种导出函数,类和资源来向外界提供服务并允许同时被多个不同的进程所共享。
     DLLMain是Windows的动态链接库的入口函数,主要作用是调用动态链接库时,完成初始化工作。
     声明为导出函数有两种方法:在.def文件中用函数的名称来声明;使用关键字_declspec(dllexport)来声明。
      在VisualC++中,动态链接库分为非MFC DLL,常规型DLL和扩展型DLL三种。
    创建第一种动态链接库使用向导Win32 Dynamic-Link Library,创建第二和第三种使用MFC AppWizard(dll)。
    动态链接库的导出函数被其他程序模块调用,在这些程序模块中称之为导入函数。应用程序使用DLL文件中的导出函数有两种方式:隐式链接和显式链接。
14 组件对象模型基础
      掌握了组件对象模型(COM)概述;使用DOM组件;组件的包含和聚合;进程外组件;使用ATL设计COM组件。
15    用MFC开发ActiveX应用
    掌握了ActiveX技术的基本概念;ActiveX容器;ActiveX服务器;自动化;ActiveX控件与ActiveX文档的有关知识。
   ActiveX是一种为了适应互联网需要而发展起来的基于COM的技术。
16 用MFC设计数据库应用程序
     数据库系统一般由数据库,数据库管理系统和数据库应用系统构成。数据库是存放数据的仓库。为使一个数据库应用系统适用于所有的数据库管理系统,人们在数据库应用系统和数据库管理系统之间增加一个公认的标准接口。ODBC和DAO是两个常用的标准接口。
     MFC有两组数据库类:一组是基于ODBC的,一组是基于DAO的。
   经过这门课程的学习不但使我掌握了Windows应用程序设计的基本方法,还可以使我进一步深刻,全面地理解面向对象程序设计的思想,从而把握程序设计方法的发展方向。

为了您的安全,请只打开来源可靠的网址

打开网站    取消

来自: http://hi.baidu.com/cai066/blog/item/89f577091d5660226a60fb43.html