º¸Åë MDI¿¡¼ ÆÄÀÏÀ» ¿ ¶§, Çϳª¾¿¹Û¿¡ ¼±ÅÃÀÌ µÇÁö ¾Ê´Âµ¥, ´ÙÀ½°ú °°ÀÌ OnFileOpen() ÇÔ¼ö¸¦ ¿À¹ö¶óÀ̵å ÇÏ¸é ¿©·¯°³ÀÇ ÆÄÀÏÀ» ¼±ÅÃÇÒ ¼ö ÀÖ½À´Ï´Ù. SDI¿¡¼ ÀÌ°Å ¾µ ÇÊ¿ä ¾ø°ÚÁÒ??
void CMultiSelApp::OnFileOpen()
{
// TODO: Add your command handler
code here
static char BASED_CODE szFilter[]
= "Image Files (*.bmp,*.dib)|*.bmp;*.dib||";
PSZ pszFile=new char[32767];
CFileDialog cfd(TRUE,".bmp",NULL,
OFN_HIDEREADONLY|
OFN_OVERWRITEPROMPT|
OFN_FILEMUSTEXIST
|
OFN_EXPLORER|
OFN_ALLOWMULTISELECT|
OFN_LONGNAMES,
szFilter);
ZeroMemory(pszFile,32767);
cfd.m_ofn.lpstrFile=pszFile;
cfd.m_ofn.nMaxFile=32767;
cfd.m_ofn.nFileOffset=0;
if(cfd.DoModal()==IDOK) {
POSITION
pos=cfd.GetStartPosition();
while(pos!=NULL)
{
CString
csFile=cfd.GetNextPathName(pos);
OpenDocumentFile(csFile);
}
}
}
- SDI
CWinApp : AfxGetApp()
CMainFrame : AfxGetMainWnd()
CView °è¿ : AfxGetMainWnd()->GetActiveView()
CDocument : AfxGetMainWnd()->GetActiveDocument()
- MDI
CWinApp : AfxGetApp()
CMDIFrameWnd : AfxGetMainWnd()
CMDIChildWnd : AfxGetMainWnd()->GetActiveFrame()
CView °è¿ : AfxGetMainWnd()->GetActiveFrame()->GetActiveView()
CDocument : AfxGetMainWnd()->GetActiveFrame()->GetActiveDocument()
ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Ù º¸¸é CD-ROM ŸÀÌƲó·³ ¸Þ´ºµµ ¾ø°í, Åø¹Ùµµ ¾ø°í, »óŹٵµ ¾ø°í, ĸ¼Ç¹Ùµµ ¾ø´Â ¸» ±×´ë·Î ƲÀÌ ÀüÇô ¾ø´Â ±×·± À©µµ¿ì°¡ ÇÊ¿äÇÒ ¶§°¡ ÀÖ´Ù. SDK¿¡¼± °£´ÜÇÏÁö¸¸ MFC¿¡¼± Á» ±î´Ù·Î¿î ¹®Á¦°¡ µÉ ¼ö ÀÖ´Ù.
MFC¿¡¼´Â ±âº»ÀûÀ¸·Î ¸Þ´º°¡ ³»ÀåµÇ±â ¶§¹®¿¡ ÀÌ ¸Þ´º¸¦ ÇØÁ¦ÇÏÁö ¾Ê°í Å©±â¿Í ½ºÅ¸ÀÏÀ» ¹Ù²Ù¸é ½ÇÇà¿¡·¯°¡ ¹ß»ýÇÑ´Ù. ÀÌ ¸Þ´º¸¦ ¾ø¾Ö±â À§ÇØ »õ·Î¿î ¸Þ´º¸¦ ¸¸µé°í ÀÌ ¸Þ´º¸¦ ¸ÞÀÎÇÁ·¹ÀÓ¿¡ ¼³Á¤µÈ ¸Þ´º¿Í ¿¬°áÇÑ´Ù. À̶§ Attach ÇÔ¼ö¸¦ ÀÌ¿ëÇÑ´Ù. ÀÌ·¸°Ô ¿¬°áµÈ ÈÄ pMenu¸¦ »èÁ¦ÇÏ¸é ¸ÞÀÎÇÁ·¹ÀÓÀÇ ¸Þ´º ¶ÇÇÑ »èÁ¦µÈ´Ù. ÀÌ·¸°Ô ÇÑ ÈÄ ¸ÞÀÎÇÁ·¹ÀÓÀÇ ¸Þ´º¸¦ NULL·Î ¼³Á¤ÇÏ°í, pMenu¸¦ ¸Þ¸ð¸®¿¡¼ ÇØÁ¦ÇÑ´Ù.
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs)
)
return
FALSE;
// TODO: Modify the Window class
or styles here by modifying
// the CREATESTRUCT cs
cs.style = WS_VISIBLE|WS_POPUP|WS_BORDER;
int cx = GetSystemMetrics(SM_CXFULLSCREEN);
int cy = GetSystemMetrics(SM_CYFULLSCREEN);
cs.cx = 640; //
À©µµ¿ìÀÇ °¡·ÎÅ©±â
cs.cy = 480; //
À©µµ¿ìÀÇ ¼¼·ÎÅ©±â
cs.x = (cx-640)/2; //
À©µµ¿ìÀÇ Á»ó´Ü x ÁÂÇ¥
cs.y = (cy-480)/2; //
À©µµ¿ìÀÇ Á»ó´Ü y ÁÂÇ¥
CMenu *pMenu = new CMenu; //
»õ·Î¿î ¸Þ´º¸¦ ¸¸µç´Ù.
pMenu->Attach(cs.hMenu);
// ¸ÞÀÎÇÁ·¹ÀÓ¿¡ ¼³Á¤µÈ ¸Þ´º¿Í
¿¬°á
pMenu->DestroyMenu(); //
¸Þ´º»èÁ¦
cs.hMenu = NULL;
delete pMenu; //
¸Þ¸ð¸®¿¡¼ ÇØÁ¦
return CFrameWnd::PreCreateWindow(cs);
//return TRUE;
}
ÀÌ·¯ÇÑ À©µµ¿ì¸¦ Á¾·áÇϱâ À§Çؼ View¿¡ ¾à°£ 󸮸¦ ÇØÁÖ¾ú´Ù.
void CNoFrameView::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler
code here and/or call default
((CMainFrame *)AfxGetMainWnd())->SendMessage(WM_CLOSE,
0, 0);
//CView::OnRButtonDown(nFlags,
point);
}
<Dialog Box »ý¼ºÀÚ¸¦ ÅëÇØ µ¥ÀÌÅ͸¦ Àü´ÞÇÏ´Â ¹æ¹ý>
´ëÈ»óÀÚ´Â »ç¿ëÀÚ¿Í ÇÁ·Î±×·¥°£ÀÇ »óÈ£ ÀÇ»çÀü´ÞÀ» ¿ëÀÌÇÏ°Ô ÇÏ´Â µµ±¸ÀÌ´Ù.
»ç¿ëÀÚÀÇ ¸í·ÉÀ» ó¸®Çϱâ À§ÇØ Àû´çÇÑ Á¤º¸¸¦ ¾Ë·ÁÁÖ°í ¶Ç ÇÊ¿äÇÑ Á¤º¸¸¦ ÀԷ¹޴´Ù.
ÀÌ °úÁ¤¿¡¼ ´ëÈ»óÀÚ´Â ¸ðµç Á¤º¸¸¦ ½º½º·Î »ý¼ºÇÏ¿© Á¦½ÃÇÏÁö´Â ¾Ê´Â´Ù. ´ëÈ»óÀÚ
ÀÚü°¡ ÇÁ·Î±×·¥ÀÇ ºÎ¼öÀûÀÎ ±â´ÉÀÏ »ÓÀ̹ǷΠ´ëºÎºÐÀÇ Á¤º¸´Â ¸ÞÀÎ ÇÁ·Î±×·¥ÀÌ °®°ÔµÈ´Ù.
µû¶ó¼ ´ëÈ»óÀÚ¸¦ È£ÃâÇϱâ Àü¿¡ ´ëÈ»óÀÚ¿¡¼ ÇÊ¿äÇÑ µ¥ÀÌÅ͸¦ Àü´ÞÇØ ÁÖ¾î¾ß ÇÑ´Ù.
(¹°·Ð ±× µ¥ÀÌÅÍ°¡ Àü¿ªº¯¼ö¶ó¸é »ó°üÀÌ ¾ø°ÚÁö¸¸...)
¿©±â¼ ÇÏ·Á´Â ¾ê±â´Â ¹Ù·Î ±× Àü´Þ ¹æ¹ýÀÌ´Ù.
- °¡Àå ÀϹÝÀûÀÎ ¹æ¹ý
Âü°í¼ÀûÀÇ °¡Àå ÈçÇÑ ÁÖÁ¦°¡ ´ëÈ»óÀÚÀÌ°í °Å±â¼ ºó¹øÇÏ°Ô »ç¿ëÇÏ´Â ¹æ¹ýµÇ´Â ÄÚµå´Â ´ÙÀ½°ú °°´Ù.
CMyDlg dlg;
dlg.m_data = myData1; // dialog boxÀÇ
¸â¹öº¯¼ö¿¡ Á÷Á¢ Àü´ÞÇÏ´Â °æ¿ì.
dlg.SetData( myData2 ); // dialog boxÀÇ ¸â¹öÇÔ¼ö¸¦ »ç¿ëÇÏ´Â
°æ¿ì.
dlg.DoModal();
- »ý¼ºÀÚ¸¦ ÅëÇØ Àü´ÞÇÏ´Â ¹æ¹ý
ÀÌ·¸°Ô ÇÏ¸é ´õ °£´ÜÇÏÁö ¾ÊÀ»±î?
CMyDlg dlg( myData1, myData2 ); // dialog boxÀÇ »ý¼ºÀÚ¿¡ µ¥ÀÌÅÍ Àü´Þ.
dlg.DoModal();
±×·¯ÀÚ¸é Ŭ·¡½ºÀ§Àúµå°¡ »ý¼ºÇØÁØ ´ëÈ»óÀÚ Å¬·¡½º¸¦ Á¶±Ý ¼öÁ¤ÇØ¾ß ÇÑ´Ù.
¸ÕÀú Çì´õÆÄÀÏÀÇ Å¬·¡½º ¼±¾ðÁß »ý¼ºÀÚ ¿øÇüÀ» ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù. ¿ø·¡ÀÇ »ý¼ºÀÚ´Â
Áö¿öµµ µÇ°í ±×´ë·Î µÐ ä »õ·Î¿î »ý¼ºÀÚ¸¦ Ãß°¡Çصµ µÈ´Ù.
class CMyDlg : public CDialog
{
public:
CMyDlg( CWnd* pParent = NULL ); //
Ç¥ÁØ »ý¼ºÀÚ
CMyDlg( MYDATA1 myData1, MYDATA2 myData2 ); // »õ·Î¿î
»ý¼ºÀÚ
...
};
´ÙÀ½¿¡ cpp ÆÄÀÏÀÇ Á¤ÀǺκÐÀ» ¼öÁ¤ÇÑ´Ù. ¸¶Âù°¡Áö·Î ±âÁ¸ÀÇ »ý¼ºÀÚ´Â Áö¿öµµ µÇ°í ±×´ë·Î µÐ ä »õ·Î¿î »ý¼ºÀÚÇÔ¼ö¸¦ Ãß°³Çصµ µÈ´Ù. ±×´ë·Î µÑ °æ¿ì¿£ ¾î¶² »ý¼ºÀÚ¸¦ »ç¿ëÇؼ ´ëÈ»óÀÚ¸¦ È£ÃâÇÒ °ÍÀΰ¡´Â ÇÁ·Î±×·¡¸Ó ¸¾´ë·Î´Ù.
CMyDlg::CMyDlg( CWnd* pParent /*=NULL*/ ) : CDialog( CDbNewDlg::IDD, pParent
)
{
... // ±âÁ¸ÀÇ »ý¼ºÀÚ
}
CMyDlg::CMyDlg( MYDATA1 myData1, MYDATA2 myData2 ) : CDialog(CMyDlg::IDD,
NULL)
{
... // »õ·Î¿î »ý¼ºÀÚ
}
À§¿¡¼ MYDATA1, MYDATA2´Â ÀÓÀÇÀÇ µ¥ÀÌÅÍÇüÀÌ´Ù. ¿ø·¡ÀÇ ÇüÅÂ¿Í ¼öÁ¤µÈ ÇüŸ¦
Àß ºñ±³ÇØ º¸¶ó.
»ý¼ºÀÚ¿¡ Àü´ÞÇÏ´Â ÀÎÀÚÀÇ µ¥ÀÌÅÍÇü°ú °¹¼ö´Â Á¦ÇÑÀÌ ¾ø´Ù.
Âü, »ý¼ºÀÚ¸¦ ÅëÇØ Àü´ÞµÈ Àμö´Â »ý¼ºÀÚ ÇÔ¼ö ³»¿¡¼¸¸ À¯È¿ÇϹǷΠ»ý¼ºÀÚ¿¡¼ ´ëÈ»óÀÚÀÇ
Àû´çÇÑ ¸â¹öº¯¼ö¿¡ ´ëÀÔÇÏ¿© ÀúÀåÇصξî¾ß ÇÑ´Ù.
Äֿܼ¡ ¹®ÀÚ¿À» Ãâ·ÂÇϱâ À§ÇØ ´ÙÀ½°ú °°Àº Äڵ带 »ç¿ëÇÑ´Ù.
void CConsoleTest::OnButton1()
{
CString
str;
GetDlgItemText(IDC_EDIT1,
str);
AllocConsole();
// »õ·Î¿î ÄÜ¼Ö ÇÁ·Î¼¼½º ÇÒ´ç
DWORD
dwWrite;
// ÄܼÖ
ÇÁ·Î¼¼½ºÀÇ ÇÚµéÀ» ¾ò´Â´Ù.
HANDLE
hOut = GetStdHandle(STD_OUTPUT_HANDLE);
WriteFile(hOut,
str, str.GetLength(), &dwWrite, NULL); // µ¥ÀÌÅÍ Ãâ·Â
AfxMessageBox("ÄܼÖ
ȸ鿡 Ãâ·ÂÇϱâ"); // ÄܼÖÀ» Àá½Ã À¯ÁöÇϱâ À§ÇØ »ç¿ë
FreeConsole();
// ÇÒ´çµÈ ÄÜ¼Ö ÇØÁ¦
SetDlgItemText(IDC_EDIT1,
""); // ¿¡µðÆ® ¹Ú½º ³»¿ë »èÁ¦
}
¿©±â¼´Â »õ·Î¿î ´ÙÀ̾ó·Î±×¸¦ Çϳª ¸¸µé°í, °Å±â¿¡ ¿¡µðÆ® ¹Ú½º¿Í ¹öÆ°À» Çϳª¾¿ Ãß°¡ÇÑ ÈÄ ±× ID¸¦ °¢°¢ IDC_EDIT1, IDC_BUTTON1 À¸·Î ÇÏ°í, ºä¿¡¼ ¸¶¿ì½º ¿ÞÂÊ ¹öÆ°À» ´õºí Ŭ¸¯ÇÏ¸é ±× ´ÙÀ̾ó·Î±×°¡ ¶ßµµ·Ï ÀÛ¼ºÇØ º¸¾Ò´Ù. ¹°·Ð ÇÊ¿äÇÑ ´ë·Î ´Ù¸£°Ô ÀÛ¼ºÇصµ µÈ´Ù.
´Ü, ¸¸¾à À§ÀÇ AfxMessageBox() °¡ ¾ø´Ù¸é Ãâ·ÂµÇÀÚ¸¶ÀÚ ÄܼÖÀÌ »ç¶óÁ® ¹ö¸®¹Ç·Î FreeConsole()À» Àû´çÇÑ Àå¼Ò¿¡¼ »ç¿ëÇØ¾ß ÇÒ °ÍÀÌ´Ù.
- the end of this article -