¿ì¼± óÀ½¿¡ 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½ºÅ¸Àϰú °ÅÀÇ µ¿µîÇÕ´Ï´Ù.