À©µµ¿ì ÇÁ·Î±×·¡¹Ö ÀÚ·á |
---|
Á¦¸ñ | [MFC] ºÐÇÒÀ©µµ¿ì¿Í ´ÙÁß ºä 1998/08/05 (13:18) |
À̸§ | swindler |
¹øÈ£ | 59 |
Á¶È¸ | 411 |
º»¹® |
ºÐÇÒ À©µµ¿ì´Â CSplitterWndŬ·¡½ºÀÇ °´Ã¼·Î Ç¥ÇöµÇ¸ç CSplitterWnd°´Ã¼´Â CFrameWnd³ª CMDIChildWndÀÇ Å¬¶óÀ̾ðÆ® ¿µ¿ªÀ» Â÷ÁöÇÏ´Â À©µµ¿ì°¡ µÈ´Ù. ´ÙÁß ºä Ç¥Çö¹æ½ÄÀº ¾îÇø®ÄÉÀÌ¼Ç À¯Çü°ú °áÇÕÇÒ ¶§ ´ÙÀ½°ú °°Àº ¼±Åà »ç¾çÀÌ ÀÖ´Ù. 1. ºÐÇÒ À©µµ¿ì¸¦ °®´Â SDI, ÇϳªÀÇ View Class App Wizard Step4ÀÇ Advanced...¿¡¼ User split window¸¦ üũÇÑ´Ù. ¸Þ´º¿¡ splitÀ̶ó´Â Ç׸ñÀÌ »ý±â¸ç, CMainFrame::OnCreateClient()³»ÀÇ m_wndSplitter.Create()³»¿¡¼ Çà°ú ¿ÀÇ °³¼ö¸¦ Á¶Á¤ÇÒ ¼ö ÀÖ´Ù. ½ºÅ©·Ñ¹Ù¸¦ °øÀ¯ÇÑ´Ù. 2. ºÐÇÒ À©µµ¿ì¸¦ °®´Â SDI, ´Ù¼öÀÇ View Class CSplitterWnd::Create()´ë½Å¿¡ CSplitterWnd::CreateStatic()À» »ç¿ëÇÑ´Ù. View Class¸¦ Çϳª ´õ »ý¼ºÇÑ´Ù. BOOL CMainFrame::OnCreateClient()³»¿¡ m_wndSplitter.CreateStatic(this,2,1); m_wndSplitter.CreateView(0,0,RUNTIME_CLASS (CStringView), CSize(100,100),pContext); m_wndSplitter.CreateView(0,0,RUNTIME_CLASS (CHexView), CSize(100,100),pContext); ¿Í °°ÀÌ Çϸé, CStringView, CHexView¸¦ Ãß°¡ÇÏ°Ô µÇ¸ç, ¼öÆòÀ¸·Î 2°³ÀÇ À©µµ¿ì¸¦ °¡Áö°Ô µÈ´Ù. ½ºÅ©·Ñ¹Ù¸¦ °øÀ¯ÇÏÁö´Â ¾Ê´Â´Ù. 3. ºÐÇÒÀ©µµ¿ì¸¦ °®Áö ¾Ê´Â SDI, ´Ù¼öÀÇ View Class ºÐÇÒ À©µµ¿ì¸¦ »ý¼ºÇÏÁö ¾Ê°í ViewClass»çÀ̸¦ ÀüȯÇÏ´Â ¹æ½ÄÀÌ´Ù. µû¶ó¼, ¸Þ´º¿¡ ViewClass¸¦ ÀüȯÇÏ´Â Ç׸ñÀÌ ÀÖ¾î¾ß ÇÑ´Ù. void CMainFrame::SwitchToView(eView nView) { CView* pOldActiveView=GetActiveView(); CView* pNewActiveView=(CView*) GetDlgItem(nView); if(pNewActiveView==NULL){ switch(nView) { case STRING: pNewActiveView=(CView*) new CStringView; break; case HEX: pNewActiveView=(CView*) new CHexView; break; } CCreateContext context; context.m_pCurrentDoc=pOldActiveView->GetDocument(); pNewActiveView->Create(NULL,NULL,WS_BORDER, CFrameWnd::rectDefault,this,nView,&context); pNewActiveView->OnInitialUpdate(); } SetActiveView(pNewActiveView); pNewActiveView->ShowWindow(SW_SHOW); pOldActiveView->ShowWindow(SW_HIDE); pOldActiveView->SetDlgCtrlID( pOldActiveView->GetRuntimeClass() == RUNTIME_CLASS(CStringView) ? STRING : HEX); pNewActiveView->SetDlgCtrlID(AFX_PANE_FIRST); RecalcLayout(); } enum eView{ STRING=1, HEX=2}; 4. ºÐÇÒ À©µµ¿ì¸¦ °®Áö ¾Ê´Â MDI, ÇϳªÀÇ ViewClass ÀϹÝÀûÀÎ MDIÀÌ´Ù. 5. ºÐÇÒ Â÷Àϵå À©µµ¿ì¸¦ °®Áö ¾Ê´Â MDI, ´Ù¼öÀÇ View ID_WINDOW_NEW_STRING, ID_WINDOW_NEX_HEXÀÇ µÎ ¸Þ´º¸¦ Ãß°¡ÇÑ´Ù. °¢°¢ CMDIFrameWnd::OnWindowNew(), OnWindowNExHex()ÇÔ¼ö¿Í ¿¬°áÇÑ´Ù. AppClass¿¡ ´ÙÀ½À» Ãß°¡ÇÑ´Ù. header file¿¡ public: CMultiDocTemplate* m_pTemplateHex; virtual int ExitInstance(); source file¿¡ InitInstance()ÇÔ¼ö³»¿¡¼ AddDocTemplate()ÇÔ¼ö ´ÙÀ½¿¡, m_pTemplateHex=new CMultiDocTemplate( IDR_TESTTYPE, RUNTIME_CLASS(CPoemDoc), RUNTIME_CLASS(CChildFrame), RUNTIME_CLASS(CHexView)); int CTestApp::ExitInstance() { delete m_pTemplateHex; return CWinApp::ExitInstance(); } void CMainFrame::OnWindowNewHex() { CMDIChildWnd* pActiveChild=MDIGetActive(); CDocument* pDocument; if(pActiveChild==NULL || {pDocument-pActiveChile->GetActiveDocument())==NULL){ TRACE("Warning: No active document for WindowNew command\n"); AfxMessageBox(AFX_IDP_COMMAND_FAILURE); } CDocTemplate* pTemplate= ((CTestApp*) AfxGetAp())->m_pTemplateHex; ASSERT_VALId(pTemplate); CFrameWnd* pFrame= pTemplate=>CreateNewFrame(pDocument,pActiveChild); if(pFrame==NULL){ TRACE("Warning\n"); AfxMessageBox(AFX_IDP_COMMAND_FAILURE); return ; } pTemplate->InitialUpdateFrame(pFrame,pDocument); } 6. ºÐÇÒ Â÷Àϵå À©µµ¿ì¸¦ °®´Â MDI Online HelpÀÇ Example SCRIBBLE |