2015-02-03 3 views
0

Я довольно новичок в 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. Или, возможно, пытается инициализировать диалоговые окна где-то еще, которые вызывается позже, когда документ правильно инициализирован и связан? Или я должен делать все по-другому?

ответ

0

Я думаю, что CMainFrame::OnCreate() слишком рано в последовательности событий для доступа к классу документов, он обычно не создается.

Было бы лучше подождать, пока созданный/инициализированный документ не будет создан, тогда класс документа может вызвать новый метод в CMainFrame(), передав this в качестве параметра для создания вкладок.

+0

Спасибо за ответ. Я создал функцию в CMainFrame, чтобы создать вкладки, передав указатель документа на классы диалога. Затем я вызвал функцию в OnNewDocument, получив фрейм, используя 'CMainFrame * pFrame = (CMainFrame *) AfxGetMainWnd();' Кажется, что это работает, спасибо большое. –