在编程语言中,函数是一个很重要的概念,其身影无处不在。在面向过程的编程方式中,函数更是程序的基本构建模块,在面向对象的编程方式中,函数演变为类或对象的成员(当然也可以使用与类无关的函数)。

函数由函数头和函数体组成。函数头包括域属性(如external、static或类域)、返回值类型、函数名、及参数。域属性包括其在多文件编程中的可见范围,是否是属于某一个类的成员?返回值类型是指函数返回的值的具体数据类型(可以理解为函数输出的一部分)。函数名是函数保存在内存代码区的首地址,用于函数的调用及函数指针的右值。参数可以理解为函数的输入、输出(如果是引用或指针作为参数,可以理解为是一个种输出,因为其操作或更新的数据是引用或指针的地址值所指向的内存单元)。在C\C 中,函数体位于{}中,函数体是函数功能的具体实现。

如果用一台手机来理解函数概念,手机裸露在外的操作界面就像是函数头,外壳内的组件就像是函数体中,外壳就像是{}。

函数的开发者和使用者可以站在不同的角度去理解函数的构造,函数的开发者需要负责函数头作为界面(interface)的友好性及稳定性,以及保证实现(implement)函数功能的函数体的空间和时间效率。而函数的使用者可以不关心函数功能的具体实现(当然了解其具体实现能更好地加深对函数的理解),也就是不心关心函数体的具体内容,只需关心函数使用的具体细节,也就是函数体的内容。

开发需要读写文件的应用程序并且有简单的输入和输出可以利用单文档视结构。

开发注重交互的简单应用程序可以使用对话框为基础的窗口,如果文件读写简单这可利用CFile进行。

在要求在多个文档间传递数据时使用多文档视结构。

开发mfc程序(CC控制台程序)(1)

6 图形界面程序中的资源

资源在Windows API中使用一种特殊的结构体指针,句柄来引用。

Windows API开发之初C 还没有出现,所以windows提供的API函数使用的封装数据类型是结构体(不是类)。随着C 的诞生与普及,Windows API C 就诞生了MFC,且资源控件开发实现了可视化,而封装数据类型也用类类型来实现。

开发mfc程序(CC控制台程序)(2)

常用的资源:ICON、CURSOR、BITMAP、FONT、DIALOG、MENU、ACCELERATOR、STRING、VERSIONINFO、TOOLBAR。

开发mfc程序(CC控制台程序)(3)

7 图形界面程序中的事件与消息

Windows API是编程者自己把消息和响应函数联系在一起。mfc是编程者采用微软为我们做好了MESSAGE-MAP机制,来处理消息。

8 函数库和类库

Windows API和MFC都使用 .lib 文件。

.lib 分两种, 一种是 .lib 文件里面包含了 cpp 编译出来的代码, 链接的时候把需要的代码拷贝到 exe 里面,mfc,、crt在选择静态的时候使用这种方式。

另外一种是.lib中不包含代码, 只是描述该到哪个dll里面怎么找对应的代码. 这种编译出来的exe就需要dll一起才能运行。mfc、crt使用共享库的时候, 以及 Windows API 就是使用的这种方式。

API 的 dll 在 windows 系统的 system32 目录下, 图形界面相关的 API 在 USER32.dll 里,进程、文件之类的操作在 kernel32.dll 里。MSDN 的每个函数都会说明它在哪个头文件, 哪个 lib, 哪个 dll 里的。

9 C、C 控制台程序、Windows API程序、MFC程序比较

开发mfc程序(CC控制台程序)(4)

C 并不是纯种的对象导向语言(SmallTalk 和Java 才是)。所以,MFC之中得以存在有不属于任何类别的全域函数,它们统统在函数名称开头冠以Afx。

SDK 程序只要包含WINDOWS.H 就好,所有API 的函数声明、消息定义、常数定义、宏定义、都在WINDOWS.H 档中。除非程序另调用了操作系统提供的新模块(如CommDlg、ToolHelp、DDEML...),才需要再各别包含对应的.H 档。

开发mfc程序(CC控制台程序)(5)

关于类的继承性在MFC的控件类中有最充分的体现,在MFC中,各种控件类的框架都已搭建好,其中包含了最通用的属性和方法以及一些虚函数,开发者可以重写虚函数或派生控件类来实现自己的功能或个性化的需求。

-End-

,