2013-05-16 72 views
0

我有一個MDI應用程序,在調用OnFileNew()函數(由theApp對象處理)時會調用對話框。此對話框允許用戶將某些變量的值設置爲需要傳遞給調用->CreateNewChild()函數時創建的CChildFrame對象。C++ MFC MDI在創建時更改子窗口變量

如何將這些變量傳遞到由->CreateNewChild()函數創建的CChildFrame對象上?

編輯: 迴應我得到的答案,這裏是使用->Create()->CreateNewChild()的結果。

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

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

我如何與第二環節中描述的函數聲明的第一個鏈接顯示的選項卡式窗口?

+0

問題在哪裏? –

+0

我忘了把問題放在原文中。感謝您指出了這一點。編輯該帖子以包含該問題。 –

回答

1

您可以通過自定義文檔模板傳遞數據。從CMultiDocTemplate派生一個類來添加額外的數據成員,然後將一個指向派生文檔模板類的指針添加到CWinApp派生的應用程序類中。以通常的方式初始化文檔模板,除非完成時,將新文檔模板對象保存到應用程序類中的指針。

現在在您的CreateNewChild函數中,您可以在調用OpenDocumentFile(NULL)之前,而不是調用CWinApp :: OnFileNew,從當前幀獲取數據,然後將其分配給保存在應用程序類中的文檔模板中的數據成員)。您可以在OpenDocumentFile返回時清除數據成員。

文檔模板將依次創建子框架並在創建上下文中傳遞文檔模板。爲了讓在孩子幀創建背景,你可以重寫CChildFrame ::的OnCreateClient,或閱讀的OnCreate的創建結構:

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

不是傳遞初始化數據,文檔模板,你也可以傳遞數據到新文件。您將基本上覆制CMultiDocTemplate :: OpenDocumentFile中的代碼,並添加代碼以從主框架的活動文檔中獲取初始化數據。

+0

當項目中沒有文檔/體系結構支持時,是否有辦法做到這一點? –

+0

您可以將包含在ID_FILE_NEW命令處理程序中收集的初始數據的CCreateContext派生類傳遞給子框架的創建函數,並使用創建上下文在OnCreate中填充您的子框架。 –