在 MFC(Microsoft Foundation Classes)中,CMDIChildWnd 类提供了 GetMDIFrame 方法,用于获取与当前 MDI 子窗口关联的 MDI 主框架窗口(CMDIFrameWnd 对象)。

以下是 CMDIChildWnd 类中 GetMDIFrame 方法的基本语法:
CMDIFrameWnd* GetMDIFrame() const;

这个方法返回一个指向与当前 MDI 子窗口关联的 MDI 主框架窗口的指针。如果当前窗口不是 MDI 子窗口,则返回 NULL。

以下是一个简单的示例代码,演示如何使用 GetMDIFrame 方法:
#include <afxwin.h>

class CMyMDIChild : public CMDIChildWnd
{
public:
    CMyMDIChild() {}
};

class CMyMDIFrame : public CMDIFrameWnd
{
public:
    CMyMDIFrame()
    {
        Create(NULL, L"My MDI Frame", WS_OVERLAPPEDWINDOW, rectDefault, NULL, L"MenuID");

        // 创建 MDI 子窗口
        CMyMDIChild* pChildWnd = new CMyMDIChild;
        pChildWnd->Create(NULL, L"My MDI Child", WS_OVERLAPPEDWINDOW, rectDefault, this);

        // 获取与子窗口关联的 MDI 主框架窗口
        CMDIFrameWnd* pMDIFrame = pChildWnd->GetMDIFrame();
        if (pMDIFrame != nullptr) {
            wprintf(L"子窗口关联的 MDI 主框架窗口名称:%s\n", pMDIFrame->GetWindowText());
        } else {
            wprintf(L"子窗口未关联到 MDI 主框架窗口。\n");
        }
    }
};

class CMyApp : public CWinApp
{
public:
    virtual BOOL InitInstance()
    {
        // 初始化 MFC 应用程序
        CMyMDIFrame* pFrame = new CMyMDIFrame;
        m_pMainWnd = pFrame;
        pFrame->LoadFrame(IDR_MAINFRAME);
        pFrame->ShowWindow(SW_SHOW);
        pFrame->UpdateWindow();

        return TRUE;
    }
};

CMyApp theApp;

在这个示例中,我们创建了一个自定义的 CMyMDIChild 类,继承自 CMDIChildWnd。在 CMyMDIFrame 构造函数中,我们创建了一个 MDI 子窗口,并使用 GetMDIFrame 方法获取与子窗口关联的 MDI 主框架窗口的指针,然后输出主框架窗口的窗口文本。请注意,要确保在调用 GetMDIFrame 方法之前 MDI 子窗口已经成功创建。


转载请注明出处:http://www.zyzy.cn/article/detail/18837/MFC/CMDIChildWnd