吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 367|回复: 1
收起左侧

[学习记录] MFC调用链学习

[复制链接]
lrj2025kernel 发表于 2026-8-14 07:47
本帖最后由 lrj2025kernel 于 2026-8-14 10:48 编辑

一、文件注释
MFC.h与MFC.cpp属于框架代码
MY.h与MY.cpp属于自定义类
MFC.H文件:
[C++] 纯文本查看 复制代码
#define BOOL int
#define TRUE 1
#define FALSE 0

#include <iostream>
using namespace std;
class CObject
{
public:
        CObject() {
        }
        ~CObject() {
        }
};

class CCmdTarget : public CObject
{
public:
        CCmdTarget() {
        }
        ~CCmdTarget() {
        }
};
class CWinThread : public CCmdTarget
{
public:
        CWinThread() {
        }
        ~CWinThread() {
        }

        virtual BOOL InitInstance() {
                cout << "CWinThread::InitInstance \n";
                return TRUE;
        }
        virtual int Run() {
                cout << "CWinThread::Run \n";
                return 1;
        }
};

class CWnd;

class CWinApp : public CWinThread
{
public:
        CWinApp* m_pCurrentWinApp{nullptr};
        CWnd* m_pMainWnd{nullptr};

public:
        CWinApp() {
                m_pCurrentWinApp = this;
        }
        ~CWinApp() {
        }

        virtual BOOL InitApplication() {
                cout << "CWinApp::InitApplication \n";
                return TRUE;
        }
        virtual BOOL InitInstance() {
                cout << "CWinApp::InitInstance \n";
                return TRUE;
        }
        virtual int Run() {
                cout << "CWinApp::Run \n";
                return CWinThread::Run();
        }
};
class CDocument : public CCmdTarget
{
public:
        CDocument() {
        }
        ~CDocument() {
        }
};

class CWnd : public CCmdTarget
{
public:
        CWnd() {
        }
        ~CWnd() {
        }

        virtual BOOL Create();
        BOOL CreateEx();
        virtual BOOL PreCreateWindow();
};
class CFrameWnd : public CWnd
{
public:
        CFrameWnd() {
        }
        ~CFrameWnd() {
        }
        BOOL Create();
        virtual BOOL PreCreateWindow();
};

class CView : public CWnd
{
public:
        CView() {
        }
        ~CView() {
        }
};

MFC.cpp文件
[C++] 纯文本查看 复制代码
#include "mfc.h" 

BOOL CWnd::Create()
{
  cout << "CWnd::Create \n";
  return TRUE;
}

BOOL CWnd::CreateEx()
{
  cout << "CWnd::CreateEx \n";
  PreCreateWindow();
  return TRUE;
}

BOOL CWnd::PreCreateWindow()
{
  cout << "CWnd::PreCreateWindow \n";
  return TRUE;
}

BOOL CFrameWnd::Create()
{
  cout << "CFrameWnd::Create \n";
  CreateEx();
  return TRUE;
}

BOOL CFrameWnd::PreCreateWindow()
{
  cout << "CFrameWnd::PreCreateWindow \n";
  return TRUE;
}

MY.h文件
[C++] 纯文本查看 复制代码
#include <iostream>
#include "mfc.h"

class CMyWinApp : public CWinApp
{
public:
        CMyWinApp() {
        }
        ~CMyWinApp() {
        }

        virtual BOOL InitInstance();
};

class CMyFrameWnd : public CFrameWnd
{
public:
        CMyFrameWnd();
        ~CMyFrameWnd() {
        }
};

MY.cpp文件
[C++] 纯文本查看 复制代码
#include "my.h"

CMyWinApp myApp;

CWinApp* AfxGetApp()
{
        return myApp.m_pCurrentWinApp;
}

BOOL CMyWinApp::InitInstance()
{
        cout << "CMyWinApp::InitInstance \n";
        m_pMainWnd = new CMyFrameWnd;
        return TRUE;
}

CMyFrameWnd::CMyFrameWnd()
{
        cout << "CMyFrameWnd::CMyFrameWnd \n";
        Create();
}

void main()
{
        CWinApp* pApp = AfxGetApp();
        pApp->InitApplication();
        pApp->InitInstance();
        pApp->Run();
        system("pause");
}

二、框架的稳定性:
框架代码提供虚接口以使用户继承父类并改写功能
框架代码提供调用流程
框架代码作为父类,各个父类之间也存在着相互继承,其中的成员函数也存在着相互调用的情况,比如,自身函数调用自身函数,自身函数调用父类函数
框架中的类等着被继承的

三、调用链条:
在末端子类构造CMyFrameWnd中通过调用父类Create()方法层层上调直至到根类,产生调用链条,根类存在虚接口再多态调用回子类改写的虚方法

链条

链条

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

sbj496 发表于 2026-8-14 11:39
正好不会,我尝试一下
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-8-25 19:22

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表