0

我是 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();

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

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

4

1 回答 1

0

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

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

于 2015-02-03T15:07:16.027 回答