À©µµ¿ì ÇÁ·Î±×·¡¹Ö ÀÚ·á

HomePage Backward Forward Post Reply List
Delete Modify
  Á¦¸ñ   [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


HomePage Backward Forward Post Reply List
1998 by swindler