刚学MFC,对这种机制搞不明白:BOOL CHelloApp::InitInstance()
{
m_pMainWnd=new CHelloWindow();
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
return TRUE;
};这个主框架指针m_pMainWnd指向了一个CFrameWindow实例,当点击窗口的关闭时,CHelloWindow()消失,但CHelloApp如何终止的呢?全部代码如下,没有看到程序是如何终止的,CHelloApp如何知道主窗口已经没了?
#include <AfxWin.h>class CHelloApp:public CWinApp
{
public:
virtual BOOL InitInstance();

};CHelloApp theApp;class CHelloWindow:public CFrameWnd
{
CStatic *cs;
public:
CHelloWindow();
};BOOL CHelloApp::InitInstance()
{
m_pMainWnd=new CHelloWindow();
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
return TRUE;
};CHelloWindow::CHelloWindow()
{
//建立窗口本身
Create(NULL, 
"Hello World!", 
WS_OVERLAPPEDWINDOW, 
CRect(0,0,200,200));
// 建立静态标签
cs = new CStatic();
cs->Create("hello world",
WS_CHILD|WS_VISIBLE|SS_CENTER,
CRect(50,80,150,150),
this);
};

解决方案 »

  1.   

    InitInstance()只是初始化程序
    结束后程序进入消息循环中,这个被MFC封装了
    当收到程序结束的消息后,循环结束,主函数AfxWinMain返回,程序终止!可以去看下winmain.cpp文件,AfxWinMain就在这里面
      

  2.   

    几点疑问:
    1.一个程序只能有一个CWinApp对像,但一个进程只能有一个CFrameWindow吗?
    2.CFrameWindow对像消毁时,它是不是会向进程发送WM_DESTORY消息?如果不是,那么消息循环又是如何结束的?
      

  3.   

    http://www.vczx.com/tutorial/mfc/mfc6.php
      

  4.   

    推荐你去看下侯捷的《深入浅出MFC》,里面对你这个问题解释的比较清楚