但这个winmain被mfc封装了,也就是说工程里是找不到这个函数的。
但你也不用找。因为既然mfc封装了入口,就说明入口处不需要你做什么事情。
mfc会把你需要编写地方的代码给你的。
如果想了解mfc的架构。请搜索孙鑫MFC
入口是不需要被你看到的,因为MFC入口里做的东西都是一些重复的东西,没有必要让人看到。他的入口其实就是winmain
两种工程没有什么不一样的,mfc就是微软把东西都封装好,替你干了一些重复的没有啥意义的事情
extern "C" int WINAPI_tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPTSTR lpCmdLine, int nCmdShow)
{
// call shared/exported WinMain
return AfxWinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow)
}
这个是MFC已经准备好直接由链接器加到应用程序中的,注:这里的_tWinMain是为了兼容Unicode制作的
#ifdef _UNICODE
#define _tWinMain wWinMain
#else
#define _tWinMain WinMain
#endif
而AfxWinMain
int AFXAPI AfxWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPTSTR lpCmdLine, int nCmdShow)
{
ASSERT(hPrevInstance == NULL)
int nReturnCode = -1
CWinThread* pThread = AfxGetThread()
CWinApp* pApp = AfxGetApp()
// AFX internal initialization
if (!AfxWinInit(hInstance, hPrevInstance, lpCmdLine, nCmdShow))
goto InitFailure
// App global initializations (rare)
if (pApp != NULL &&!pApp->InitApplication())
goto InitFailure
// Perform specific initializations
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
// Check for missing AfxLockTempMap calls
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
}
你可以自己看源码,在vc安装目录的MFC源文件里,以上两个函数分别在APPMODUL.cpp和WINMAIN.cpp
里面。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)