Я довольно новичок в MFC и хотел бы создать приложение SDI с панелью вкладок, всегда встроенной в правой части окна, с видом слева от него. В моем приложении есть ядро расчета с переменными, которые изменяются на вкладках с полями редактирования. Я хотел бы инициализировать эти переменные в классе вычислений, а затем во время инициализации диалоговых окон, используемых для вкладок, установить начальные значения в полях редактирования равными значениям соответствующей переменной в калькуляторе.
В настоящее время я создаю экземпляр калькулятора в своем классе документов.
Я также создаю CTabbedPane в методе MainFrame OnCreate следующим образом:
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);
Я хотел бы иметь возможность в OnInitDialog CParameterDlg сделать что-то вроде:
BOOL CParameterDlg::OnInitDialog() {
CDialog::OnInitDialog()
float value = pointerToDocument->GetCalculatorVariable();
И используйте значение для инициализации поля редактирования. Однако я не могу получить доступ к документу в основных фреймах OnCreate, так как он возвращает значение null (используя GetActiveDocument, AfxGetApp и т. Д.).
Как я могу инициализировать вкладки тогда? Я думал о попытке поместить калькулятор в класс приложения вместо этого. Или, возможно, пытаетесь инициализировать диалоги где-то еще, что вызывается позже, когда документ правильно инициализирован и связан? Или я должен делать вещи совсем по-другому?
я думаю что CMainFrame::OnCreate()
слишком рано в последовательности событий для доступа к классу документа, обычно он еще не создан.
Было бы лучше подождать, пока документ не будет создан / инициализирован, тогда класс документа может вызвать новый метод в CMainFrame()
прохождение this
в качестве параметра для создания вкладок.