Я довольно новичок в MFC и хотел бы создать приложение SDI, которое имеет панель вкладок, всегда встроенных справа от окна, с видом слева от нее. В моем приложении у меня есть ядро вычисления с переменными, которые изменены на вкладках с полями редактирования. Я хотел бы инициализировать эти переменные в классе вычислений, а затем во время инициализации диалоговых окон, используемых для вкладок, установить начальные значения в полях редактирования в соответствующие поля в калькуляторе.MFC: Как я могу инициализировать вкладки (диалоги) CTabbedPane, используя информацию из документа в 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 и т. Д.).
Как я могу инициализировать вкладки? Я подумал о том, чтобы попытаться поместить Калькулятор в класс App. Или, возможно, пытается инициализировать диалоговые окна где-то еще, которые вызывается позже, когда документ правильно инициализирован и связан? Или я должен делать все по-другому?
Спасибо за ответ. Я создал функцию в CMainFrame, чтобы создать вкладки, передав указатель документа на классы диалога. Затем я вызвал функцию в OnNewDocument, получив фрейм, используя 'CMainFrame * pFrame = (CMainFrame *) AfxGetMainWnd();' Кажется, что это работает, спасибо большое. –