vs2013
1.生成一个win32程序,这里使用的工程名为Win32Project1.
2.项目属性,常规中,选择使用 静态MFC库
3.修改头文件include“windows.h”为 include<afxwin.h>
4.删除win32中的所有函数
5.编写如下代码
#include "stdafx.h"
#include "Win32Project1.h"class CMyFrameWnd :public CFrameWnd
{
};
class CMyWinApp :public CWinApp
{
public:
virtual BOOL InitInstance();
};
CMyWinApp theapp; //触发
BOOL CMyWinApp::InitInstance()
{
CMyFrameWnd *pFrame = new CMyFrameWnd(); //触发
pFrame->Create(NULL,_T("MFC")); //注册窗口类,创建窗口
m_pMainWnd = pFrame;
pFrame->ShowWindow(SW_SHOW); //显示窗口
pFrame->UpdateWindow(); //更新窗口
return TRUE;
}
编译运行,就得到了一个简单的窗口。 用C语言编写一个窗口,大致需要经过,
定义窗口风格,注册窗口类,显示窗口,派发消息,窗口过程处理消息几个步骤,一大堆代码才能最终建立一个简单窗口。
MFC 建立简单窗口的代码过程是极为简便的。那么,MFC是如何初始化这个一个窗口的呢?
首先,需要指出,一个窗口程序的诞生,无论是用MFC还是C,所经历的步骤是一样的。也就是说,都必须经过,定义窗口风格,注册窗口类,显示窗口,派发消息,窗口过程处理消息几个步骤。MFC把每次建立窗口都需要进行的重复过程隐藏和封装起来了,因而我们需要的干的事情变少了,但是工作总量并没有变,只不过其余的活被MFC库干掉了而已。那么,MFC,到底是如何进行封装,最后初始化成功的呢?
这里我们用到了两个类,CFrameWnd和CWinApp。MFC把应用程序流程(也就是每个应用程序建立都必须走的流程)封装在了CWinApp中,把窗口处理过程(比如说消息响应,判断)封装在了CFrameWnd中。所以用了这两个类,就包含了建立窗口的所有要素。
具体的来说,建立了CMyWinApp theapp; 就触发了 CwinApp 的构造函数,该构造函数负责把对象theapp地址传送给模块状态信息和线程状态信息的相应的成员变量,并给窗口建立时所需的一些变量都赋上了初值(虽然大部分都是NULL值,但是没关系,后边会在程序里重新赋值)。
在对象生成以后,程序会自动转向主函数(WinMain()),是编译的时候自动链接上去的,无需我们去写。在主函数中,首先获取对象地址。放到pApp和pThread中。
pApp->InitApplication( ) //初始化程序,可以重写
pApp->InitInstance( ) //已经重写了
会调用InitInstance函数。
这里重写了InitInstance函数中,*pFrame = new CMyFrameWnd(); 触发了CMyFrameWnd 的构造函数。并得到了程序框架窗口指针。把它赋值给m_pMainWnd,程序主窗口指针,接着调用成员函数,完成窗口的定义,注册,显示工作。