注册 登录
编程论坛 C++教室

有关MFC窗口函数请教

lzyren2008 发布于 2007-11-15 21:02, 702 次点击

#include <afxwin.h>
#include <iostream.h>
class CMyApp:public CWinApp
{
public:
BOOL InitInstance();
};

//重新定义的成员函数InitInstance
CMyApp::InitInstance()
{
CFrameWnd* pMainWnd=new CFrameWnd;
pMainWnd->Create(NULL,"Basic MFC Application");
pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);
pMainWnd->UpdateWindow();
m_pMainWnd=pMainWnd;//??????
return TRUE;
}
//程序员定义的WinApp的对象theApp
CMyApp MyApp;


上式中,如果不加???那行,程序窗口就无法显示,请问为什么?谢谢!

5 回复
#2
cz5223212007-11-15 21:35
不用加那行呀!
#3
lzyren20082007-11-15 21:38
不加那行程序窗口就无法显示出来啊,我这运行过了,加了就能显示,不加的话闪一下就没了!????
#4
PcrazyC2007-11-15 22:55
看一下基类CWINAPP的一个RUN函数,如果m_pMainWnd == NULL的话会执行AfxOleGetUserCtrl,我不知道是做什么的,但返回值好像是真值,下面就会执行AfxPostQuitMessage(0);这个语句,这个语句会使后面的CWinThread::Run函数不接受程序的消息,而使里面的一个WHILE循环只执行数次就会退出,而没有调用这个的话,就会无限的接受程序的消息,直到接受到关闭消息才会结束.我是这样理解的,不知道是不是正确的,你自己跟踪一下试试
int CWinApp::Run()
{
if (m_pMainWnd == NULL && AfxOleGetUserCtrl())
{
// Not launched /Embedding or /Automation, but has no main window!
TRACE0("Warning: m_pMainWnd is NULL in CWinApp::Run - quitting application.\n");
AfxPostQuitMessage(0);
}
return CWinThread::Run();
}

[此贴子已经被作者于2007-11-16 10:58:23编辑过]

#5
lzyren20082007-11-16 10:03
好像是楼上所说的原因,我去掉if语句就可以了.AfxOleGetUserCtral()牵扯到好多函数,脉路搞不太清楚。我调试了一下,它的返回值应该是真值,不是0,并且与m_pMainWnd是否为空无关,这样,才与调试结果一致.谢谢你的指点!
#6
PcrazyC2007-11-16 10:57
是我说错了,是真值,不然怎么会执行AfxPostQuitMessage呢,昨天是因为快停电了,写得太快了
1