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

时间:2015-02-03 14:09:53

标签: c++ mfc sdi

我是MFC的新手,想要创建一个SDI应用程序,其窗口右侧始终嵌入了一个选项卡窗格,其中包含一个视图。在我的应用程序中,我有一个计算核心,变量在选项卡中使用编辑框进行更改。我想在计算类中初始化这些变量,然后在初始化用于制表符的对话框时,将编辑框中的初始值设置为计算器中相应变量的初始值。

目前,我在文档类中创建了一个计算器实例。 我还在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访问文档,因为它返回null(使用GetActiveDocument,AfxGetApp等)。

如何初始化标签呢?我曾想过尝试将Calculator放在App类中。或者可能尝试初始化其他地方的对话框,这些对话框在文档正确初始化和链接后稍后调用?或者我应该完全不同地做事情?

1 个答案:

答案 0 :(得分:0)

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

最好等到创建/初始化docuent之后,文档类可以在CMainFrame()中调用一个新方法作为参数传递this来创建标签。