C++ MFC MDI 在创建时更改子窗口变量

标签 c++ mfc mdi childwindow

我有一个 MDI 应用程序,当调用 OnFileNew() 函数(由 theApp 对象处理)时,会调用一个对话框。此对话框允许用户为一些变量设置值,然后这些变量需要传递给调用 ->CreateNewChild() 函数时创建的 CChildFrame 对象。

如何将这些变量传递给 ->CreateNewChild() 函数创建的 CChildFrame 对象?

编辑: 作为对我得到的答案的回应,以下是使用 ->Create()->CreateNewChild() 的结果。

链接:CMainFrame *pFrame; - pFrame->CreateNewChild()

链接:CChildFrame *childFrame; - childFrame->Create()

如何使用第二个链接中描述的函数声明获取第一个链接中显示的选项卡式窗口?

最佳答案

您可以通过自定义文档模板传递数据。从 CMultiDocTemplate 派生一个类以添加其他数据成员,然后将指向您的派生文档模板类的指针添加到您的 CWinApp 派生应用程序类。以通常的方式初始化您的文档模板,除了当您完成后,将新的文档模板对象保存到您的应用程序类中的指针。

现在在您的 CreateNewChild 函数中,您可以只从当前帧获取数据,而不是调用 CWinApp::OnFileNew,然后分配给保存在应用程序类中的文档模板中的数据成员,然后再调用 OpenDocumentFile(NULL) .您可以在 OpenDocumentFile 返回时清除数据成员。

文档模板将依次创建子框架并在创建上下文中传递文档模板。要在子框架中获取创建上下文,您可以覆盖 CChildFrame::OnCreateClient,或者读取 OnCreate 中的创建结构:

MDICREATESTRUCT * pMDICreateStruct=(MDICREATESTRUCT * )lpCreateStruct->lpCreateParams;
CCreateContext *pCreateContext=(CCreateContext *)pMDICreateStruct->lParam;

除了在文档模板中传递初始化数据,您还可以将数据传递到新文档。您基本上将从 CMultiDocTemplate::OpenDocumentFile 复制代码并添加代码以从主框架的事件文档中获取初始化数据。

关于C++ MFC MDI 在创建时更改子窗口变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16590403/

相关文章:

c++ - 另一个与设计相关的 C++ 问题

c++ - Boost为同一个线程获取多个锁

c++ - 从辅助线程调用 UpdateWindow()

c# - 使用 VC++ MFC 对话从数据库中检索数据

c# - 我想从 Windows MDI 子窗体中删除图标

mdi - MDI 肯定没那么糟糕吧?

c++ - (DirectX 11) 单个顶点缓冲区能否一次绑定(bind)到多个 IA 输入槽?

c++ - 分配内存时内存使用量不会增加

c++ - MFC - UpdateData(False) + 线程 + 调试断言失败

c# - 在 MDI 子窗体之间切换