[面试] C/C++ —— MFC(二)

消息循环

在 AfxWinMain 函数(经过全局对象 theApp 的构造之后)内部:

要做两件事:

int AFXAPI AfxWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPTSTR lpCmdLine, int nCmdShow)
{

    CWinThread* pThread = AfxGetThread();
    CWinApp* pApp = AfxGetApp();
                                // pThread、pApp 指向的都是 theApp
    ...
    pThread->InitInstance();
                            // 完成窗口类的注册、创建、显示、更新
    pThread->Run();
                            // 完成消息循环
}

关于消息循环:

class CWinThread : public CCmdTarget
{
public:
    ...
    virtual int Run();
};

由于 C**App 类未重写父类的 run 函数,在 AfxWinMain 函数中会去调用 int CWinApp::Run()

int CWinApp::Run()
{
    ...
    return CWinThread::Run();
}

Document/View 文档视图结构的形成

在 C**App::InitInstance():

CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
    IDR_MAINFRAME,
    RUNTIME_CLASS(CDIPDemoDoc),
    RUNTIME_CLASS(CMainFrame),       // main SDI frame window
    RUNTIME_CLASS(CDIPDemoView));
AddDocTemplate(pDocTemplate);

通过一个单文档视图模板将文档、框架窗口、视图进行有机的组合。

你可能感兴趣的:([面试] C/C++ —— MFC(二))