今天就要是用手工的方式写一个基本的MFC应用程序,来了解MFC应用程序的基本要素。
先打开VC60工具,按下面的步骤操作。
1. 进入VC File菜单中的New, 然后单击Projects. 选择Win32 Application选项。输入工程名称HelloWorld 点击Ok
如下图
2. 在Win32 Application中,选择An Empty Project选项。 如上图
3. 下面添加源代码到工程。选择File ( New 添加Hello.h 与Hello.cpp到工程中。并输入源代码。 如下图
4. 设置工程。 从Project菜单,选择Setting选项。 选择Use MFC In A Shared DLL 如下图
5. 运行程序。 Ctrl+F5 运行结果如下图
工程中使用到的源文件分别是Hello.h 与 Hello.cpp 代码分别如下
Hello.h 的代码
Hello.cpp的代码
下面我们分析一下上面的源代码。
1. 在Hello.cpp文件中包含了#include <afxwin.h>头文件,它是MFC类及一些全局函数的申明。(AFX就是那个写MFC的组织哈~)。(在MFC中,全局函数的形式提供了自己各类的API函数,名字以Afx打头的,它与类的成员函数有区别。比如AfxMessageBox与Windows MessageBox函数是全局等价,但不同于CWnd::MessageBox)
2. 应用程序对象
从上面可以看到我们先从CWinApp中派生了自己的CMyApp类,然后全局一个实例对象myApp.
MFC应用程序的核心就是基于CWinApp类的应用程序对象。CWinApp提供了消息循环来检索消息并将消息调度给应用程序的窗口。一个MFC应用程序可以有且仅有一个应用程序对象,此对象必须声明为在全局范围内有效,以便它在程序开始时即在内存中被实例化。
在CMyApp中,只覆盖了一个从CWinApp类中继承来的虚函数CWinApp::InitInstance
CWinApp::InitInstance是一个虚函数,它的功能是为应用程序提供一个自身初始化的机会。当从InitInstance返回FALSE将关闭应用程序。返回TRUE将允许程序继续进行。
看CMyApp::InitInstance() 中的代码,如下
(CWinApp中其它比较有趣的虚函数,CWinApp::ExitInstance, CWinApp::OnIdle,可以参考MFC手册)
3. 框架窗口对象
代码如下
4. 消息映射
需要将消息映射添加到一个类中需要做的全部工作。
第一步, 通过将DECLARE_MESSAGE_MAP ()语句添加到类声明中,声明消息映射。
第二步, 通过放置标识消息的宏来执行消息映射,相应的类将在对BEGIN_MESSAGE_MAP与END_MESSAGE_MAP的调用之间处理消息
第三步,添加成员函数来处理消息
代码如下
对于自定义的消息是添加ON_MESSAGE宏,它接上两个参数:消息ID与对应类成员函数地址。如ON_MESSAGE(WM_SETTEXT,OnSetText),
OnSetText的声明方式如下
afx_msg LRESULT OnSetText(WPARAM wParam,LPARAM lParam);
好了,现在让我们大家动手来写一个MFC程序吧。