在微软设计MFC是为了使编程人员在实际开发过程中更方便快捷而设计的基础类库。
MFC程序要遵循的一个过程是:进入WinMain函数,设计窗口类,创建窗口,显示窗口,更新窗口,然后进入消息循环;MFC本来就是基于消息循环创建的,如果没有消息循环,窗口会一闪而过;看代码:
//消息循环
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);//接收消息
DispatchMessage(&msg);//分配消息
if (msg.message == WM_KEYDOWN)
{
break;
}
}
但是这些窗口的创建过程函数并没有定义和声明,那源码在哪呢,实际上,在安装Visual studio时,就已经安装了MFC代码,路径是…\VC\atlmfc\src\mfc,
接下来就是窗口过程函数,关键代码:
wndcls.lpfnWndProc = DefWindowProc;
wndcls.hInstance = AfxGetInstanceHandle();
wndcls.hCursor = afxData.hcurArrow;
AfxGetInstanceHandle这个函数的定义是这样的
_AFXWIN_INLINE HINSTANCE AFXAPI AfxGetInstanceHandle()
{ ASSERT(afxCurrentInstanceHandle != NULL);
return afxCurrentInstanceHandle; }
在往下看afxCurrentInstanceHandle这个函数做了什么就是这样的:
#define afxCurrentInstanceHandle AfxGetModuleState()->m_hCurrentInstanceHandle
将窗口的状态指向了当前实例的句柄,其实已经可以猜到,MFC中的消息并没有全部交给DefWindowProc,而是采用消息映射处理消息;
这些东西都不需要自己去写,MFC已经帮我们实现了这些东西。
从本质上看,微软做MFC函数同样遵循了Win32 SDK程序的23种设计模式 ;