<Á¤Àû ºÐÇÒ À©µµ¿ì - Æûºä¿Í ÀÏ¹Ýºä °°ÀÌ ¾²±â 1>

¨ç ÇÁ·ÎÁ§Æ® ¸í: Split2
¨è SDI °úÁ¤ 4/6 ¿¡¼­ Advanced - use split window ¼±ÅÃ.
¨é ¸®¼Ò½º¿¡¼­ insert ÇØ¼­ formview Ãß°¡.
À̶§ Base class´Â ¹Ýµå½Ã CFormView·Î ÇÒ °Í.
¨ê class wizard·Î formview¿¡ ¿¬°áµÈ Ŭ·¡½º »ý¼º - À̸§Àº CForm À¸·Î ÇÔ.
¨ë MainFrm.cpp¸¦ ´ÙÀ½°ú °°ÀÌ °íÄ£´Ù.

// MainFrm.cpp : implementation of the CMainFrame class
.....
#include "MainFrm.h"
#include "Split2Doc.h"  //  -+
#include "Split2View.h" //   +- Ãß°¡ (¼ø¼­Áß¿ä)
#include "Form.h"       //  -+
......
// OnCreateClient() ÇÔ¼ö ¼öÁ¤
BOOL CMainFrame::OnCreateClient( LPCREATESTRUCT /*lpcs*/,
        CCreateContext* pContext)
{
        m_wndSplitter.CreateStatic( this,1,2);
        m_wndSplitter.CreateView(0, 0, 
                RUNTIME_CLASS(CSplit2View), CSize(400,100), pContext);
        m_wndSplitter.CreateView(0, 1, 
                RUNTIME_CLASS(CForm), CSize(100,100), pContext);
        SetActiveView((CView *)m_wndSplitter.GetPane(0,0));
        return TRUE;
}

¨ì Document ¿¡ test ¶ó´Â doubleÇü º¯¼ö¸¦ Ãß°¡.

¨í Form.h ¿¡ ´ÙÀ½°ú °°ÀÌ GetDocument() ÇÔ¼ö¸¦ ¸¸µé¾î ÁÜ.

class CForm : public CFormView
{
............
// Attributes
public:
        CSplit2Doc* GetDocument();  // Ãß°¡
.........
}

// ´ÙÀ½ 4ÁÙ: ºä¿¡¼­ 'º¹»ç-ºÙ¿©³Ö±â' ÇØ¼­ Æûºä Ŭ·¡½º¸íÀ¸·Î ¼öÁ¤
// À̰ÍÀº release ¿ë 
#ifndef _DEBUG  // debug version in Form.cpp
inline CSplit2Doc* CForm::GetDocument()
   { return (CSplit2Doc*)m_pDocument; }
#endif

¨î Form.cpp ÀÇ ³»¿ëÀ» ´ÙÀ½°ú °°ÀÌ ¼öÁ¤.

.........
#include "Split2Doc.h"  // Ãß°¡ (Doc°¡ ¸ÕÀú View´Â µÚ¿¡ Ãß°¡)
#include "Split2View.h" // Ãß°¡
#include "Form.h"
.........
/////////////////////////////////////////////////////////////////////////////
// CForm diagnostics

#ifdef _DEBUG
..............
// GetDocument() ÇÔ¼ö Ãß°¡
// ´ÙÀ½ 5ÁÙ: ºä¿¡¼­ 'º¹»ç-ºÙ¿©³Ö±â' ÇØ¼­ Æûºä Ŭ·¡½º¸íÀ¸·Î ¼öÁ¤ 
CSplit2Doc* CForm::GetDocument() // non-debug version is inline
{
        ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSplit2Doc)));
        return (CSplit2Doc*)m_pDocument;
}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CForm message handlers

// Æûºä¿¡ ÀÖ´Â ¹öưÀÇ ¸Þ½ÃÁö Çڵ鷯
void CForm::OnButton1() 
{
        // TODO: Add your control notification handler code here
        
        CSplit2Doc *pDoc = GetDocument();
        ASSERT_VALID(pDoc);
        
        UpdateData(true);
        pDoc->test = m_edit1;  // m_edit1 : class wizard¿¡¼­ Á¤ÇÑ ¿¡µðÆ® ¹Ú½ºÀÇ º¯¼ö 
        pDoc->UpdateAllViews(this);  // µµÅ¥¸ÕÆ®¿¡ ¿¬°áµÈ ¸ðµç ºä °»½Å 
                                         // Æûºä´Â °»½ÅÇÏÁö ¾ÊÀ½
}

¨ï Split2ViewÀÇ OnDraw() ÇÔ¼öÀÛ¼º

void CSplit2View::OnDraw(CDC* pDC)
{
        CSplit2Doc* pDoc = GetDocument();
        ASSERT_VALID(pDoc);
        
        // TODO: add draw code for native data here
        CString str;
        str.Format("%f", pDoc->test);
        pDC->TextOut(10,10, str);
}
<Á¤Àû ºÐÇÒ À©µµ¿ì - Æûºä¿Í ÀÏ¹Ýºä °°ÀÌ ¾²±â 2>

¨ç~¨ì ±îÁö °°Àº ¼ø¼­·Î ÀÛ¼º.

¨í Æûºä ¹öưÀÇ ¸Þ½ÃÁö Çڵ鷯¸¦ ´ÙÀ½°ú °°ÀÌ ÀÛ¼º.

void CForm::OnButton1() 
{
        // TODO: Add your control notification handler code here

        // View¸¦ µÑ·¯½Ñ FrameWindowÀÇ Æ÷ÀÎÅ͸¦ ±¸ÇÔ. 
        CFrameWnd *pFr = (CFrameWnd *)AfxGetMainWnd();
        // ÀÌ Æ÷ÀÎÅÍ¿¡¼­ Ȱ¼ºÈ­µÈ µµÅ¥¸ÕÆ®ÀÇ Æ÷ÀÎÅ͸¦ ±¸ÇÔ. 
        CSplit2Doc *pDoc = (CSplit2Doc *)(pFr->GetActiveDocument());
        
        UpdateData(true);
        pDoc->test = m_edit1;
        pDoc->UpdateAllViews(this);  // formview´Â °»½ÅÇÏÁö ¾ÊÀ½
}

¨î Form.cpp¿¡ DocumentÀÇ Çì´õÆÄÀÏ Æ÷ÇÔ½ÃÅ´

.........
#include "Split2Doc.h"  // Ãß°¡ (¹Ýµå½Ã Form.h ¾Õ¿¡ Ãß°¡ÇÒ °Í)
#include "Form.h"
.........

¨ï ¹æ¹ý1ÀÇ ¨ï¿Í °°ÀÌ Split2ViewÀÇ OnDraw() ÇÔ¼ö ÀÛ¼º