我是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类中。或者可能尝试初始化其他地方的对话框,这些对话框在文档正确初始化和链接后稍后调用?或者我应该完全不同地做事情?
答案 0 :(得分:0)
我认为CMainFrame::OnCreate()
在访问文档类的事件序列中为时过早,通常不会创建它。
最好等到创建/初始化docuent之后,文档类可以在CMainFrame()
中调用一个新方法作为参数传递this
来创建标签。