Создание еще одного фрейма для документа
Бывает так, что одного фрейма для документа в MDI приложении недостаточно. Например если нужно отобразить один и тот же документ двумя разными видами. Лучше всего для этого создать еще один шаблон документа, в котором указать другой класс вида или класс внутреннего фрейма. Делается это в функции BOOL CWinApp::InitInstance(). Очень удобно завести для всех шаблоноб документов переменные в классе приложения:
class CMyApp : public CWinAppТогда при создании, каждый шаблон запоминается в соответствующей переменной:
{
.......
// document templates
public:
CMultiDocTemplate* m_pDocTemplate1;
CMultiDocTemplate* m_pDocTemplate2;
.......
};
BOOL CMyApp::InitInstance()После этого создать еще один фрейм для документа проще простого:
{
...........
m_pDocTemplate1 = new CMultiDocTemplate(
IDR_FRAME2TYPE,
RUNTIME_CLASS(CMyDoc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CMyView1));
AddDocTemplate(m_pDocTemplate1);
m_pDocTemplate2 = new CMultiDocTemplate(
IDR_FRAME2TYPE,
RUNTIME_CLASS(CMyDoc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CMyView2));
AddDocTemplate(m_pDocTemplate2);
...........
}
void CChildFrame::OnNewFrame()
{
CMyApp* pApp = (CFrame2App*) AfxGetApp();
CFrameWnd* pFrame = pApp->m_pDocTemplate1->CreateNewFrame(GetActiveDocument(), this);
pFrame->ShowWindow(SW_SHOW);
}