<¿©·¯°³ÀÇ ÆÄÀÏ ÇѲ¨¹ø¿¡ ¿­±â>

 º¸Åë 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´Â ÀÓÀÇÀÇ µ¥ÀÌÅÍÇüÀÌ´Ù. ¿ø·¡ÀÇ ÇüÅÂ¿Í ¼öÁ¤µÈ ÇüŸ¦ Àß ºñ±³ÇØ º¸¶ó.
»ý¼ºÀÚ¿¡ Àü´ÞÇÏ´Â ÀÎÀÚÀÇ µ¥ÀÌÅÍÇü°ú °¹¼ö´Â Á¦ÇÑÀÌ ¾ø´Ù.
Âü, »ý¼ºÀÚ¸¦ ÅëÇØ Àü´ÞµÈ Àμö´Â »ý¼ºÀÚ ÇÔ¼ö ³»¿¡¼­¸¸ À¯È¿ÇϹǷΠ»ý¼ºÀÚ¿¡¼­ ´ëÈ­»óÀÚÀÇ Àû´çÇÑ ¸â¹öº¯¼ö¿¡ ´ëÀÔÇÏ¿© ÀúÀåÇصξî¾ß ÇÑ´Ù.  

 

<Äֿܼ¡ ¹®ÀÚ¿­ Ãâ·ÂÇϱâ>

 Äֿܼ¡ ¹®ÀÚ¿­À» Ãâ·ÂÇϱâ À§ÇØ ´ÙÀ½°ú °°Àº Äڵ带 »ç¿ëÇÑ´Ù.

 ¿©±â¼­´Â »õ·Î¿î ´ÙÀ̾ó·Î±×¸¦ Çϳª ¸¸µé°í, °Å±â¿¡ ¿¡µðÆ® ¹Ú½º¿Í ¹öÆ°À» Çϳª¾¿ Ãß°¡ÇÑ ÈÄ ±× ID¸¦ °¢°¢ IDC_EDIT1, IDC_BUTTON1 À¸·Î ÇÏ°í, ºä¿¡¼­ ¸¶¿ì½º ¿ÞÂÊ ¹öÆ°À» ´õºí Ŭ¸¯ÇÏ¸é ±× ´ÙÀ̾ó·Î±×°¡ ¶ßµµ·Ï ÀÛ¼ºÇØ º¸¾Ò´Ù. ¹°·Ð ÇÊ¿äÇÑ ´ë·Î ´Ù¸£°Ô ÀÛ¼ºÇصµ µÈ´Ù.

 ´Ü, ¸¸¾à À§ÀÇ AfxMessageBox() °¡ ¾ø´Ù¸é Ãâ·ÂµÇÀÚ¸¶ÀÚ ÄܼÖÀÌ »ç¶óÁ® ¹ö¸®¹Ç·Î FreeConsole()À» Àû´çÇÑ Àå¼Ò¿¡¼­ »ç¿ëÇØ¾ß ÇÒ °ÍÀÌ´Ù.

 

- the end of this article -