À©µµ¿ì¸¦ ÀÛ¼ºÇϱâ À§Çؼ­´ÂCWindowImplŬ·¡½º¸¦ »ç¿ëÇß½À´Ï´Ù¸¸, ´ÙÀ̾ó·Î±×¸¦ ÀÛ¼ºÇϱâ À§Çؼ­´ÂCDialogImplŬ·¡½º¸¦ »ç¿ëÇÕ´Ï´Ù.

¡¡ÀÌÇÏ¿¡ ³ªÅ¸³»´Â °ÍÀº ¸ð´ú ´ÙÀ̾ó·Î±×¸¦ Ç¥½ÃÇϱ⸸ ÇÏ¸é µÇ´Â °£´ÜÇÑ ÇÁ·Î±×·¥ÀÇ ¿ø½Ã ÄÚµåÀÔ´Ï´Ù. ÀÌ ÇÁ·Î±×·¥¿¡¼­´Â  CDialogImplŬ·¡½º·ÎºÎÅÍ »ó¼Ó Ŭ·¡½º CMainDlg(À̰ÍÀÌ ¸ÞÀÎ À©µµ¿ì°¡ µË´Ï´Ù ) ¸¦ ¸¸µé¾î CMainDlg Ŭ·¡½º³»¿¡¼­ WM_INITDIALOG ¸Þ¼¼Áö¿¡ÀÇ ÀÀ´ä°ú IDOK,IDCANCEL¶ó°í ÇÏ´Â ID¸¦ °¡Áö´Â WM_COMMAND ¸Þ¼¼Áö¿¡ÀÇ ÀÀ´äÀ» Á¤ÀÇÇϰí ÀÖ½À´Ï´Ù. µ¡ºÙ¿© ÀÌ ÇÁ·Î±×·¥Àº Win32Application ÇÁ·ÎÁ§Æ®·Î ºôµå ÇÕ´Ï´Ù.

 

// stdafx.h

#include <atlbase.h>

#include <atlapp.h>

extern CAppModule _Module;

#include <atlwin.h>

 

#include <atlcrack.h>

#include <atlmisc.h>

                      

 

// MainDlg.h

class CMainDlg : public CDialogImpl<CMainDlg>

{

public:

    enum { IDD = IDD_DIALOG1 };

 

    // ¸Þ¼¼Áö ¸Ê

    BEGIN_MSG_MAP_EX(CMainDlg)

        MSG_WM_INITDIALOG(OnInitDialog)

        COMMAND_ID_HANDLER_EX(IDOK, OnOK)

        COMMAND_ID_HANDLER_EX(IDCANCEL, OnCancel)

    END_MSG_MAP()

 

    LRESULT OnInitDialog(HWND hWnd, LPARAM lParam){

        // ½ºÅ©¸°ÀÇ Áß¾Ó¿¡ ¹èÄ¡

        CenterWindow();

 

        // Å« ¾ÆÀÌÄÜ ¼³Á¤

        HICON hIcon = AtlLoadIconImage(IDI_ICON_MAIN, LR_DEFAULTCOLOR,

            ::GetSystemMetrics(SM_CXICON), ::GetSystemMetrics(SM_CYICON));

        SetIcon(hIcon, TRUE);

       

        // ÀÛÀº ¾ÆÀÌÄÜ ¼³Á¤

        HICON hIconSmall = AtlLoadIconImage(IDI_ICON_MAIN, LR_DEFAULTCOLOR,

            ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON));

        SetIcon(hIconSmall, FALSE);

 

        return TRUE;

    }

 

    void OnOK(UINT uNotifyCode, int nID, HWND hWndCtl){

        EndDialog(nID);

    }

 

    void OnCancel(UINT uNotifyCode, int nID, HWND hWndCtl){

        EndDialog(nID);

    }

};

                      

 

// modal.cpp #include "stdafx.h"

 

#include "resource.h"

 

#include "MainDlg.h"

 

CAppModule _Module;

 

int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE, LPTSTR lpCmdLine, int nCmdShow)

{

    _Module.Init(NULL, hInstance);

 

    CMainDlg dlgMain;

    int nRet = dlgMain.DoModal();

 

    _Module.Term();

 

    return nRet;

}

                      


¡¡¿ì¼±Àº ÇÁ·ÎÁ§Æ®¿¡ ´ÙÀ̾ó·Î±× ÀÚ¿ø°ú ¾ÆÀÌÄÜ ÀÚ¿øÀ» Ãß°¡ÇØ ÀÚ¿øIDÀ¸·Î¼­ °¢°¢ IDD_DIALOG1IDI_ICON1 ¸¦ ¼³Á¤ÇÕ´Ï´Ù.



¡¡´ÙÀ½¿¡  À©µµ¿ì ¶§¿Í °°ÀÌ CAppModule Ŭ·¡½ºÀÇ ÀνºÅϽº¸¦ ±Û·Î¹ú ÇÏ°Ô ¼±¾ðÇØ  _tWinMain()ÀÇ ÃÖÃÊ¿Í ÃÖÈÄ·Î ÃʱâÈ­¿Í µÚ󸮸¦ Çϰí ÀÖ½À´Ï´Ù. ¸ð´ú ´ÙÀ̾ó·Î±×¸¦ ÀÛ¼ºÇÏ·Á¸é DoModal()¸¦ È£ÃâÇÕ´Ï´Ù.

¡¡CMainDlg Ŭ·¡½º´Â CDialogImpl Ŭ·¡½º·ÎºÎÅÍ ÆÄ»ýÇϰí ÀÖ½À´Ï´Ù¸¸  CDialogImplÀÇ Á¦1ÅÛÇø´ Àμö¿¡µµ CMainDlg¶ó´Â À̸§À» °Ç³×ÁÝ´Ï´Ù ( Á¦2ÅÛÇø´ Àμö´Â »ý·« °¡´ÉÇÕ´Ï´Ù. ¿©±â¿¡¼­´Â »ý·« Çϰí ÀÖ½À´Ï´Ù. ). CMainDlgŬ·¡½º³»¿¡¼­´Â public ¼±¾ðÀÇ  enum¿¡ ÀÇÇØ ´ÙÀ̾ó·Î±× ÀÚ¿ø ID¸¦ Á¤ÀÇÇØ  ¸Þ¼¼Áö ¸Ê¿¡ ÀÇÇØ ¸Þ¼¼Áö¿Í ±×¿¡ ´ëÇÑ Çڵ鷯¸¦ ¹­°í ÀÖ½À´Ï´Ù.

ÀÌ ÇÁ·Î±×·¥¿¡¼­´Â ÀÚ¿ø ID°¡ IDOK ¶Ç´Â IDCANCEL ÀÇ ¹öưÀ» ´©¸£¸é ÇÁ·Î±×·¥À» Á¾·áÇϵµ·Ï Çϰí ÀÖ½À´Ï´Ù. À̹ø ¿¹¿¡¼­´Â ¸ð´ú ´ÙÀ̾ó·Î±×°¡ ¸ÞÀÎ À©µµ¿ì°¡ µÇ¹Ç·Î  ¹öưÀ» ´­·¶À» ¶§¿¡ EndDialog()¸¦ È£ÃâÇØ ´ÙÀ̾ó·Î±×¸¦ ´Ù¹°°í ÀÖ½À´Ï´Ù.