|
ATL¸¸ À» »ç¿ëÇØ ÀÛ¼ºÇÑ ¡¸Hello, ATL/WTL¡¹ÇÁ·Î±×·¥¿¡¼´Â ¸Þ½ÃÁö ·çÇÁ¸¦SDK½ºÅ¸ÀÏ·Î ½è½À´Ï´Ù.
|
MSG msg;
while(GetMessage(&msg, NULL, 0, 0) > 0){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
|
WTL¿¡´Â ¸Þ½ÃÁö ·çÇÁ¸¦ ĸ½¶ÈÇϱâ À§ÇؼCMessageLoop¶ó°í Çϴ Ŭ·¡½º°¡ ÁغñµÇ¾î ÀÖ½À´Ï´Ù. ¿©±â¿¡¼´Â ÀÌCMessageLoopŬ·¡½º¸¦ »ç¿ëÇØ ¡¸Hello, ATL/WTL¡¹ÇÁ·Î±×·¥ °íÃÄ ¾¹´Ï´Ù. µ¡ºÙ¿© À̹øÀ¸·ÎºÎÅÍWTLÀÇ atlcrack.hÇì´õ·Î Á¤Àǵǰí ÀÖ´Â ¸Þ¼¼Áö Å©·¡Ä¿¸¦ »ç¿ëÇÕ´Ï´Ù.
|
// stdafx.h¾È
#include <atlbase.h>
#include <atlapp.h>
extern CAppModule
_Module; // CComModuleÀ¸·ÎºÎÅÍCAppModule¿¡
¿Å°Ü³õ´Â
#include <atlwin.h>
#include <atlcrack.h>
// WTL¸Þ¼¼Áö Å©·¡Ä¿¸¦ »ç¿ëÇϱâ (À§ÇØ)¶§¹®¿¡
|
|
// MainWindow.hµ¿¾È
class CMyWindow : public CWindowImpl<CMyWindow>
{
public:
// À©µµ¿ì
Ŭ·¡½º¸íÀ» µî·Ï
DECLARE_WND_CLASS(_T("Hello"));
private:
// ¸Þ¼¼Áö ¸Ê
BEGIN_MSG_MAP_EX(CMyWindow)
MSG_WM_PAINT(OnPaint)
MSG_WM_DESTROY(OnDestroy)
END_MSG_MAP()
void OnPaint(HDC /*hDC*/){
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);
}
void OnDestroy(){
PostQuitMessage(0);
}
};
|
|
// hello.cpp³»
#include "stdafx.h"
#include "MainWindow.h"
CAppModule _Module; // CComModule·ÎºÎÅÍCAppModule¿¡
¿Å°Ü³õ´Â
int WINAPI _tWinMain(HINSTANCE
hInstance, HINSTANCE, LPTSTR lpCmdLine,
int nCmdShow)
{
_Module.Init(NULL,
hInstance);
CMessageLoop
theLoop;
_Module.AddMessageLoop(&theLoop);
// µ¶ÀÚ
À©µµ¿ì¸¦ ÀÛ¼º
CMyWindow
wnd;
wnd.Create(NULL,
CWindow::rcDefault,
_T("Hello, ATL/WTL"), WS_OVERLAPPEDWINDOW | WS_VISIBLE);
int nRet = theLoop.Run();
_Module.RemoveMessageLoop();
_Module.Term();
return nRet;
}
|
¡¡¿ì¼± stdafx.h¾È¿¡¼´Â CMessageLoopŬ·¡½º¸¦ »ç¿ëÇϱâ À§Çؼatlapp.hÇì´õ¸¦ ÀÎŬ·çµå ÇÕ´Ï´Ù. ±×¸®°í CMessageLoopŬ·¡½º´ÂCAppModuleŬ·¡½º¿¡ ÀÇÇØ °ü¸®µÇ±â (À§ÇØ)¶§¹®¿¡ Áö±Ý±îÁö ±â¼úÇØ ¿ÂCComModuleŬ·¡½º¸¦CAppModuleŬ·¡½º¿¡ ¿Å°Ü³õ½À´Ï´Ù. CAppModuleŬ·¡½ºµµ atlapp.h Çì´õ¿¡ ¼±¾ðµÇ°í Àֱ⠶§¹®¿¡ CAppModuleŬ·¡½º¸¦ »ç¿ëÇϱâ Àü¿¡atlapp.hÇì´õ¸¦ ÀÎŬ·çµå ÇÕ´Ï´Ù. ÇÑÃþ ´õWTLÀÇ ¸Þ¼¼Áö Å©·¡Ä¿¸¦ »ç¿ëÇϱâ À§Çؼ atlcrack.hÇì´õ¸¦ ÀÎŬ·çµå Çϰí ÀÖ½À´Ï´Ù.
¡¡CMyWindowŬ·¡½º¿¡¼´Â ¸Þ¼¼Áö¿Í ¸Þ¼¼Áö Çڵ鷯¸¦ ¹±â À§Çؼ WTLÀÇ ¸Þ¼¼Áö Å©·¡Ä¿¸¦ »ç¿ëÇϰí ÀÖ½À´Ï´Ù. º»¹®¼¿¡¼´ÂATL3.0À» »ç¿ëÇϰí ÀÖ±â)¶§¹®¿¡ BEGIN_MSG_MAP¸¦BEGIN_MSG_MAP_EX¿¡ ¿Å°Ü³õ°í ÀÖ½À´Ï´Ù.
¡¡_tWinMain()¾È¿¡¼´Â ,CMessageLoopŬ·¡½ºÀÇ ÀνºÅϽº¸¦ ÀÛ¼ºÇØ ±×°ÍÀ»CAppModule::AddMessageLoop()·Î CAppModule³»ºÎÀÇ ¸Ê¿¡ Ãß°¡Çϰí ÀÖ½À´Ï´Ù. ¸Þ½ÃÁö ·çÇÁ´ÂCMessageLoop::Run()¿¡ ÀÇÇØ ½ÇÇàµÇ¾î ÇÊ¿ä¾ø°Ô µÈ ¸Þ½ÃÁö ·çÇÁ´ÂCAppModule::RemoveMessageLoop()¿¡ ÀÇÇØ CAppModule³»ºÎÀÇ ¸ÊÀ¸·ÎºÎÅÍ »èÁ¦ÇÕ´Ï´Ù.
¡¡ÀÌ¿Í °°ÀÌWTL¿¡¼´Â ,CMessageLoopŬ·¡½º¿¡ ÀÇÇØ ĸ½¶ÈµÈ ¸Þ½ÃÁö ·çÇÁ¸¦ CAppModuleŬ·¡½º¿¡ ÀÇÇØ °ü¸®Çϰí ÀÖ½À´Ï´Ù. CAppModuleŬ·¡½ºÀÇ ³»ºÎ¿¡¼´Â ¸Þ½ÃÁö ·çÇÁ¿Í °æÇâ threadID¸¦ ¼¼Æ®·Î ÇØ ¸Ê¿¡ µî·ÏÇϰí ÀÖ½À´Ï´Ù. Áï , ±Û·Î¹ú ¼±¾ðµÈCAppModuleŬ·¡½ºÀÇ ÀνºÅϽºÀÎ_ModuleÀº º¹¼öÀÇ thread³»¿¡ ÀÖ´Â ¸Þ½ÃÁö ·çÇÁ¸¦ ÀÏ¿ø °ü¸®ÇÏ°Ô µË´Ï´Ù.
|