为什么应用程序类COurApp的实例在执行之前必须存在?

ekisstherain 2009-09-01 07:55:02
程序如下:

//Ex12_02.cpp
//An elementary MFC program
#include<afxwin.h>

class COurApp: public CWinApp
{
public:
virtual BOOL InitInstance();
};

class COurWnd:public CFrameWnd
{
public:
COurWnd()
{
Create(0,L"Our Dumb MFC Application.");
}
};

BOOL COurApp::InitInstance(void)
{
m_pMainWnd=new COurWnd;
m_pMainWnd->ShowWindow(m_nCmdShow);
return TRUE;
}

//Application object definition at global scope
COurApp AnApplication;

我想知道为什么这条语句COurApp AnApplication; 是必须 的????
为什么呢???
...全文
94 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
繁重的秋春 2010-04-06
  • 打赏
  • 举报
回复
无语,对象思想都没搞清楚,些什么MFC啊!!
jasonM2008 2009-09-04
  • 打赏
  • 举报
回复
你还是先看看win32的程序流程是怎样的吧,估计你一开始就用MFC,确实你会不明白,再怎么给你说,也是徒劳!!看看WIN32的基础知识吧!
ekisstherain 2009-09-04
  • 打赏
  • 举报
回复
还不是很明白 啊????
呜呜呜
lint2008 2009-09-01
  • 打赏
  • 举报
回复
定义了一个类,是为了建立这个类的实例。这样这个类才有意义。COurApp是一个类,建立这个类的实例,是因为隐藏的CMainWnd()实现里需要这个。。。
Conry 2009-09-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ekisstherain 的回复:]
没有人知道吗????
[/Quote]
看mfc代码就明白了
extern "C" int WINAPI
_tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPTSTR lpCmdLine, int nCmdShow)
{
// call shared/exported WinMain
return AfxWinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow);
}
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)
{
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;
}
ekisstherain 2009-09-01
  • 打赏
  • 举报
回复
没有人知道吗????

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧