MFC:如何使用 SDI 中文档中的信息初始化 CTabbedPane 选项卡(对话框)?

MFC: How can I initialise CTabbedPane tabs (dialogs) using information from the Document in a SDI?

我是 MFC 的新手,想创建一个 SDI 应用程序,它的选项卡窗格始终嵌入 window 的右侧,左侧有一个视图。在我的应用程序中,我有一个计算核心,其中包含在带有编辑框的选项卡中更改的变量。我想在计算中初始化这些变量 class 然后在用于选项卡的对话框初始化期间将编辑框中的初始值设置为计算器中相应变量的初始值。

目前,我在文档中创建了一个计算器实例 class。 我还在 MainFrame 的 OnCreate 方法中创建了一个 CTabbedPane,如下所示:

m_TabbedPane.Create(_T(""), this, CRect(0, 0, 290, 200),
    TRUE,
    (UINT)-1,
    WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |
    WS_CLIPCHILDREN | CBRS_RIGHT |
    CBRS_FLOAT_MULTI))

m_tab = new CParametersDlg();
m_tab->Create(IDD_TAB, this);
m_TabbedPane.AddTab(m_tab);

我希望能够在 CParameterDlg 的 OnInitDialog 中执行如下操作:

BOOL CParameterDlg::OnInitDialog() {
CDialog::OnInitDialog()
float value = pointerToDocument->GetCalculatorVariable();

并使用值来初始化一个编辑框。但是我无法从主框架 OnCreate 中访问文档,因为它 returns null(使用 GetActiveDocument、AfxGetApp 等)。

那我该如何初始化标签页呢?我考虑过尝试将计算器放入 App class 中。或者可能试图在其他地方初始化对话框,当文档被正确初始化和链接时稍后调用?或者我应该完全不同地做事吗?

我认为 CMainFrame::OnCreate() 在访问文档 class 的事件序列中为时过早,它通常不会被创建。

最好等到文档被创建/初始化,然后文档 class 可以调用 CMainFrame() 中的一个新方法,传递 this 作为参数来创建选项卡。