MFC仿真程序里的一个有关问题,大家慷慨的帮帮小弟我
MFC仿真程序里的一个问题,大家慷慨的帮帮我
我看的是侯俊杰的深入浅出MFC,
仿真程序里设计到调用InitApplication()和InitInstance()这两个虚函数
前面类的声明里有一个如下:
class CWinApp:public CWinThread
{
public:
CWinApp *m_pCurrentWinApp;
CWnd *m_pMainWnd;
……
}
主函数如下:
CWinApp * pApp=AfxGetApp();
pApp->InitApplication();
pApp->InitInstance();
pApp->Run();
我的问题是,主函数里调用的三个函数都是类CWinApp的成员函数,而且该类里也有公共指针,
干嘛不直接写成pApp=m_pCurrentWinApp呢,或者不用定义指针,直接调用,例如m_pCurrentWinApp->InitApplication()
干嘛还用函数AfxGetApp()来返回m_pCurrentWinApp指针呢,不是多此一举吗?没什么分,望大家海涵哈呵呵
------解决方案--------------------
WinMain入口函数调用AfxWinMain函数,AfxWinMain是个全局函数,不是某个类的成员函数。
我看的是侯俊杰的深入浅出MFC,
仿真程序里设计到调用InitApplication()和InitInstance()这两个虚函数
前面类的声明里有一个如下:
class CWinApp:public CWinThread
{
public:
CWinApp *m_pCurrentWinApp;
CWnd *m_pMainWnd;
……
}
主函数如下:
CWinApp * pApp=AfxGetApp();
pApp->InitApplication();
pApp->InitInstance();
pApp->Run();
我的问题是,主函数里调用的三个函数都是类CWinApp的成员函数,而且该类里也有公共指针,
干嘛不直接写成pApp=m_pCurrentWinApp呢,或者不用定义指针,直接调用,例如m_pCurrentWinApp->InitApplication()
干嘛还用函数AfxGetApp()来返回m_pCurrentWinApp指针呢,不是多此一举吗?没什么分,望大家海涵哈呵呵
------解决方案--------------------
WinMain入口函数调用AfxWinMain函数,AfxWinMain是个全局函数,不是某个类的成员函数。
- C/C++ code
int AFXAPI AfxWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, _In_ 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) { TRACE(traceAppMsg, 0, "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) { TRACE(traceAppMsg, 0, "Warning: Temp map lock count non-zero (%ld).\n", AfxGetModuleThreadState()->m_nTempMapLock); } AfxLockTempMaps(); AfxUnlockTempMaps(-1); #endif AfxWinTerm(); return nReturnCode; }