¿ì¼± óÀ½¿¡ WTL¸¦ »ç¿ëÇÏÁö ¾Ê°íATL¸¸ À» »ç¿ëÇØ ÅÛÇø´ ¶óÀ̺귯¸®¿¡ ÀÇÇÑ WindowsÇÁ·Î±×·¡¹ÖÀÇ ±âº»À» ÇØº¸°í ½Í´Ù°í »ý°¢ÇÕ´Ï´Ù.

¡¡ATL¿¡ À־ÀÇ °¡Àå ±âº»ÀûÀÎ À©µµ¿ì °ü·Ã Ŭ·¡½º´ÂCWindowÀÔ´Ï´Ù. CWindowŬ·¡½º´Â À©µµ¿ì ÇÚµéÀ» ĸ½¶È­ÇØ À©µµ¿ì¿¡ °üÇÑ Win32APIÀ» ·¦ÆÛ ÇÏ´Â ¸¹Àº ¸â¹ö ÇÔ¼ö¸¦ °¡Áý´Ï´Ù. À̰ÍÀº Á¤È®È÷MFCÀÇ CWnd Ŭ·¡½º¿Í ´à¾Æ ÀÖ½À´Ï´Ù.

¡¡CWindow±×¸®°í À©µµ¿ì¸¦ ÀÛ¼ºÇÏ·Á¸é Create¸â¹ö ÇÔ¼ö¸¦ »ç¿ëÇϰųª ±âÁ¸ÀÇ À©µµ¿ì ÇÚµéÀ» Attach¸â¹ö ÇÔ¼ö·Î Attach ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.

¡¡±×·±µ¥ CWindowŬ·¡½º´Â ¸Þ¼¼Áö·ÎÀÇ ¹ÝÀÀÀ» Á¤ÀÇ ÇÒ ¼ö ¾ø½À´Ï´Ù. ¿©±â¼­ ¸¸¾àMFCÀ̶ó¸éCWndÀÇ »ó¼Ó Ŭ·¡½º¸¦ ¸¸µé¾î ¿¹¸¦ µé¸éWM_CREATE¸Þ¼¼Áö·ÎÀÇ ¹ÝÀÀÀ» Á¤ÀÇ Çϱâ À§Çؼ­´ÂOnCreateÀ» ¿À¹ö¶óÀ̵å(override) ÇÏÁö¸¸  ATLÀº CWindowÀÇ »ó¼Ó Ŭ·¡½ºÀÎCWindowImplŬ·¡½º·ÎºÎÅÍ »ó¼Ó Ŭ·¡½º¸¦ ¸¸µé¾î , ±× Ŭ·¡½º³»¿¡¼­ ¸Þ¼¼Áö·ÎÀÇ ÀÀ´äÀ» Á¤ÀÇÇÕ´Ï´Ù.

¡¡¹ØÀÇ °ÍÀº  À©µµ¿ì Áß¾Ó¿¡ ¡¸Hello, ATL/WTL¡¹À̶ó°í Ç¥½ÃÇϱ⸸ ÇÏ¸é µÇ´Â °£´ÜÇÑ ÇÁ·Î±×·¥ÀÇ ¿ø½Ã ÄÚµåÀÔ´Ï´Ù. ÀÌ ÇÁ·Î±×·¥¿¡¼­´Â CWindowImplŬ·¡½º·ÎºÎÅÍ »ó¼Ó Ŭ·¡½ºCMyWindow(À̰ÍÀÌ ¸ÞÀÎ À©µµ¿ì°¡ µË´Ï´Ù ) ¸¦ ¸¸µé¾î  CMyWindow Ŭ·¡½º ³»¿¡¼­ WM_PAINT¿Í WM_DESTROY ¸Þ¼¼Áö·ÎÀÇ ÀÀ´äÀ» Á¤ÀÇÇϰí ÀÖ½À´Ï´Ù.
µ¡ºÙ¿© ÀÌ ÇÁ·Î±×·¥ÀºWin32ApplicationÇÁ·ÎÁ§Æ®·Î ºôµå ÇÕ´Ï´Ù.

 

// stdafx.h³»

#include <atlbase.h>

extern CComModule _Module;

#include <atlwin.h>

                      

 

// MainWindow.h³»

// CWindowImplÀÇ »ó¼Ó Ŭ·¡½º·Î ¸Þ¼¼Áö¿¡ÀÇ ¹ÝÀÀÀ» Á¤ÀÇ

class CMyWindow : public CWindowImpl<CMyWindow>

{

public:

    // À©µµ¿ì Ŭ·¡½º¸íÀ» µî·Ï

    DECLARE_WND_CLASS(_T("Hello"));

 

private:

    // ¸Þ¼¼Áö ¸Ê

    BEGIN_MSG_MAP(CMyWindow)

        MESSAGE_HANDLER(WM_PAINT, OnPaint)

        MESSAGE_HANDLER(WM_DESTROY, OnDestroy)

    END_MSG_MAP()

 

    LRESULT OnPaint(UINT, WPARAM, LPARAM, BOOL&){

        PAINTSTRUCT ps;

        HDC hDC = BeginPaint(&ps);

        RECT rect;

        GetClientRect(&rect);

        DrawText(hDC, _T("Hello, ATL/WTL"),

            -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);

        EndPaint(&ps);

        return 0;

    }

 

    LRESULT OnDestroy(UINT, WPARAM, LPARAM, BOOL&){

        PostQuitMessage(0);

        return 0;

    }

};

                      

 

// hello.cpp³»

#include "stdafx.h"

#include "MainWindow.h"

 

CComModule _Module;

 

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

{

    _Module.Init(NULL, hInstance);

 

    // µ¶ÀÚ À©µµ¿ì¸¦ ÀÛ¼º

    CMyWindow wnd;

    wnd.Create(NULL, CWindow::rcDefault,

        _T("Hello, ATL/WTL"), WS_OVERLAPPEDWINDOW | WS_VISIBLE);

 

    MSG msg;

    while(GetMessage(&msg, NULL, 0, 0) > 0){

        TranslateMessage(&msg);

        DispatchMessage(&msg);

    }

 

    _Module.Term();

 

    return msg.wParam;

}

                      


¡¡¿ì¼± ,ATLÀ» »ç¿ëÇϱâ À§ÇÑ Çì´õ¸¦ ÀÎŬ·çµå ÇÕ´Ï´Ù¸¸ ,CComModuleŬ·¡½ºÀÇ ÀνºÅϽºÀÎ _ModuleÀºATLÀÇ °¢ Çì´õ·ÎºÎÅÍ ÂüÁ¶µÇ¹Ç·Î ±Û·Î¹úÇÏ°Ô ¼±¾ðÇØ µÓ´Ï´Ù. ¹«¾ùº¸´Ù ,ATL7.0ÀÌÈĸ¦ »ç¿ëÇϰí ÀÖ´Â °æ¿ì´Â ÀÌ ±Û·Î¹ú ¼±¾ðÀº ÇÊ¿ä¾ø´Â °Í °°½À´Ï´Ù. ÀÌ_Module´Â ,_tWinMain()ÀÇ ÃÖÃÊ¿Í ÃÖÈÄ·Î ÃʱâÈ­¿Í µÚ󸮸¦ Çϰí ÀÖ½À´Ï´Ù.

¡¡CMyWindowŬ·¡½º´ÂCWindowImplŬ·¡½º·ÎºÎÅÍ ÆÄ»ýÇϰí ÀÖ½À´Ï´Ù¸¸ ,CWindowImplÀÇ Á¦1ÅÛÇø´ Àμö¿¡µµ CMyWindow¶ó´Â À̸§ À» °Ç³×ÁÝ´Ï´Ù ( Á¦2, 3ÅÛÇø´ Àμö´Â »ý·« °¡´ÉÇÕ´Ï´Ù. ¿©±â¿¡¼­´Â »ý·« Çϰí ÀÖ½À´Ï´Ù. ). CMyWindowŬ·¡½º³»¿¡¼­´Â , À©µµ¿ì Ŭ·¡½º¸íÀ»DECLARE_WND_CLASS¸ÅÅ©·Î¿¡ ÀÇÇØ µî·ÏÇØ , ¸Þ¼¼Áö ¸Ê¿¡ ÀÇÇØ ¸Þ¼¼Áö¿Í ±×¿¡ ´ëÇÑ Çڵ鷯¸¦ ¹­°í ÀÖ½À´Ï´Ù. À̹ø ¿¹¿¡¼­´Â , Çڵ鷯³»ÀÇ Ã³¸®´ÂSDK½ºÅ¸Àϰú °ÅÀÇ µ¿µîÇÕ´Ï´Ù.