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

时间:2013-05-16 14:38:08

标签: c++ mfc mdi childwindow

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

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

编辑: 在回答我的回答时,以下是使用->Create()->CreateNewChild()的结果。

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

您也可以将数据传递给新文档,而不是在文档模板中传递初始化数据。您将基本上从CMultiDocTemplate :: OpenDocumentFile复制代码并添加代码以从主框架的活动文档中获取初始化数据。