View / Document / Frame ÀÇ ºÐ¸®
À̹ø¿¡ ÇØ º¼ °ÍÀº MFCÀÇ AppWizard°¡ ±âº»ÀûÀ¸·Î ¸¸µé¾îÁÖ´Â Äڵ忡¼ View / Document / FrameÀ» Â÷·Ê´ë·Î ºÐ¸®ÇØ º¸·Á°í ÇÑ´Ù. ¿ì¼±Àº ViewºÎÅÍ ¸ÕÀú ¶¼¾î³»º¸ÀÚ. ¿©±â¼ ÇÁ·ÎÁ§Æ® À̸§À» Hack À̶ó°í Á¤Çß´Ù. ¿ì¼± AppWizard(exe)¿¡¼ ¿É¼ÇÀº ±âÁ¸¿¡ ÀÖ´Â ±×´ë·Î Àû¿ëÇÏ¿© SDI ÇÁ·ÎÁ§Æ®¸¦ Çϳª ¸¸µç´Ù. (ºñÁÖ¾ó C++ 6 ÃÖÁ¾ºÐ¼®, º£½ºÆ®ºÏ)
- ViewÀÇ Á¦°Å
1) ÇÁ·ÎÁ§Æ®¿¡¼ HackView.h / cpp ÆÄÀÏÀ» Áö¿î´Ù.
2) Hack.cpp ÆÄÀÏ¿¡¼ #include "HackView.h" ºÎºÐÀ» Áö¿î´Ù.
3) Hack.cpp ÆÄÀÏ¿¡¼ ´ÙÀ½ ºÎºÐÀ» °íÄ£´Ù.
¿ø·¡ ÀÌ·± ³»¿ëÀ»
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CHackDoc),
RUNTIME_CLASS(CMainFrame),
// main SDI frame window
RUNTIME_CLASS(CHackView));
// °íÄ¡±â Àü
AddDocTemplate(pDocTemplate);
ÀÌ·¸°Ô °íÄ£´Ù.
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CHackDoc),
RUNTIME_CLASS(CMainFrame),
// main SDI frame window
NULL);
//
°íÄ£ ÈÄ
AddDocTemplate(pDocTemplate);
4) ±×·± ´ÙÀ½ ÄÄÆÄÀÏÇÏ¸é ºä°¡ ¾ø¾îÁø °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.
(¹º°¡ ´Þ¶óÁø °Ô Á¶±Ý º¸ÀÏ °ÍÀÌ´Ù)
- DocumentÀÇ Á¦°Å (ViewÀÇ Á¦°Å ÈÄ)
1) ÇÁ·ÎÁ§Æ®¿¡¼ HackDoc.h / cpp ÆÄÀÏÀ» Áö¿î´Ù.
2) Hack.cpp ÆÄÀÏ¿¡¼ #include "HackDoc.h" ºÎºÐÀ» Áö¿î´Ù.
3) Hack.cpp ÆÄÀÏ¿¡¼ ´ÙÀ½ ºÎºÐÀ» °íÄ£´Ù. Document ±îÁö Áö¿ö¹ö¸®¸é DocTemplate°¡
ÀüÇô ÇÊ¿ä°¡ ¾ø±â ¶§¹®ÀÌ´Ù.
View¸¦ Á¦°ÅÇÒ ¶§ °íÃÆ´ø ³»¿ëÀ»
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CHackDoc),
RUNTIME_CLASS(CMainFrame),
// main SDI frame window
NULL);
AddDocTemplate(pDocTemplate);
¸ðµÎ Áö¿ì°í ´ÙÀ½°ú °°ÀÌ °íÄ£´Ù.
// ¸ÞÀÎ À©µµ¿ì¸¦ À§ÇÑ Å¬·¡½º
º¯¼ö ¼±¾ð
CMainFrame *pFrame = new CMainFrame();
// ÇÁ·¹ÀÓ Á¦ÀÛ
pFrame->LoadFrame(IDR_MAINFRAME);
// ¸ÞÀÎ À©µµ¿ì·Î ÁöÁ¤
m_pMainWnd = pFrame;
4) MainFrm.h ÆÄÀÏÀ» ¿¾î¼ CMainFrame()À» protected
¼Ó¼º¿¡¼ public ¼Ó¼ºÀ¸·Î ¹Ù²Û´Ù.
5) ±×·± ´ÙÀ½ ÄÄÆÄÀÏÀ» ÇÑ´Ù. View¸¦ Á¦°ÅÇßÀ» ¶§¿Í °°Àº âÀÌ ¶á´Ù. Document´Â
´«¿¡ ¶çÁö ¾ÊÀ¸´Ï±î.
- FrameÀÇ Á¦°Å (View/Document Á¦°Å ÈÄ)
1) ÇÁ·ÎÁ§Æ®¿¡¼ ¸®¼Ò½º ÆÄÀÏÀ» ¸ðµÎ Áö¿î´Ù. (*.rc *.ico, *.bmp µî)
2) MainFrm.cpp ÆÄÀÏÀ» ¿¾î OnCreate() ÇÔ¼ö¸¦ º¸ÀÚ.
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct)
== -1)
return
-1;
if (!m_wndToolBar.CreateEx(this,
TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
|
CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed
to create toolbar\n");
return
-1; // fail to create
}
if (!m_wndStatusBar.Create(this)
||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed
to create status bar\n");
return
-1; // fail to create
}
// TODO: Delete these three
lines if you don't want the toolbar to
// be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
return 0;
}
¾ÕÀÇ ¼Ò½º ´ëºÎºÐÀ» Áö¿ö ´ÙÀ½°ú °°ÀÌ ¸¸µç´Ù.
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct)
== -1)
return
-1;
return 0;
}
3) MainFrm.h ÆÄÀÏÀ» ¿¾î ´ÙÀ½ µÎ ¸â¹öº¯¼ö¸¦ Áö¿î´Ù. º¸´Ù½ÃÇÇ »óÅÂ¹Ù¿Í Åø¹Ù¸¦ À§ÇÑ °ÍÀÌ´Ù.
CStatusBar m_wndStatusBar;
CToolBar m_wndToolBar;
4) Hack.cpp ÆÄÀÏÀ» ¿¾î Document¸¦ Á¦°ÅÇÒ ¶§ °íÃÆ´ø ºÎºÐÀ» º¸ÀÚ.
// ¸ÞÀÎ À©µµ¿ì¸¦ À§ÇÑ Å¬·¡½º
º¯¼ö ¼±¾ð
CMainFrame *pFrame = new CMainFrame();
// ÇÁ·¹ÀÓ Á¦ÀÛ
pFrame->LoadFrame(IDR_MAINFRAME);
// ¸ÞÀÎ À©µµ¿ì·Î ÁöÁ¤
m_pMainWnd = pFrame;
¸®¼Ò½º¸¦ Áö¿ö¹ö·È±â ¶§¹®¿¡ ÀÌ ºÎºÐ¿¡¼ ¹®Á¦°¡ ¹ß»ýÇÑ´Ù. ´ÙÀ½°ú °°ÀÌ °íÄ£´Ù.
CMainFrame *pFrame = new
CMainFrame();
LPCTSTR new_class = AfxRegisterWndClass
(CS_HREDRAW|CS_VREDRAW,
LoadCursor(IDC_ARROW),
(HBRUSH)GetStockObject(WHITE_BRUSH));
pFrame->Create(new_class,
NULL,
WS_OVERLAPPED|WS_SYSMENU,
CRect(0, 0, 300, 100));
m_pMainWnd = pFrame;
5) ÀÌÁ¦ ÄÄÆÄÀÏÇØ º¸¸é Åø¹Ùµµ ¾ø°í, ¸Þ´ºµµ ¾ø°í, »óŹٵµ ¾ø´Â ½ä··ÇÑ À©µµ¿ì°¡ Çϳª ¶ß´Â °ÍÀ» º¼ ¼ö ÀÖ´Ù.