!!接下来我们将通过一个较长的程序示例Shapes来学习菜单的相关知识;
1. 使用MFC AppWizard[exe]来创建一个代码框架:
1) 使用VC6.0创建;
2) 新建项目,选择MFC AppWizard[exe],工程名为“Shapes”,然后点击“OK”;
3) 选择"Single docment“并取消选中"Document/View architecture support?”来进制AppWizard生成文档/视图应用程序,然后Next;
4) 取消选中ActiveX空间框,然后Next;
5) 取消选中Docking Toolbar、Initial Status Bar和3D Controls复选框,然后直接Finish;
6) 可以看到有5个.cpp文件以及对应的.h文件;
2. StdAfx.h和StdAfx.cpp:
1) 这是微软创造的一种快速构建应用程序的技术;
2) 由于MFC程序的大部分功能都是由MFC背后的类库实现的,而不需要用户自己去实现,因此这部分代码必然后会以头文件的形式包含在工程中;
3) 由于MFC底层代码相当庞大,如果是非常松散地包含在工程中可能会导致每次修改用户自己的代码并编译时这些自动生成的大规模代码也会被重新编译,但实际上这部分代码通常是不会改变的,因此重新编译会浪费很多时间,所以微软就想出了一种解决方案,那就是——预编译头文件(Precompiled Headers);
4) StdAfx.h和StdAfx.cpp就是典型的预编译头文件组合,其中StdAfx.h中包含了大部分MFC基础类库,比如afxwin.h这类文件,而StdAfx.cpp中就包含了一句话,那就是#include "stdafx.h",VC编译器可以自动识别这两个文件,在第一次对StdAfx.cpp编译后,之后就再也不会对其重新编译了,这样就大大加快了应用程序的构建速度;
5) StdAfx.h中所有的头文件将被编译成"工程名.pch"和"StdAfx.obj",pch即Precompiled Headers的缩写;
6) 预编译头文件的技术在于,必须将所有的静态头文件(即在之后的编程过程中永远也不会改变的头文件)都统统包含在StdAfx.h中,而静态头文件通常都是一些系统预定义的头文件,比如math.h等,因为静态头文件的不变性决定了一次编译之后就不用在编译的事实,而那些会动态变化的用户自定义的头文件则不适合包含在StdAfx.h中,因为变化后就需要重新编译,从而工程构建速度本质上还是没有提升;
7) !!!VC++不识别#include "StdAfx.h"之前的任何语句!!!比如:
sdfwe;x#@!%hahahah!!!
#include "StdAfx.h"
!这个规则非常有趣 ,所以如果要包含一些头文件的话必须卸载#inculde "StdAfx.h"的下面:
#include "StdAfx.h"
#include <math.h>
!如果math.h被写在上面将不会被识别,所以很多MFC程序员会被这样的问题所烦恼!
!!其实这是一个非常好的策略&