此案例学习中的知识点主要如下:
1. VC中的快捷键 F7 进行编译程序;Ctr+F5运行程序,F9设置断点。
2.在MFC中,以Afx为前缀的函数都是全局函数。AfxWinMain函数源码如下:
int AFXAPI AfxWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow)
{
ASSERT(hPrevInstance==NULL);
int nReturncode=-1;
CWinThread *pThread=AfxGetThread();
CWinApp *pApp=AfxGetApp();
if(!AfxWinInit(hInstance,hPrevInstance,lPcMDLine,nCmdShow))
goto InitFailure;
if(pApp!=NULL&& !pApp->InitApplication())
goto InitFailure;
if (!pThread->InitInstance())
{
if (pThread->m_pMainWnd !=NULL)
{
TRACE0("Warning:Destroying non-NULL m_pMainWnd\n");
pThread->m_pMainWnd->DestroyWindow();
}
nReturnCode=pThread->ExitInstance();
goto InitFailure;
}
nReturnCode=pThread->Run();
InitFailure:
#ifdef _DEBUG
if(AfxGetModuleThreadState()->m_nTempMapLock!=0)
{
TRACE1("Warning:Temp map lock count non-zero(%ld).\n",AfxGetModuleThreadState()->m_nTempMapLock);
}
AfxLockTempMaps();
AfxUnlockTempMaps(-1);
#endif
AfxWinTerm();
return nReturnCode;
}
3.MFC中后缀名为Ex的函数都是扩展函数。
4.MFC中窗口类的操作:
4.1注册窗口函数:AfxEndDeferRegisterClass
4.2创建窗口函数:CreateEx
4.3显示窗口操作:m_pMainWnd->ShowWindow(SW_WHOW); m_pMainWnd->UpdateWindow();
m_pMainWnd是CTestApp的成员变量。
5.需要删除消息响应函数时,最好在视图中CLASS VIEW选项卡中选择响应的函数进行删除,从而删除多个文件中的相应代码。
6.MFC消息映射机制的具体实现方法:在每个能接收和处理消息的类中,定义一个消息和消息函数静态对照表,即消息映射表。在消息映射表中,消息与对应的消息处理函数指针是成对出现的。某个类能处理的所有消息及其对应的消息处理函数的地址都列在这个类所对应的静态表中。当有消息需要处理时,程序只要搜索该消息静态表,查看表中是否含有该消息,就可知道该类能否处理此消息。如果能处理该消息,则同样依照静态表能很容易找到并调用对应的消息处理函数。