Áö±Ý±îÁö ATL/WTL AppWizard ¸¦ »ç¿ëÇÏÁö ¾Ê°í Win32 Application ÇÁ·ÎÁ§Æ®·Î¼­ ÇÁ·Î±×·¥À» ÀÛ¼ºÇØ ¿Ô½À´Ï´Ù¸¸ , ¿©±â¼­ ATL/WTL AppWizard ¸¦ »ç¿ëÇØ º¸°Ú½À´Ï´Ù.

´ÙÀ½¿¡ ³ªÅ¸³»´Â °ÍÀº ATL/WTL AppWizard À¸·Î ÀÛ¼ºÇÑ ¸ð´Þ ´ÙÀ̾ó·Î±×ÀÇ ½ºÄ̸®ÅÏ(¾ç½Ä) ÀÔ´Ï´Ù. ÀÛ¼ºÇÏ·Á¸é ATL/WTL AppWizard ¸¦ ½ÇÇàÇØ [Dialog Based] ¸¦ ¼±ÅÃÇØ [Á¾·á] ¹öưÀ» ´©¸¨´Ï´Ù. µ¡ºÙ¿© °³ÇàÀ̳ª ÄÚ¸àÆ® , »ç¿ëÇÏÁö ¾Ê´Â ÆÄ¶ó¹ÌÅÍÀÇ »ý·« µî, ¿ø ¼Ò½º·ÎºÎÅÍ º¯°æÇϰí ÀÖ´Â ºÎºÐÀÌ ÀÖ½À´Ï´Ù.

// stdafx.h

#include <atlbase.h>

#include <atlapp.h>

 

extern CAppModule _Module;

 

#include <atlwin.h>

                      

 

// stdafx.cpp

#include "stdafx.h"

 

#if (_ATL_VER < 0x0700)

#include <atlimpl.cpp>

#endif //(_ATL_VER < 0x0700)

                      

 

// maindlg.h

class CMainDlg : public CDialogImpl<CMainDlg>

{

public:

    enum { IDD = IDD_MAINDLG };

 

    // ¸Þ¼¼Áö ¸Ê

    BEGIN_MSG_MAP(CMainDlg)

        MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)

        COMMAND_ID_HANDLER(ID_APP_ABOUT, OnAppAbout)

        COMMAND_ID_HANDLER(IDOK, OnOK)

        COMMAND_ID_HANDLER(IDCANCEL, OnCancel)

    END_MSG_MAP()

 

    LRESULT OnInitDialog(UINT, WPARAM, LPARAM, BOOL&)

    {

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

        CenterWindow();

 

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

        HICON hIcon = (HICON)::LoadImage(

            _Module.GetResourceInstance(),

            MAKEINTRESOURCE(IDR_MAINFRAME),

            IMAGE_ICON,

            ::GetSystemMetrics(SM_CXICON),

            ::GetSystemMetrics(SM_CYICON),

            LR_DEFAULTCOLOR);

        SetIcon(hIcon, TRUE);

        HICON hIconSmall = (HICON)::LoadImage(

            _Module.GetResourceInstance(),

            MAKEINTRESOURCE(IDR_MAINFRAME),

            IMAGE_ICON,

            ::GetSystemMetrics(SM_CXSMICON),

            ::GetSystemMetrics(SM_CYSMICON),

            LR_DEFAULTCOLOR);

        SetIcon(hIconSmall, FALSE);

 

        return TRUE;

    }

 

    LRESULT OnAppAbout(WORD, WORD, HWND, BOOL&)

    {

        // ¹öÁ¯ Á¤º¸ ´ÙÀ̾ó·Î±× Ç¥½Ã

        CSimpleDialog<IDD_ABOUTBOX, FALSE> dlg;

        dlg.DoModal();

        return 0;

    }

 

    LRESULT OnOK(WORD, WORD wID, HWND, BOOL&)

    {

        EndDialog(wID);

        return 0;

    }

 

    LRESULT OnCancel(WORD, WORD wID, HWND, BOOL&)

    {

        EndDialog(wID);

        return 0;

    }

};

                      

 

// ModalDialog.cpp

#include "stdafx.h"

 

#include <atlframe.h>

#include <atlctrls.h>

#include <atldlgs.h>

#include <atlctrlw.h>

 

#include "resource.h"

 

#include "maindlg.h"

 

CAppModule _Module;

 

int WINAPI _tWinMain(

    HINSTANCE hInstance,

    HINSTANCE /*hPrevInstance*/,

    LPTSTR lpstrCmdLine,

    int nCmdShow)

{

    HRESULT hRes = ::CoInitialize(NULL);

// NT4.0ÀÌÈÄ¿¡ ½ÇÇàÇÏ´Â °æ¿ì´Â , ´ë½Å¿¡ ´ÙÀ½ÀÇ È£ÃâÀ» »ç¿ëÇÏ´Â °ÍÀ¸·Î ÇÁ¸® threadÈ­

// ½Ãų ¼ö°¡ ÀÖ´Ù. À̰ÍÀº ÀÓÀÇÀÇRPCthread°¡ ºÒ·Á °¡´Â °ÍÀ» ÀǹÌÇÑ´Ù.

//  HRESULT hRes = ::CoInitializeEx(NULL, COINIT_MULTITHREADED);

    ATLASSERT(SUCCEEDED(hRes));

 

    // À̰ÍÀºMicrosoft Layer for Unicode (MSLU) ÀÌ »ç¿ëµÇ¾úÀ» ¶§ÀÇ

    // ATLÀ©µµ¿ì thunking ¹®Á¦¸¦ ÇØ°áÇÏ´Â

    ::DefWindowProc(NULL, 0, 0, 0L);

 

    // ´Ù¸¥ ÄÁÆ®·ÑÀ» ¼­Æ÷Æ®Çϱâ À§ÇÑ Ç÷¡±×¸¦ Ãß°¡

    AtlInitCommonControls(ICC_COOL_CLASSES | ICC_BAR_CLASSES);

 

    hRes = _Module.Init(NULL, hInstance);

    ATLASSERT(SUCCEEDED(hRes));

 

    int nRet = 0;

    // BLOCK: ¾îÇø®ÄÉÀÌ¼Ç ½ÇÇà

    {

        CMainDlg dlgMain;

        nRet = dlgMain.DoModal();

    }

 

    _Module.Term();

    ::CoUninitialize();

 

    return nRet;

}

                      


¡¡ÀÌ ¼Ò½º·Î »õ·Î¿î ºÎºÐÀ̶ó°í ¸»Çϸé stdafx.cpp ÆÄÀÏ ³»¿Í _tWinMain() ¾ÈÀÔ´Ï´Ù.

¡¡stdafx.cppÆÄÀÏ¿¡¼­´Â ATL7.0 º¸´Ù ³°Àº ¹öÁ¯À» »ç¿ëÇϰí ÀÖ´Â °æ¿ì¿¡  atlimpl.cpp ¶ó°í ÇÏ´Â ÆÄÀÏÀ» ÀÎŬ·çµå Çϵµ·Ï Çϰí ÀÖ½À´Ï´Ù.  atlimpl.cpp ¿¡¼­´Â _ATL_MIN_CRTÀÌ Á¤Àǵǰí ÀÖ´Â °æ¿ì¿¡  µ¶ÀÚÀûÀÎ WinMainCRTStartup() µîÀ» È£ÃâÇϵµ·Ï Çϰí ÀÖ½À´Ï´Ù.  À̰Ϳ¡ ÀÇÇØ ATL´Â °¡´ÉÇÑ ÇÑ C ·±Å¸ÀÓ ¶óÀ̺귯¸®(CRT) ¸¦ »ç¿ëÇÏÁö ¾Ê°Ô µÇ¾î ÇÁ·Î±×·¥ÀÇ ÆÄÀÏ »çÀÌÁî°¡ ÀÛ¾ÆÁý´Ï´Ù.

µ¡ºÙ¿©ATL/WTL AppWizard ·Î ÀÛ¼ºÇÑ ÇÁ·ÎÁ§Æ®ÀÇ ¸±¸®½º ºôµå¿¡¼­´Â  µðÆúÆ®·Î_ATL_MIN_CRT°¡ Á¤Àǵǰí ÀÖ½À´Ï´Ù.

_tWinMain()¿¡¼­´Â COM ÃʱâÈ­ ÇÔ¼ö³ª MSLU¸¦ À§ÇÑ Äڵ尡 Ãß°¡µÇ°í ÀÖ½À´Ï´Ù.

¡¡±×·±µ¥ ATL/WTL AppWizard ±×¸®°í ÀÛ¼ºÇÑ ÇÁ·ÎÁ§Æ®ÀÇ ÀÚ¿øÀº µðÆúÆ®·Î ¿µ¹®ÆÇÀÔ´Ï´Ù. À̰ÍÀ» ÀϺ»¾î·Î Çϱâ À§Çؼ­´Â resource file(È®ÀåÀÚ(extension).rc) ¸¦ ÅØ½ºÆ® ¸ðµå·Î ¿­¾î ÀÌÇÏÀÇ ºÎºÐ£º

/////////////////////////////////////////////////////////////////////////////

// English (U.S.) resources

 

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)

#ifdef _WIN32

LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US

#pragma code_page(1252)

#endif //_WIN32

                      


À» ´ÙÀ½°ú °°ÀÌ °íÃÄ ¾¹´Ï´Ù.

/////////////////////////////////////////////////////////////////////////////

// ÀϺ»¾î resources

 

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN)

#ifdef _WIN32

LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT

#pragma code_page(932)

#endif //_WIN32