¿¹Á¦ ¼öÁØÀ» ³Ñ¾î¼´Â Áß´ëÇü ÇÁ·ÎÁ§Æ®¸¦ ÀÛ¼ºÇÒ ¶§´Â ±â¹Ý Ŭ·¡½º¸¦ Àß ¸¸µé¾î µÎ¾î¾ß ÇÑ´Ù. °´Ã¼¸¦ Á¶¸³ÇÏ¿© ÇÁ·Î±×·¥À» ¿Ï¼ºÇØ ³ª°¡´Â ¹ÙÅÒ¾÷(Bottom Up) ¹æ½Ä¿¡¼´Â
°´Ã¼°¡ ¾ÈÁ¤ÀûÀÌ°í Æ°Æ°ÇØ¾ß ±× À§ÀÇ ÇÁ·Î±×·¥µµ Á¦ ±â´ÉÀ» ½ÊºÐ ¹ßÈÖÇÒ ¼ö ÀÖ´Ù. ±â´ÉÀû ¿Ï¼ºµµ »Ó¸¸
¾Æ´Ï¶ó ÀÌÈÄÀÇ È®ÀåÀ̳ª À¯Áö, º¸¼ö¸¦ À§Çؼµµ ±âÃʸ¦ Àß ´ÙÁ® µÎ¾î¾ß ÇÑ´Ù.
óÀ½ ½ÃÀÛÀÌ Áß¿äÇѸ¸Å ÇÁ·ÎÁ§Æ®¸¦ ¸Ç¹Ù´Ú¿¡¼ºÎÅÍ ¸¸µé¾î º¸±â·Î ÇÑ´Ù. ÀÌ
°Á°¡ ÀǵµÇÏ´Â ¹Ù´Â ±¸Çö ±â¼ú»Ó¸¸ ¾Æ´Ï¶ó ÇÁ·ÎÁ§Æ®¸¦ ½ÃÀÛÇÏ°í °ü¸®ÇÏ´Â °Í±îÁö Æ÷°ýÇϹǷΠóÀ½ºÎÅÍ ½Ç½ÀÀ» µû¶óÇغ¼ ÇÊ¿ä°¡ ÀÖÀ¸¸ç Á÷Á¢ ½Ç½ÀÇÏ´Â
°úÁ¤À» °¡Á¤ÇÏ°í ÀÛ¼ºÇß´Ù. ¹°·Ð ÁøÂ¥ ´Ù ÇØ º¼ ÇÊ¿ä´Â ¾ø°í ´Ù ±×·² °Í °°Áöµµ ¾ÊÁö¸¸ Á¦ÀÛ °úÁ¤À»
ºÐ¸íÈ÷ ¼³¸íÇϱâ À§Çؼ¶óµµ µû¶óÇϱâ½ÄÀ¸·Î ÁøÇàÇÑ´Ù.
¸ÕÀú ½Ç½À ÁغñºÎÅÍ ÇÏÀÚ. ½Ç½À °úÁ¤¿¡¼ »ý¼ºÇÒ ¼ö¸¹Àº ¿¹Á¦¸¦ ÇÑ
µð·ºÅ丮¿¡ ¸ðÀ» ÇÊ¿ä°¡ ÀÖ´Ù. °¢ÀÚ »çÁ¤¿¡ µû¶ó ÀÓÀÇÀÇ µð·ºÅ丮¸¦ »ç¿ëÇصµ ¹«¹æÇÏÁö¸¸ ¿©±â¼´Â C:\SoEntyStudy µð·ºÅ丮¿¡¼ ½Ç½ÀÀ» ÁøÇàÇϱâ·Î ÇÑ´Ù. ÄÄÆÄÀÏ·¯´Â
ºñÁÖ¾ó ½ºÆ©µð¿À 2019 ¿µ¹® ¹öÀüÀ» »ç¿ëÇÑ´Ù. ÃÖ±Ù ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®´Â
C#¿¡ ½Å°æ¾²´À¶ó Win32´Â Ȧ´ëÇÏ°í Àִµ¥ ´õ±¸³ª ±¹Á¦È¿¡´Â
´õ ¹«½Å°æÇØ ÇÑ±Û ¹öÀü¿¡¼´Â ¹ö±×°¡ ¸¹´Ù.
MS °ø½Ä »çÀÌÆ®¿¡¼ ºñÁÖ¾ó ½ºÆ©µð¿À¸¦ °Ë»öÇØ ¼³Ä¡ÇÏ¸é ±âº»ÀûÀ¸·Î
ÇÑ±Û ¹öÀüÀ» ¼³Ä¡ÇØ Áִµ¥ ¼³Ä¡ ¿É¼Ç¿¡¼ ¿µ¹®µµ °°ÀÌ ¼±ÅÃÇÏ¸é µÈ´Ù. ¼³»ç Çѱ۸¸ ¼±ÅÃÇß´õ¶óµµ Â÷ÈÄ¿¡
¿µ¹® ¾ð¾îÆÑÀ» Ãß°¡·Î ¹Þ¾Æ ¼³Ä¡ÇÒ ¼öµµ ÀÖ´Ù. ²À ÇÑ±Û ¹öÀüÀ» »ç¿ëÇÏ°Ú´Ù¸é »ó°üÀº ¾øÁö¸¸ ¸®¼Ò½º ÆíÁý±â¿¡
¹ö±×°¡ ÀÖ¾î ±ÍÂú¾ÆÁø´Ù. ÀÌ µÎ°¡Áö¸¸ ÁغñÇÏ¸é ¹Ù·Î ½Ç½ÀÀ» µû¶óÇÒ ¼ö ÀÖ´Ù.
ºñÁÖ¾ó ½ºÆ©µð¿À 2019¸¦ ½ÇÇàÇÏ°í ÇÁ·ÎÁ§Æ®ºÎÅÍ »ý¼ºÇÑ´Ù. File/New/Project Ç׸ñ ¼±Åà ÈÄ Windows Desktop
Wizard ÅÛÇø´À» ¼±ÅÃÇÑ´Ù. Windows Deskop Application ÅÛÇø´Àº
Áú¹®¾øÀÌ Áö¸¾´ë·Î ÇÁ·ÎÁ§Æ®¸¦ »ý¼ºÇØ ¹ö¸®¹Ç·Î ÀûÇÕÇÏÁö ¾ÊÀ¸¸ç ¹Ýµå½Ã ¸¶¹ý»ç·Î ½ÃÀÛÇØ¾ß ÇÑ´Ù.
ÇÁ·ÎÁ§Æ® À̸§Àº SoEnty·Î ÀÔ·ÂÇÏ°í À§Ä¡´Â ¹Ì¸® ÁغñÇصР½Ç½À
µð·ºÅ丮·Î ÁöÁ¤ÇÑ´Ù. ¾Æ·¡ÂÊÀÇ Ã¼Å© ¹Ú½º¸¦ Ŭ¸¯ÇÏ¿© ¼Ö·ç¼Ç°ú µð·ºÅ丮¸¦ °°Àº Æú´õ¿¡ »ý¼ºÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é µð·ºÅ丮 ±¸Á¶°¡ º¹ÀâÇØÁ® ½Ç½ÀÀÌ ºÒÆíÇØÁø´Ù. Create ¹öÆ°À» Ŭ¸¯Çϸé ÇÁ·ÎÁ§Æ®ÀÇ Çü½ÄÀ» ¹¯´Â ´ëÈ»óÀÚ°¡
³ªÅ¸³´Ù. µðÆúÆ®´Â ÄַܼΠµÇ¾î Àִµ¥ Destktop Application(.exe)¸¦
¼±ÅÃÇÏ°í Empty project ¿É¼Ç¸¸ ¼±ÅÃÇÑ´Ù.
¸¶¹ý»ç¸¦ »ç¿ëÇÏ¸é ¸®¼Ò½ºµµ »ý¼ºÇØ ÁÖ°í pch ¼³Á¤±îÁö ´Ù ÇØ ÁÖ¾î
Æí¸®ÇÏÁö¸¸ ¼Ò½º°¡ ÀåȲÇÏ°í ºÒÇÊ¿äÇÑ ±â´É±îÁö ¸¶±¸ Áý¾î ³Ö¾î ¹ö¸°´Ù. °Ô´Ù°¡ ¸¶¹ý»ç°¡ ¸¸µé¾îÁÖ´Â ¸®¼Ò½º¿¡´Â
¹ö±×±îÁö ÀÖ´Ù. ¾Æ¿¹ ºó ÇÁ·ÎÁ§Æ®·Î ½ÃÀÛÇÑ ÈÄ ÇÊ¿äÇÑ ¿ä¼Ò¸¦ Çϳª¾¿ Ãß°¡ÇØ ³ª°¡´Â°Ô ¼ÓÆíÇÏ´Ù.
OK ¹öÆ°À» ´©¸£¸é ÇÁ·ÎÁ§Æ®¸¸ µ¢±×·¯´Ï »ý¼ºµÇ¸ç °ñÁ¶¸¸ ¸¸µé¾îÁø´Ù. ºó ÇÁ·ÎÁ§Æ®¿¡ ÇÊ¿äÇÑ ¼Ò½º ÆÄÀÏÀ» Çϳª¾¿ Ãß°¡ÇÏ¿© ±â´ÉÀ» È®ÀåÇØ º¸ÀÚ. Á¦ÀÏ
óÀ½ Ãß°¡ÇÒ ¸ðµâÀº °øÅë ÇÔ¼ö ±â´ÉÀ» Á¦°øÇÏ´Â À¯Æ¿¸®Æ¼ÀÌ´Ù. ¼Ö·ç¼Ç Ž»ö±âÀÇ Header Files ³ëµå¿¡¼ Æ˾÷ ¸Þ´º¸¦ ºÒ·¯³½ ÈÄ Add/New Item Ç׸ñÀ»
¼±ÅÃÇÑ´Ù.
»õ Ç׸ñ ´ëÈ»óÀÚ°¡ ³ªÅ¸³ª´Âµ¥ Header File(.h)¸¦ ¼±ÅÃÇÏ°í
ÆÄÀϸíÀº Util.h·Î ÀÔ·ÂÇÑ´Ù. ÀÌÈÄ¿¡µµ ÆÄÀÏ Ãß°¡½Ã Header
Çϳª Source Çϳª¾¿ °¢°¢ Ãß°¡ÇÏ¸é µÈ´Ù.
»õ·Î ¸¸µé¾îÁø ÆÄÀÏ¿¡ #pragma once ±¸¹®ÀÌ ¹Ì¸® ÀÛ¼ºµÇ¾î
Àִµ¥ Çì´õ ÆÄÀÏ Áߺ¹ Æ÷ÇÔÀ» ¹æÁöÇÑ´Ù. ±×·¯³ª ¹Ì¸® ÄÄÆÄÀÏµÈ Çì´õ ±â´ÉÀ» ¾²¸é ±»ÀÌ ÇÊ¿ä ¾ø´Ù. Áö¿ö ¹ö¸®°í ¸î °¡Áö ¸ÅÅ©·Î¿Í ÇÔ¼öÀÇ ¿øÇüÀ» ÀÛ¼ºÇÑ´Ù. Á÷Á¢ ŸÀÌÇÁ
ÃÄ ³Ö±â´Â ¹ø°Å·Î¿ì¹Ç·Î ¹èÆ÷ ¼Ò½º¿¡¼ º¹»çÇØ ºÙ¿© ³ÖµÇ ÆÄÀÏÀ» ¹Ýµå½Ã Çϳª¾¿ Á÷Á¢ ¸¸µé¾î º¸°í Äڵ嵵 ´ëÃæ Äf¾î º¸ÀÚ.
// ¸ÅÅ©·Î ÇÔ¼ö
#define Count(a) (sizeof(a)/sizeof(a[0]))
#define TextOutSz(h,x,y,t)
TextOut(h,x,y,t,lstrlen(t));
#define ABS(a) ((a) >= 0 ? (a):-(a))
#define random(n) (rand()%(n))
// À¯Æ¿¸®Æ¼ ÇÔ¼ö ¿øÇü
void Trace(LPCTSTR format, ...);
void WriteLog(LPCTSTR strLog, ...);
void DrawBitmap(HDC hdc, int x, int y, HBITMAP
hBit);
ÀϹÝÀûÀ¸·Î ¸¹ÀÌ »ç¿ëÇÏ´Â ¸ÅÅ©·Î ÇÔ¼ö ¸î °³ ¼±¾ðÇß´Ù. µð¹ö±ë È®ÀÎÀ»
À§ÇÑ Trace, WriteLog ÇÔ¼ö¿Í ºñÆ®¸ÊÀ» Ãâ·ÂÀ» À§ÇÑ DrawBitmap
ÇÔ¼ö µÎ °³¸¸ ÀÏ´Ü Æ÷ÇÔ½ÃÄ״µ¥ ÀÌÈÄ °è¼Ó ´Ã¾î³¯ °ÍÀÌ´Ù. ÇÁ·ÎÁ§Æ®ÀÇ ´Ù¸¥ ºÎºÐ¿¡¼ Á¾Á¾
Âü°íÇÏ´Â Àü¿ª ÇÔ¼ö¸¦ Util ¸ðµâ¿¡ ÀÛ¼ºÇØ µÎ¸é Æí¸®ÇÏ´Ù.
µÎ ÇÔ¼öÀÇ ±¸Çö ÄÚµå´Â Util.cpp¿¡ ÀÛ¼ºÇÑ´Ù. ¼Ö·ç¼Ç Ž»ö±âÀÇ Source Files ³ëµå¿¡¼ Æ˾÷ ¸Þ´º¸¦ ¿°í
Add/New Items Ç׸ñÀ» ¼±ÅÃÇÑ ÈÄ ÆÄÀϸíÀ» Util.cpp·Î
ÀÔ·ÂÇÑ´Ù.
»õ ÆíÁýâÀÌ ¿¸®´Âµ¥ ¿©±â¿¡ ´ÙÀ½ Äڵ带 ÀÛ¼ºÇÑ´Ù. C++ ÄÚµù ±ÔÄ¢¿¡ ¸Â°Ô ¿øÇüÀº Çì´õ ÆÄÀÏ¿¡, ÄÚµå´Â ±¸Çö ÆÄÀÏ¿¡ ÀÛ¼ºÇÑ´Ù. C °³¹ßÀÚ¿¡°Ô´Â Àͼ÷ÇÑ ÀϹÝÀûÀÎ ¹æ¹ýÀÌÁö¸¸ ¼±¾ð°ú Á¤ÀÇ°ú ºÐ¸®µÇ¾î
ÀÖÁö ¾ÊÀº C#À̳ª ÀÚ¹Ù¿¡ ºñÇؼ´Â ´Ù¼Ò ºÒÆíÇÑ ¹æ¹ýÀÌ´Ù.
#include <windows.h>
#include <tchar.h>
#include "Util.h"
#ifdef _DEBUG
void Trace(LPCTSTR format, ...)
{
TCHAR
buf[1024];
va_list
marker;
va_start(marker,
format);
_vstprintf_s(buf,
Count(buf), format, marker);
lstrcat(buf,
L"\r\n");
OutputDebugString(buf);
}
void WriteLog(LPCTSTR strLog, ...)
{
static
int count = 0;
static
LPCTSTR LogPath = TEXT("c:\\Temp\\SoEnty_Debug.txt");
HANDLE
hLog;
DWORD
dwWritten;
TCHAR
szLog[1024];
TCHAR
strLog2[1024];
va_list
marker;
SYSTEMTIME
st;
va_start(marker,
strLog);
_vstprintf_s(szLog,
Count(szLog), strLog, marker);
if
(count == 0) {
hLog
= CreateFile(LogPath, GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL, NULL);
}
else {
hLog
= CreateFile(LogPath, GENERIC_WRITE, 0, NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL, NULL);
}
GetLocalTime(&st);
_stprintf_s(strLog2,
Count(strLog2), TEXT("Ä«¿îÅÍ=%06d(%d:%d:%d:%d)
%s\r\n"), count++,
st.wHour,
st.wMinute, st.wSecond, st.wMilliseconds, szLog);
SetFilePointer(hLog,
0, NULL, FILE_END);
WriteFile(hLog,
strLog2, lstrlen(strLog2), &dwWritten, NULL);
CloseHandle(hLog);
}
#else
void Trace(LPCTSTR format, ...) { ; }
void WriteLog(LPCTSTR strLog, ...) { ; }
#endif
void
DrawBitmap(HDC hdc, int x, int y, HBITMAP hBit)
{
HDC MemDC;
HBITMAP oldBitmap;
int bx, by;
BITMAP bit;
MemDC =
CreateCompatibleDC(hdc);
oldBitmap =
(HBITMAP)SelectObject(MemDC, hBit);
GetObject(hBit,
sizeof(BITMAP), &bit);
bx = bit.bmWidth;
by = bit.bmHeight;
BitBlt(hdc, x, y, bx, by,
MemDC, 0, 0, SRCCOPY);
SelectObject(MemDC,
oldBitmap);
DeleteDC(MemDC);
}
Trace´Â µð¹ö±ë ¹®ÀÚ¿À» ÄַܼΠÃâ·ÂÇÏ¿© ÇÁ·Î±×·¥À» ¸ØÃßÁö ¾Ê°íµµ
µ¿ÀÛ »óŸ¦ °üÂûÇÏ´Â µµ¿ì¹Ì ÇÔ¼öÀÌ´Ù. printf ó·³ ¼½Ä Á¶¸³À» Áö¿øÇÏ¿© ÇÑÁÙ·Î º¯¼ö°ªÀ̳ª ÇÁ·Î±×·¥ÀÇ
»óŸ¦ Ãâ·ÂÇØ º¼ ¼ö ÀÖ¾î Æí¸®ÇÏ´Ù. ¼½Ä Á¶¸³À» À§ÇØ _vstprintf_s
ÇÔ¼ö¸¦ »ç¿ëÇϴµ¥ ¹öÆÛ ±æÀ̸¦ Àμö·Î Àü´ÞÇÏ¿© ¾ÈÁ¤¼ºÀÌ ³ô´Ù. ¿¹Àü¿¡´Â ´ÙÀ½ ÇÔ¼ö¸¦ »ç¿ëÇß¾ú´Ù.
_vstprintf(buf, format, marker);
»ç½Ç, ÀÌ ÇÔ¼öµµ ¿ø·¡ÀÇ C ÇÔ¼ö´Â
¾Æ´Ï°í ¿øº»Àº sprintfÀÌµÇ À¯´ÏÄÚµå±îÁö Áö¿øÇÏ´Â ¸ÅÅ©·Î ÇÔ¼öÀÌ´Ù.
ÀÌ ÇÔ¼ö¸¸ Çصµ ±×·° Àú·° ¾µ¸¸ ÇÏÁö¸¸ ¹öÆÛ ±æÀ̸¦ ÁöÁ¤ÇÒ ¼ö ¾øÀ¸¸ç ¹öÆÛ°¡ Ç×»ó ³Ë³ËÇÏ´Ù°í °¡Á¤ÇÏ°í ¹®ÀÚ¿À» Á¶¸³Çϱ⠶§¹®¿¡ À§ÇèÇÑ
¸éÀÌ ÀÖ´Ù.
C++Àº ¾ÈÁ¤¼ºÀ» Á¡Á¡ È®º¸ÇÏ´Â ¹æÇâÀ¸·Î ¹ßÀüÇÏ°í ÀÖ¾î ÀÌ·± À§ÇèÇÑ
ÇÔ¼ö´Â ¿¡·¯·Î ó¸®ÇÑ´Ù. ±×·¯³ª °ú°Å¿ÍÀÇ È£È¯¼ºÀ» À§ÇØ ¿ÏÀüÈ÷ ±ÝÁöÇÒ ¼ö´Â ¾ø¾î SDL checks ¿É¼ÇÀ» ²ô¸é ¿©ÀüÈ÷ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¾ÕÀ¸·Î´Â ¾²Áö
¸»¶ó´Â ¶æÀ¸·Î ÇÁ·ÎÁ§Æ® »ý¼º½Ã µðÆúÆ®·Î SDL ¿É¼ÇÀÌ ÄÑÁ® ÀÖ´Ù.
¾ÈÀüÇÔÀ» À§ÇØ ±¸Çü ÇÔ¼ö¸¦ »ç¿ëÇÏÁö ¸»¶ó´Â ¶æÀº ÀÌÇØÇÏ°ÚÁö¸¸ ¾î¶² °æ¿ì´Â ÄÄÆÄÀÏ·¯ÀÇ ÀܼҸ®°¡ ³Ê¹« ½ÉÇÑ ÆíÀÌ´Ù. ¸ÖÂÄÈ÷ Àß µÇ´ø ÄÚµå±îÁöµµ ¿¡·¯·Î ó¸®ÇØ ¹ö¸®´Â °ú°ÝÇÔ ¶§¹®¿¡ ±âÁ¸ °³¹ßÀÚ°¡ ÀûÀÀÇϱ⠾î·Æ´Ù. ÀÌ ÇÔ¼ö ¾Æ´Ï¶óµµ lstrcpy, wsprintf µî ¾ÆÁ÷µµ À§ÇèÇÑ
ÇÔ¼ö´Â ¾ó¸¶µçÁö ÀÖÀ¸¸ç ¿©ÀüÈ÷ »ç¿ë °¡´ÉÇÏ´Ù.
À§ÇèÇÔÀ» °¨¼öÇÏ°í¶óµµ ÀÌ·± ÇÔ¼ö°¡ ¾ÆÁ÷ ³²¾Æ ÀÖ´Â ±Ùº»ÀûÀÎ ÀÌÀ¯´Â C´Â
¿ø·¡ºÎÅÍ ¹è¿ ³¡À» Á¡°ËÇÏÁö ¾Ê±â ¶§¹®ÀÌ¸ç ±× ÈÄ°èÀÚÀÎ C++µµ ¸¶Âù°¡Áö ÇѰ踦 °¡Áö°í ÀÖ´Ù. Áö±Ý±îÁö ÀÌ·± Ư¼ºÀÌ Å« ¹®Á¦°¡ µÇÁö ¾Ê¾Ò´ø °ÍÀº C °³¹ßÀÚ´Â Ç×»ó
¹öÆÛ¸¦ ³Ë³ËÈ÷ ÁغñÇÏ°í Á¤ ÇÊ¿äÇÏ¸é »çÀü¿¡ ¹öÆÛ ±æÀ̸¦ Á¡°ËÇÏ´Â ½ÄÀ¸·Î ´ëºñÇ߱⠶§¹®ÀÌ´Ù.
ÀÌ·± Ư¼ºÀÇ ¹Ý´ë ±ÞºÎ·Î °á°ú ÇÁ·Î±×·¥ÀÌ ÀÛ°í ºü¸£¸ç ±× Ư¼ºÀ¸·Î ÀÎÇØ C/C++ÀÌ
¿©Å±îÁö »ì¾Æ ³²¾ÒÀ¸¸ç °íÀ¯ÀÇ È°¿ë ¿µ¿ªÀÌ ÀÖ´Â °ÍÀÌ´Ù. È°¿ë ºÐ¾ß°¡ ´Ù¸£´Ï Áß±Þ ¾ð¾î°¡ ¼º´ÉÀ» Æ÷±âÇØ
°¡¸ç °í±Þ ¾ð¾î¸¦ µû¶ó °¡´Â °ÍÀº ¹Ù¶÷Á÷ÇÏÁö ¾Ê´Ù´Â °ÍÀÌ °³ÀÎÀûÀÎ »ý°¢ÀÌ´Ù. ¾²±â ½±°í ¾ÈÀüÇÑ ¾ð¾î´Â
¾ó¸¶µçÁö ¸¹°í C´Â ±× ³ª¸§´ë·ÎÀÇ ¿ªÇÒÀÌ ÀÖÀ¸´Ï C´Â C´Ù¿ö¾ß ÇÑ´Ù.
±×·¯³ª ÀÌ°Ç ³ªÀÇ °³ÀÎÀûÀÎ ÃëÇâÀÏ »ÓÀÌ¸ç ¿äÁòÀÇ Àü¹ÝÀûÀÎ È帧Àº ¿ø·ÐÀûÀÎ ¾ÈÁ¤¼ºÀ» È®º¸ÇÏÀÚ´Â ÂÊÀÌ´Ù. ÀÌ °Á´ ǥÁØÀÇ ÀÌ·± ÃëÁö¿¡ ¸Â°Ô °¡±ÞÀûÀÌ¸é ±ÇÀåµÇ´Â ¹æ½ÄÀ¸·Î ¿¹Á¦ Äڵ带 ÀÛ¼ºÇ쵂 ³Ê¹« ½ÉÇÏ´Ù ½ÍÀº ºÎºÐÀº
°æ°í¸¦ ¹«½ÃÇϱâ·Î ÇÑ´Ù. ³ªÁß¿¡ µû·Î »ìÆì º¸°ÚÁö¸¸ ºñÁÖ¾ó ½ºÆ©µð¿ÀÀÇ °æ°í´Â ³Ê¹« °úÇÑ ¸éÀÌ ÀÖ´Ù.
WriteLog ÇÔ¼ö´Â ·Î±× ±â·ÏÀ» ÆÄÀÏ·Î ³²±ä´Ù. ¸ÖƼ ½º·¹µå µð¹ö±ëÀº ·Î±×¸¦ ³²±ä ÈÄ »ìÆì º¸´Â °ÍÀÌ È¿À²ÀûÀÌ´Ù. ÀÌ
ÇÁ·ÎÁ§Æ®¿¡¼´Â ´çÀåÀº »ç¿ëÇÏÁö ¾ÊÁö¸¸ Àå·¡¸¦ À§ÇØ ¹Ì¸® Æ÷ÇÔ½ÃÄÑ µÎ¾ú´Ù. µð¹ö±ë ÇÔ¼ö´Â µð¹ö±ë ¹öÀü¿¡¼¸¸
º»Ã¼¸¦ Á¤ÀÇÇÑ´Ù. ¸±¸®Áî ¹öÀü¿¡¼´Â ±¦È÷ ½ÇÇà ½Ã°£À» ±î¸ÔÀ» ÇÊ¿ä°¡ ¾ø´Ù.
SoEnty ÇÁ·ÎÁ§Æ®´Â C++ ¾ð¾î¿Í
Win32 API¸¦ »ç¿ëÇÏ¿© °³¹ßÇÑ´Ù. ÀÌ Á¶ÇÕÀ¸·Î ¿î¿µÃ¼Á¦ÀÇ
¸ðµç ±â´ÉÀ» ÀÚÀ¯·Ó°Ô »ç¿ëÇÒ ¼ö ÀÖ°í ÀÛ°í ºü¸¥ ÇÁ·Î±×·¥À» ¸¸µé ¼ö ÀÖ´Ù. ±×·¯³ª Àú¼öÁØ °³¹ß ¹æ¹ýÀÌ´Ù
º¸´Ï ÆíÀǼºÀÌ ¶³¾îÁö°í »ý»ê¼ºµµ ³·¾Æ ½Ã°£µµ ¸¹ÀÌ °É¸°´Ù. ÀÌ Á¶ÇÕÀÇ ´ÜÁ¡Àº ´ÙÀ½°ú °°´Ù.
- À©µµ¿ì Çϳª¸¦ »ý¼ºÇÏ·Á¸é À©µµ¿ì Ŭ·¡½º¸¦ Á¤ÀÇÇÏ°í À©µµ¿ì ÇÁ·Î½ÃÀú¿Í
°¢ ¸Þ½ÃÁöÀÇ Çڵ鷯±îÁö ¸¸µé¾î¾ß ÇÏ´Ï °úÁ¤ÀÌ ±æ°í ¹øÀâÇÏ´Ù.
- ¸Þ½ÃÁö¸¦ Á÷Á¢ ¹Þ¾Æ wParam,
lParamÀ» Çؼ®ÇÏ¿© Àǹ̸¦ ÆľÇÇÏ°í ¹ÝÀÀÀ» º¸¿© ÇÑ´Ù. ¸Å¹ø ·¹ÆÛ·±½º¸¦ Âü°íÇØ¾ß Çϸç
ij½ºÆõµ ÀÚÁÖ ÇØ ½Ç¼öÇÒ °¡´É¼ºÀÌ ¸¹´Ù.
- °¢ ÇÔ¼ö·Î Àü´ÞÇÒ Àμö°¡ ³Ê¹« ±¸Ã¼ÀûÀÌ°í ½Ã½ÃÄÝÄÝÇÑ °Í±îÁö ´Ù
¹àÇô¾ß ÇÑ´Ù. ±â¹Ý ¾ð¾î°¡ CÀÌ´Ù º¸´Ï Àμö°¡ ¸¹°í ÀμöÀÇ
Àṉ̀îÁöµµ º¹ÀâÇØ Á÷°üÀûÀ¸·Î ¿Ü¿ì±â ¾î·Æ´Ù.
- ÀÛ¾÷ ÈÄ Á¤¸®°¡ ¸ðµÎ ¼öµ¿ÀÌ¾î¼ ÀÏÀÏÀÌ ½Å°æ½á¾ß Çϸç Çϳª¶óµµ
»© ¸ÔÀ¸¸é ¸®¼Ò½º°¡ ´©ÃâµÇ´Â À§ÇèÀÌ ÀÖ´Ù.
ÀÌ·± ºÒÆíÇÔ ¶§¹®¿¡ Win32¸¦ ¹Ù·Î ¾²´Â °æ¿ì´Â º°·Î ¾ø°í ´õ °í¼öÁØÀÇ
¾ð¾î·Î ·¡ÇÎÇؼ »ç¿ëÇÑ´Ù. ´ëÇ¥ÀûÀÎ
¿¹°¡ MFCÀÌ´Ù. ¸ðµç °ÍÀ» °´Ã¼ÈÇÏ°í »ý¼ºÀÚ, Æı«ÀÚ¸¦ ÅëÇØ ÀÚµ¿ÈÇØ µÎ¾î ´Ü ¸î ÁÙ¸¸ÀÇ ÄÚµå·Îµµ ¿øÇÏ´Â °ÍÀ» ÇÒ ¼ö ÀÖ´Ù.
°³¹ßÅøÀÇ Áö¿øµµ dzºÎÇØ ¸®¼Ò½º ÆíÁýÀ̳ª Çڵ鷯 ¿¬°áÀÌ ½±´Ù. ±×·¯³ª MFC ¶ÇÇÑ ´ÜÁ¡ÀÌ ¸¸¸¸Ä¡ ¾Ê´Ù.
- ·±Å¸ÀÓÀÌ ³Ê¹« °Å´ëÇØ ¹èÆ÷°¡ ¾î·Æ°í ´Üµ¶ ½ÇÇà ÆÄÀÏÇÏÁö ¸øÇÑ´Ù. °Ô´Ù°¡ MFCµµ ¿©·¯ ¹öÀüÀÌ ÀÖ¾î ·±Å¸ÀÓ ¹öÀüÀ» Àß ¸ÂÃß¾î¾ß ÇÏ´Â
ºÎ´ãÀÌ ÀÖ´Ù.
- Äڵ带 Ãà¾àÇϱâ À§ÇÑ ¸ÅÅ©·Î°¡ º¹ÀâÇÏ°í ÁßøÀÌ ½ÉÇØ ºñÁ÷°üÀûÀÌ´Ù. ¸ÅÅ©·Î Çï¿¡ ºüÁö¸é Çì¾î ³ª¿À±â ¾î·Æ°í ¿¹»óÄ¡ ¸øÇÑ ¹®Á¦¿¡ ºÀÂøÇÑ´Ù. Çѹø
Àͼ÷ÇØÁö¸é ¾²±â ÆíÇÏÁö¸¸ Á¦´ë·Î Àͼ÷ÇØÁö±â Âü ¾î·Æ´Ù.
- Ãß»óÈ ¼öÁØÀÌ ÃæºÐÇÏÁö ¾ÊÀ¸¸ç Win32¸¦
´Ü¼øÈ÷ ·¡ÇÎÇØ ³õÀº °ÍÀÌ¾î¼ °í±ÞÀ¸·Î ¿Ã¶ó°¥ ¼ö·Ï ¿¹»óÄ¡ ¸øÇÑ ÇÔÁ¤ÀÌ ¸¹´Ù. ¹°·Ð ÇØ°á ¹æ¹ýÀÌ ´Ù ÀÖÁö¸¸
³À̵µ°¡ ³ô´Ù.
MFC´Â ÃæºÐÈ÷ ÁÁÀº ¶óÀ̺귯¸®ÀÌÁö¸¸ À¯Æ¿¸®Æ¼¸¦ ¸¸µé±â¿¡´Â ºÎ´ã½º·¯¿î
¸éÀÌ ÀÖ´Ù. SoEnty´Â MFC¸¦ Á÷Á¢ÀûÀ¸·Î ¾²Áö´Â ¾ÊÁö¸¸
±âº» °³³äÀ» ºô·Á ¿Í °´Ã¼ÈÀÇ ÀÌÁ¡¸¸ ÃëÇϱâ·Î ÇÑ´Ù. ´Ù¸¥°Ç Win32¸¦
±×´ë·Î »ç¿ëÇÏ´õ¶óµµ À©µµ¿ì¸¸ °´Ã¼·Î ¸¸µé¾î µÎ¸é ÆíÀǼºÀÌ ¾öû³ª°Ô Áõ°¡ÇÑ´Ù.
Âü°í·Î À©µµ¿ì¸¦ °´Ã¼ÈÇÏ´Â »ó¼¼ÇÑ ¹®¹ý¿¡ ´ëÇؼ´Â ´ç±Ù ÅؽºÆ® ÆíÁý±â ÇÁ·ÎÁ§Æ®¿¡¼ ÀÌ¹Ì ´Ù·é ¹Ù ÀÖ´Ù. ´ç±Ù ÇÁ·ÎÁ§Æ® °ÁÂÀÇ ´ÙÀ½ ÅäÇÈÀ» Âü°íÇÏ¿© ¾î¶² ¹®Á¦°¡ ÀÖ°í ¾î¶»°Ô ÇØ°áÇÏ´ÂÁö ¹Ì¸® ¿¹½ÀÀ» ÇØ µÎ¸é ÀÌ ÇÁ·ÎÁ§Æ®¸¦
ÀÌÇØÇϴµ¥ ¸¹Àº µµ¿òÀÌ µÈ´Ù. SoEnty´Â ÀÌ º¸´Ù´Â ´õ Á¤±³ÇÑ ÄÚµå·Î ¾÷±×·¹À̵åÇÏ¿´´Ù.
´ç±Ù 1.0 °ÁÂ 9-1Àý, 9-2Àý
´ç±Ù 1.2 °Á 21-1-´ÙÇ×, 21-1-»çÇ×
SoEnty ¾È¿¡ À©µµ¿ì¸¦ °´Ã¼¿Í ¸ÊÇÎÇÏ´Â °£ÀÌ ±â´ÉÀ» ÀÛ¼ºÇØ ³ÖÀ»
°ÍÀÌ´Ù. MFC¸¦ µû¶óÇÑ °ÍÀε¥ À̸§À» ²À ºÙÀÌÀÚ¸é KFC Á¤µµ
µÈ´Ù. ÀÌ·ÐÀº º¹ÀâÇÏÁö¸¸ Ãß»óÈ ¼öÁØÀÌ ³·¾Æ ¿¹»ó¿Ü·Î ÄÚµå¾çÀÌ ¸¹Áö´Â ¾Ê´Ù. À©µµ¿ì °´Ã¼¿Í °´Ã¼¸ÊÀº CWindow Ŭ·¡½º·Î ±¸ÇöÇÑ´Ù. Window.h Çì´õ ÆÄÀÏÀ» »ý¼ºÇÏ°í CWindow Ŭ·¡½º¸¦ ¼±¾ðÇÑ´Ù.
// ·çÆ® À©µµ¿ì Ŭ·¡½º. À©µµ¿ì °´Ã¼
°ü¸®µµ ´ã´çÇÑ´Ù.
class CWindow
{
public:
HWND
win_hWnd; //
À©µµ¿ì ÇÚµé
COLORREF
win_backColor; //
¹è°æ»ö
HBRUSH
win_backBrush; //
¹è°æ ºê·¯½Ã
HBITMAP
win_dblBuffer; //
´õºí¹öÆÛ¸µ¿ë ºñÆ®¸Ê
CWindow();
~CWindow()
{ Dispose(); }
void
Dispose();
//
ÆòÀÌÇÑ Â÷Àϵå À©µµ¿ì·Î »ý¼ºÇ쵂 ¸¶Áö¸· Àμö·Î this¸¦ Àü´ÞÇÏ¿© °´Ã¼¸Ê¿¡ µî·ÏÇÑ´Ù.
//
ÀÌ ÇüÅÂ¿Í ´Ù¸¥ À©µµ¿ì(È®Àå ½ºÅ¸ÀÏ, ÁÂÇ¥ ÁöÁ¤)´Â Create¸¦ ÀçÁ¤ÀÇÇÏ¿© Á÷Á¢ Á¤ÀÇÇÑ´Ù.
virtual
void Create(HWND hParent, DWORD style = WS_CHILD | WS_VISIBLE,
int
child_id = 0, LPCTSTR title = L"");
//
¹è°æ»ö»ó ÁöÁ¤ ¶Ç´Â º¯°æ
void
SetBackColor(COLORREF color);
virtual
LRESULT OnMessage(UINT iMessage, WPARAM wParam, LPARAM lParam);
virtual
LRESULT OnCreate(WPARAM wParam, LPARAM lParam) { return 0; }
virtual
LRESULT OnDestroy(WPARAM wParam, LPARAM lParam) { return 0; }
virtual
LRESULT OnPaint(WPARAM wParam, LPARAM lParam);
virtual
void OnDraw(HDC hdc, int width, int height) { }
virtual
LRESULT OnTimer(WPARAM wParam, LPARAM lParam) { return 0; }
virtual
LRESULT OnSize(WPARAM wParam, LPARAM lParam);
virtual
LRESULT OnCommand(WPARAM wParam, LPARAM lParam) { return 0; }
virtual
LRESULT OnContextMenu(WPARAM wParam, LPARAM lParam) { return 0; }
virtual
LRESULT OnKeyDown(WPARAM wParam, LPARAM lParam) { return 0; }
virtual
LRESULT OnLButtonDown(WPARAM wParam, LPARAM lParam) { return 0; }
virtual
LRESULT OnMouseMove(WPARAM wParam, LPARAM lParam) { return 0; }
virtual
LRESULT OnLButtonUp(WPARAM wParam, LPARAM lParam) { return 0; }
virtual
LRESULT OnLButtonDblClk(WPARAM wParam, LPARAM lParam) { return 0; }
virtual
LRESULT OnMouseWheel(WPARAM wParam, LPARAM lParam) { return 0; }
virtual
LRESULT OnUser1(WPARAM wParam, LPARAM lParam) { return 0; }
virtual
LRESULT OnUser2(WPARAM wParam, LPARAM lParam) { return 0; }
virtual
LRESULT OnDropFiles(WPARAM wParam, LPARAM lParam) { return 0; }
//
°´Ã¼ ¸Ê
static
map<HWND, CWindow*>* pWinMap;
static
void DeleteMap();
static
LRESULT CALLBACK CWindowProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM
lParam);
};
CWindow´Â ÀϹÝÀûÀÎ À©µµ¿ì Çϳª¸¦ Ç¥ÇöÇϴ Ŭ·¡½ºÀÌ´Ù. À©µµ¿ì ÇÚµéÀº ´ç¿¬È÷ °¡Á®¾ß ÇÏ¸ç ´õºí¹öÆÛ¸µ ±â´ÉÀ» ±âº»ÀûÀ¸·Î Á¦°øÇÑ´Ù. ´ëºÎºÐÀÇ
ÄÁÆ®·ÑÀÌ ±ô¹ÚÀÓ °¨¼Ò¸¦ À§ÇØ ´õºí¹öÆÛ¸µÀ» ±¸ÇöÇϹǷΠ¾Æ¿¹ ·çÆ® À©µµ¿ì ÀÚü¿¡ ÀÌ ±â´ÉÀ» ³Ö¾ú´Ù. À̸¦
À§ÇØ ¹è°æ»ö°ú ¹è°æ ºê·¯½Ã°¡ ÇÊ¿äÇØ ¸â¹ö·Î Æ÷ÇÔÇÑ´Ù.
CWindowÀÇ ¸â¹ö´Â ¸ðµÎ win_
Á¢µÎ·Î ½ÃÀÛÇÏ¿© À©µµ¿ì ¼Ò¼ÓÀÓÀ» ºÐ¸íÈ÷ Çß´Ù. ¸íĪÀ» ºÐ¸íÈ÷ ¹àÈ÷Áö ¾ÊÀ¸¸é Áö¿ª º¯¼ö¿Í
Çò°¥·Á ¾û¶×ÇÑ ½Ç¼ö¸¦ ÇÒ À§ÇèÀÌ ³ô´Ù. ÀÌ·² ¶§ º¸Åë m_ Á¢µÎ¸¦
ºÙÀ̴µ¥ KFC´Â ¾Æ¿¹ ¼Ò¼Ó Ŭ·¡½º¸íÀ» Á¢µÎ·Î ºÙ¿© Á¤ÀÇµÈ À§Ä¡¸¦ ºÐ¸íÈ÷ ¹àÈ÷µµ·Ï Çß´Ù.
»ý¼ºÀÚ, Æı«ÀÚ°¡ Á¤ÀǵǾî ÀÖµÇ Æı«ÀÚ¸¦ ¿ÜºÎ¿¡¼ Á÷Á¢ È£ÃâÇÒ ¼ö
ÀÖµµ·Ï Dispose ¸Þ¼µå·Î ºÐ¸®ÇØ µÎ¾ú´Ù. À©µµ¿ì¸¦ »ý¼ºÇÏ´Â
Create¿Í ¹è°æ»öÀ» ÁöÁ¤ ¶Ç´Â º¯°æÇÏ´Â SetBackColor¸¦
Á¤ÀÇÇß´Ù. ¸Þ½ÃÁö Çڵ鷯´Â ¸ðµÎ °¡»óÀ¸·Î ¼±¾ðÇØ µÎ¾î ÆÄ»ý Ŭ·¡½º¿¡¼ ¾ðÁ¦µçÁö ÀçÁ¤ÀÇÇÒ ¼ö ÀÖµµ·Ï ÇØ
µÎ¾ú´Ù.
CWindow´Â À©µµ¿ìÀÌ¸é¼ À©µµ¿ì¸¦ °ü¸®ÇÏ´Â °´Ã¼ ¸Êµµ Æ÷ÇÔÇÑ´Ù. ½º½º·Î °ü¸® °´Ã¼¸¦ ³»ºÎ¿¡ µÎ´Â °ÍÀÌ Á» ¾î»öÇÏÁö¸¸ Á¤Àû ¸â¹ö·Î µÎ¸é º°µµÀÇ »óÀ§ Ŭ·¡½º°¡ ÇÊ¿ä ¾ø¾î ÇüÅ°¡
´Ü¼øÇØÁö´Â ÀÌÁ¡ÀÌ ÀÖ´Ù. pWinMapÀº À©µµ¿ì ÇÚµé°ú À©µµ¿ì °´Ã¼ÀÇ ½ÖÀ» ÀúÀåÇÏ´Â ¸ÊÀÌ´Ù. ÀÌ ¸ÊÀ» ÅëÇØ À©µµ¿ì ÇÚµé·ÎºÎÅÍ °´Ã¼¸¦ ã¾Æ ÀûÀýÇÑ ¸Þ½ÃÁö Çڵ鷯¸¦ È£ÃâÇÑ´Ù.
Á¤Àû ¸â¹ö ÇÔ¼öÀÎ CWindowProcÀº ¸ðµç À©µµ¿ìÀÇ ¸Þ½ÃÁö¸¦ ¸ÕÀú
¹Þ´Â ¸Þ½ÃÁö ÇÁ·Î½ÃÀúÀÌ´Ù. °´Ã¼ ¸ÊÀ» ÅëÇØ ¾îµð·Î Àü´ÞÇÒ ¸Þ½ÃÁöÀÎÁö ÆǺ°ÇÏ¿© ¸Þ½ÃÁö¸¦ ºÐ¹èÇÏ´Â ¿ªÇÒÀ»
ÇÏ¸ç »õ·Î »ý¼ºµÈ À©µµ¿ì¸¦ ¸Ê¿¡ µî·ÏÇϱ⵵ ÇÑ´Ù. ±¸Çö ÆÄÀϱîÁö ÀÛ¼ºÇÑ ÈÄ ºÐ¼®ÇØ º¸ÀÚ. Window.cpp ÆÄÀÏÀ» Ãß°¡ÇÏ°í ´ÙÀ½ Äڵ带 ÀÛ¼ºÇÑ´Ù.
#include <windows.h>
#include <map>
using namespace std;
#include "Window.h"
#include "Util.h"
extern HINSTANCE g_hInst;
// °´Ã¼ ¸Ê Á¤Àû ¸â¹ö ¼±¾ð
map<HWND, CWindow*> * CWindow::pWinMap;
CWindow::CWindow() {
Trace(L"CWindow
»ý¼ºÀÚ È£Ãâ");
SetBackColor(RGB(255,
255, 255));
win_dblBuffer
= nullptr;
//
ÃÖÃÊ Çѹø¸¸ À©µµ¿ì Ŭ·¡½º¸¦ µî·ÏÇÏ°í °´Ã¼ ¸ÊÀ» ÃʱâÈÇÑ´Ù.
if
(pWinMap == nullptr) {
Trace(L"À©µµ¿ì
Ŭ·¡½º µî·Ï, À©µµ¿ì ¸Ê ÃʱâÈ");
pWinMap
= new map<HWND, CWindow*>();
WNDCLASS
WndClass;
WndClass.cbClsExtra
= 0;
WndClass.cbWndExtra
= 0;
//
´õºí¹öÆÛ¸µÀÌ ±âº» Á¦°øµÇ¾î ¹è°æ ºê·¯½Ã´Â ¾ø´Ù.
WndClass.hbrBackground
= NULL;
WndClass.hCursor
= LoadCursor(NULL, IDC_ARROW);
WndClass.hIcon
= LoadIcon(NULL, IDI_APPLICATION);
WndClass.hInstance
= GetModuleHandle(NULL);
//
À©µµ¿ì ÇÁ·Î½ÃÀú¿Í À©µµ¿ì Ŭ·¡½º¸íÀÌ °íÁ¤µÇ¾î ÀÖ´Ù.
WndClass.lpfnWndProc
= (WNDPROC)CWindow::CWindowProc;
WndClass.lpszClassName
= L"CWindow";
WndClass.lpszMenuName
= NULL;
//
´õºíŬ¸¯À» ±âº» Áö¿øÇÑ´Ù.
WndClass.style
= CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
RegisterClass(&WndClass);
}
}
void CWindow::Dispose() {
Trace(L"CWindow
Dispose È£Ãâ");
if
(win_backBrush != nullptr) DeleteObject(win_backBrush);
if
(win_dblBuffer != nullptr) DeleteObject(win_dblBuffer);
//
¸Ê¿¡¼ À©µµ¿ì Á¦°Å. ¸Ê ÀÚü°¡ ÀÌ¹Ì Æı«µÇ¾úÀ¸¸é(ÇÁ·Î±×·¥
Á¾·á½Ã) Á¤¸®ÇÒ ÇÊ¿ä ¾ø´Ù.
if
(pWinMap != nullptr) {
pWinMap->erase(win_hWnd);
Trace(L"%x
À©µµ¿ì Á¦°Å", win_hWnd);
}
}
void CWindow::Create(HWND hParent, DWORD style,
int child_id, LPCTSTR title) {
CreateWindow(TEXT("CWindow"),
title, style,
0,
0, 0, 0, hParent, (HMENU)(ULONG_PTR)child_id, g_hInst, this);
}
void CWindow::SetBackColor(COLORREF color) {
win_backColor
= color;
if
(win_backBrush != nullptr) DeleteObject(win_backBrush);
win_backBrush
= CreateSolidBrush(color);
}
void CWindow::DeleteMap() {
delete
pWinMap;
pWinMap
= nullptr;
}
// ±âº» ¸Þ½ÃÁö¸¦ ó¸®ÇØ ÁÖ¸ç Â÷Àϵå´Â ¸Þ½ÃÁö Çڵ鷯·Î ¹Þ´Â´Ù. ±× ¿ÜÀÇ ¸Þ½ÃÁö´Â Â÷Àϵ尡 Á÷Á¢ ó¸®ÇØ¾ß ÇÑ´Ù.
LRESULT CWindow::OnMessage(UINT iMessage, WPARAM
wParam, LPARAM lParam) {
switch
(iMessage)
{
case
WM_CREATE:
return
OnCreate(wParam, lParam);
case
WM_DESTROY:
return
OnDestroy(wParam, lParam);
case
WM_SIZE:
return
OnSize(wParam, lParam);
case
WM_PAINT:
return
OnPaint(wParam, lParam);
case
WM_TIMER:
return
OnTimer(wParam, lParam);
case
WM_COMMAND:
return
OnCommand(wParam, lParam);
case
WM_CONTEXTMENU:
return
OnContextMenu(wParam, lParam);
case
WM_KEYDOWN:
return
OnKeyDown(wParam, lParam);
case
WM_LBUTTONDOWN:
return
OnLButtonDown(wParam, lParam);
case
WM_MOUSEMOVE:
return
OnMouseMove(wParam, lParam);
case
WM_LBUTTONUP:
return
OnLButtonUp(wParam, lParam);
case
WM_LBUTTONDBLCLK:
return
OnLButtonDblClk(wParam, lParam);
case
WM_MOUSEWHEEL:
return
OnMouseWheel(wParam, lParam);
case
WM_USER + 1:
return
OnUser1(wParam, lParam);
case
WM_USER + 2:
return
OnUser2(wParam, lParam);
case
WM_DROPFILES:
return
OnDropFiles(wParam, lParam);
}
return(DefWindowProc(win_hWnd,
iMessage, wParam, lParam));
}
// OnPaint´Â ÀÏ´Ü ·çÆ®°¡ ¹ÞÀº ÈÄ ´õºí¹öÆÛ¸µ Áغñ¸¦ Çؼ OnDraw °¡»ó ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù.
// ´õºí¹öÆÛ¸µÀ» ¿øÇÏÁö ¾ÊÀ» °æ¿ì Á÷Á¢ ÀçÁ¤ÀÇÇÑ´Ù.
LRESULT CWindow::OnPaint(WPARAM wParam, LPARAM
lParam)
{
HDC
hdc;
PAINTSTRUCT
ps;
HDC
hMemDC;
HBITMAP
oldBit;
RECT
crt;
GetClientRect(win_hWnd,
&crt);
hdc
= BeginPaint(win_hWnd, &ps);
if
(win_dblBuffer == nullptr) {
win_dblBuffer
= CreateCompatibleBitmap(hdc, crt.right, crt.bottom);
}
hMemDC
= CreateCompatibleDC(hdc);
oldBit
= (HBITMAP)SelectObject(hMemDC, win_dblBuffer);
FillRect(hMemDC,
&crt, win_backBrush);
//
Â÷Àϵ忡°Ô ¸Þ¸ð¸® DC¸¦ »ý¼ºÇÏ¿© Àü´ÞÇÑ´Ù.
OnDraw(hMemDC,
crt.right, crt.bottom);
SelectObject(hMemDC,
oldBit);
DeleteDC(hMemDC);
DrawBitmap(hdc,
0, 0, win_dblBuffer);
EndPaint(win_hWnd,
&ps);
return
0;
}
// Å©±â°¡ ¹Ù²î¸é ´õºí¹öÆÛ¸µ ºñÆ®¸ÊÀ» »õ·Î ¸¸µç´Ù.
// ÆÄ»ý Ŭ·¡½º´Â WM_SIZE¸¦
¹Þ¾ÒÀ» ¶§ CWindow::OnSizeºÎÅÍ ¸ÕÀú È£ÃâÇØ¾ß ÇÑ´Ù.
LRESULT CWindow::OnSize(WPARAM wParam, LPARAM
lParam)
{
if
(win_dblBuffer != nullptr) {
DeleteObject(win_dblBuffer);
win_dblBuffer
= nullptr;
}
return
0;
}
// ¸ðµç À©µµ¿ìÀÇ ¸Þ½ÃÁö ÇÁ·Î½ÃÀú´Â ÀÌ ÇÔ¼ö Çϳª »ÓÀÌ´Ù.
LRESULT CALLBACK CWindow::CWindowProc(HWND hWnd,
UINT iMessage, WPARAM wParam, LPARAM lParam)
{
CWindow*
pWin = nullptr;
//
¸Ê¿¡ µî·ÏµÇ¾î ÀÖ´Â À©µµ¿ìÀÎÁö ã´Â´Ù.
if
(pWinMap->find(hWnd) != pWinMap->end()) {
pWin
= (*pWinMap)[hWnd];
}
//
¾øÀ¸¸é ¸Ê¿¡ Ãß°¡ÇÑ´Ù.
if
(pWin == nullptr) {
//
WS_THICKFRAME ½ºÅ¸ÀÏÀÌ ÀÖÀ» ¶§ °¡Àå ¸ÕÀú ¿À¸ç À̶§ lParamÀº MINMAXINFO¿©¼ °´Ã¼¸¦ ãÀ» ¼ö ¾ø´Ù.
if
(iMessage == WM_GETMINMAXINFO) {
return
DefWindowProc(hWnd, iMessage, wParam, lParam);
}
pWin
= (CWindow*)((LPCREATESTRUCT)lParam)->lpCreateParams;
//
°´Ã¼ Ãß°¡ÇÏ°í °´Ã¼ÀÇ ¸â¹ö¿¡ À©µµ¿ì ÇÚµé ´ëÀÔ
(*pWinMap)[hWnd]
= pWin;
pWin->win_hWnd
= hWnd;
Trace(L"»õ
À©µµ¿ì Ãß°¡. °´Ã¼ : %x - À©µµ¿ì %x", pWin, hWnd);
}
//
À©µµ¿ì °´Ã¼·Î ¸Þ½ÃÁö¸¦ Àü´ÞÇÑ´Ù.
return
pWin->OnMessage(iMessage, wParam, lParam);
}
»ý¼ºÀÚ´Â ¹è°æ»öÀ» Èò»öÀ¸·Î ÃʱâÈÇÏ°í ´õºí¹öÆÛ¸µ ºñÆ®¸Êµµ nullptr·Î
ÃʱâÈÇÑ´Ù. ºñÆ®¸ÊÀº óÀ½ WM_PAINT ¸Þ½ÃÁö¸¦ ¹Þ¾ÒÀ»
¶§ ÀÛ¾÷¿µ¿ª Å©±â¿¡ ¸Â°Ô »ý¼ºÇÏ¸ç ¹è°æ»öÀº ¿øÇÒ °æ¿ì ¾ðÁ¦µçÁö ´Ù¸¥ »öÀ¸·Î º¯°æÇÒ ¼ö ÀÖ´Ù.
ÀÌÈÄÀÇ ¸ðµç À©µµ¿ì¸¦ »ý¼ºÇϱâ À§ÇÑ À©µµ¿ì Ŭ·¡½º¸¦ µî·ÏÇ쵂 ÀÌ ÀÛ¾÷Àº pWinMapÀÌ
¾ÆÁ÷ »ý¼ºµÇÁö ¾ÊÀº ÃÖÃÊ µü Çѹø¸¸ ¼öÇàÇÑ´Ù. ¿ø·¡´Â WinMain¿¡¼
ÇØ¾ß ÇÏ´Â ÀÛ¾÷À̳ª Ŭ¶óÀ̾ðÆ®ÀÇ ºÎ´ãÀ» ÁÙÀ̱â À§ÇØ ¾î¶² À©µµ¿ìµçÁö óÀ½ »ý¼ºµÇ´Â À©µµ¿ì°¡ µî·ÏÇϵµ·Ï Çß´Ù.
CWindow°¡ µî·ÏÇÏ´Â À©µµ¿ì Ŭ·¡½ºÀÇ ¸Þ½ÃÁö ÇÁ·Î½ÃÀú´Â CWindowProcÀ¸·Î °íÁ¤µÇ¾î ÀÖÀ¸¸ç À©µµ¿ì Ŭ·¡½º¸íµµ °íÁ¤ÀÌ´Ù. Áï, ¸ðµç À©µµ¿ì´Â ¿î¿µÃ¼Á¦ ÀÔÀå¿¡¼´Â ¶È°°Àº À©µµ¿ìÀÌµÇ °´Ã¼°¡ ¸Þ½ÃÁö ó¸® ÇÔ¼ö¸¦ ¾î¶»°Ô Á¤ÀÇÇϴ°¡¿¡ µû¶ó µ¿ÀÛÀÌ
´Þ¶óÁø´Ù. Çൿ ¹æ½ÄÀÌ À©µµ¿ì Ŭ·¡½º°¡ ¾Æ´Ñ C++ class¿¡
ÀÇÇØ °áÁ¤µÈ´Ù.
À©µµ¿ì Ŭ·¡½º¸¦ µî·ÏÇÒ ¶§ °´Ã¼ ¸Êµµ »ý¼ºÇÑ´Ù. pWinMap Á¤Àû
º¯¼ö´Â ÃÖÃÊ nullptrÀÌ´Ù°¡ ù »ý¼ºÀÚ È£Ãâ½Ã »ý¼ºÇÑ´Ù. pWinMapÀÌ
»ý¼ºµÇ¸é ÀÌÈĺÎÅÍ »ý¼ºµÇ´Â À©µµ¿ì´Â ÀڽŸ¸ ÃʱâÈÇÒ »Ó À©µµ¿ì Ŭ·¡½º³ª °´Ã¼ ¸ÊÀº ½Å°æ¾²Áö ¾Ê´Â´Ù. ÃʱâÈ
Àü°ú Èĸ¦ ±¸ºÐÇϱâ À§ÇØ ¸ÊÀ» Á¤Àû º¯¼ö°¡ ¾Æ´Ñ Æ÷ÀÎÅÍ·Î ¼±¾ðÇß´Ù.
Dispose ¸Þ¼µå´Â Æı«ÀÚ°¡ È£ÃâÇÏ´Â Á¤¸® ÇÔ¼öÀÌ´Ù. Äڵ忡¼ Æı«ÀÚ¸¦ Á÷Á¢ È£ÃâÇÒ ¼ö ¾ø±â ¶§¹®¿¡ º°µµÀÇ ¸Þ¼µå·Î »© µÎ¾ú´Ù. ºê·¯½Ã¿Í
´õºí¹öÆÛ¸µ ºñÆ®¸ÊÀ» Æı«ÇÏ´Â °ÍÀº ±âº» Á¤¸® ÀýÂ÷ÀÌ¸ç °´Ã¼ ¸Ê¿¡¼µµ À©µµ¿ì¸¦ Á¦°ÅÇ쵂 ÀÌ Á¶°ÇÀº Á» º¹ÀâÇÏ´Ù. ÀÌÈÄ
¸ÞÀÎ À©µµ¿ì±îÁö ¸¸µç ÈÄ ´Ù½Ã ¿¬±¸ÇØ º¸ÀÚ.
Create´Â À©µµ¿ì¸¦ »ý¼ºÇÑ´Ù. °´Ã¼¸¦
»ý¼ºÇÏ´Â °Í°ú À©µµ¿ì¸¦ »ý¼ºÇÏ´Â °ÍÀº ´Ù¸£´Ù. °´Ã¼´Â ¾îµð±îÁö³ª ¸Þ¸ð¸® ³»ÀÇ Á¤º¸ ÁýÇÕÀÏ »ÓÀ̸ç ȸé»ó¿¡
¿òÁ÷ÀÌ´Â ½Çü°¡ ¾Æ´Ï´Ù. CreateWindow¸¦ È£ÃâÇØ¾ß È¸é¿¡ Ç¥½ÃÇÏ´Â À©µµ¿ì°¡ µÈ´Ù. À©µµ¿ì Ŭ·¡½º´Â °íÁ¤µÇ¾î ÀÖ°í ½ºÅ¸ÀÏ, ID, Á¦¸ñÀº Àμö·Î ÁöÀúÇÒ
¼ö ÀÖ´Ù.
OnMessage´Â ¸Þ½ÃÁö¿Í °¡»ó ÇÔ¼ö¸¦ ¿¬°áÇÑ´Ù. ´ëºÎºÐÀÇ À©µµ¿ì°¡ ±âº»ÀûÀ¸·Î ó¸®ÇÏ´Â ¸Þ½ÃÁö¸¦ ¸ðµÎ µî·ÏÇØ µÎ¾úÀ¸¸ç »ç¿ëÀÚ Á¤ÀÇ ¸Þ½ÃÁö¿¡ ´ëÇÑ Çڵ鷯µµ 2°³³ª µî·ÏÇØ µÎ¾ú´Ù. ¹Ì¸® ¿¬°áÇØ ³õÁö ¾ÊÀº ³ª¸ÓÁö ¸Þ½ÃÁö´Â ¸ðµÎ
DefWindowProcÀ¸·Î Àü´ÞÇÏ¿© µðÆúÆ® ó¸®ÇÑ´Ù.
OnMessage¸¦ ÅëÇØ °¢ À©µµ¿ì´Â ÀÚ½ÅÀÌ Á¤ÀÇÇÑ °¡»ó ÇÔ¼ö·Î ¸Þ½ÃÁö¸¦ ¹Þ°Ô µÈ´Ù.
ÀÌ°ÍÀÌ °¡´ÉÇϵµ·Ï Çϱâ À§ÇØ °´Ã¼ ¸ÊÀ» °ü¸®ÇÏ°í ÇÚµé·ÎºÎÅÍ °´Ã¼¸¦ ã¾Æ °¡»ó ÇÔ¼ö¸¦ È£ÃâÇϵµ·Ï ü°è¸¦ ¸¸µé¾î
°¡´Â °ÍÀÌ´Ù. °¢ ¸Þ½ÃÁö¸¦ ¾î¶»°Ô ó¸®ÇÒ °ÍÀΰ¡´Â °³º° À©µµ¿ì°¡ ¸¶À½´ë·Î °áÁ¤ÇÒ ¼ö ÀÖµµ·Ï CWindowÀÇ ±âº» ±¸ÇöÀº ¸ðµÎ 0À» ¸®ÅÏÇÏ´Â °ÍÀ¸·Î µÇ¾î ÀÖ´Ù. ´Ü, OnPaint¿Í OnSize¿¡
´ëÇؼ´Â ±âº» ±¸ÇöÀ» Á¦°øÇÑ´Ù.
OnPaint´Â ÀÛ¾÷¿µ¿ª Å©±â¿¡ ¸Â°Ô ´õºí¹öÆÛ¸µ ºñÆ®¸ÊÀ» »ý¼ºÇÏ°í
ÀÌ ºñÆ®¸ÊÀ» DC¿¡ ¼±ÅÃÇØ µÐ´Ù. ¹è°æ ºê·¯½Ã·Î ºñÆ®¸ÊÀ»
¸ðµÎ ä¿î ÈÄ OnDraw·Î DC¿Í ÀÛ¾÷¿µ¿ª Å©±â¸¦ Àü´ÞÇÑ´Ù. °´Ã¼°¡ ¹è°æÀ» ä¿ì¹Ç·Î À©µµ¿ì Ŭ·¡½ºÀÇ ¹è°æ ºê·¯½Ã´Â NULLÀÌ´Ù. °á±¹ À©µµ¿ì¿¡ ¹«¾ùÀ» ±×¸± °ÍÀΰ¡´Â ÆÄ»ý Ŭ·¡½ºÀÇ OnDraw¿¡¼
¾î¶»°Ô Ãâ·ÂÇϴ°¡¿¡ µû¶ó °áÁ¤µÈ´Ù. OnDraw°¡ ºñÆ®¸ÊÀ» ¿Ï¼ºÇÏ¿© ¸®ÅÏÇϸé ÀÌ ºñÆ®¸ÊÀ» ȸéÀ¸·Î
°í¼Ó Àü¼ÛÇÑ´Ù.
OnSize´Â À©µµ¿ì Å©±â°¡ ¹Ù²ð ¶§ ´õºí¹öÆÛ¸µ ºñÆ®¸ÊÀ» ¹«È¿ÈÇÑ´Ù. ºñÆ®¸ÊÀ» Áö¿ö ³õ±â¸¸ Çϸé OnPaint¿¡¼ º¯°æµÈ ÀÛ¾÷¿µ¿ª Å©±â¿¡
¸ÂÃß¾î »õ·Î »ý¼ºÇϵµ·Ï µÇ¾î ÀÖ´Ù. µÎ Çڵ鷯°¡ ´õºí¹öÆÛ¸µÀ» Àß Áö¿øÇÏ°í ÀÖÀ¸¹Ç·Î Â÷Àϵå´Â OnDraw¿¡¼ Çã°¡µÈ ¿µ¿ª¿¡ ±×¸®°í ½ÍÀº °Í¸¸ ±×¸®¸é µÈ´Ù.
´ëºÎºÐÀÇ À©µµ¿ì´Â ±ô¹ÚÀÓ ¹æÁö¸¦ À§ÇØ ´õºí¹öÆÛ¸µÀÌ ÇÊ¿äÇÏ´Ù. ´õºí¹öÆÛ¸µÀ»
ÇÏÁö ¾Ê°Å³ª ºÒÇÊ¿äÇÏ´Ù¸é OnPaint¸¦ ÀçÁ¤ÀÇÇÏ¿© Á÷Á¢ ±×¸®¸é µÈ´Ù.
ÀÌ °æ¿ì´Â OnSizeÀÇ Äڵ嵵 µüÈ÷ ÇÊ¿äÄ¡ ¾ÊÁö¸¸ ºñÆ®¸ÊÀÌ Ç×»ó nullptrÀ̹ǷΠ±×´ë·Î µÎ¾îµµ º°´Ù¸¥ ºÎÀÛ¿ëÀº ¾ø´Ù.
CWindowProc˼ CWindow
ÆÄ»ý Ŭ·¡½ºÀÇ ¸Þ½ÃÁö¸¦ ¹Þ´Â À©µµ¿ì ÇÁ·Î½ÃÀúÀÌ´Ù. ¿î¿µÃ¼Á¦°¡ ¿ä±¸ÇÏ´Â ¿øÇü¿¡ ¸ÂÃß±â À§ÇØ
Á¤Àû ¸Þ¼µå·Î ¼±¾ðÇß´Ù. ¿î¿µÃ¼Á¦´Â À©µµ¿ì Çڵ鿡 ´ëÇØ ¸Þ½ÃÁö¸¦ º¸³»´Âµ¥ ¿ì¸®´Â À©µµ¿ì¸¦ °´Ã¼·Î Á¤ÀÇÇß´Ù. µû¶ó¼ ÇÚµé°ú °´Ã¼¸¦ ´ëÀÀ½Ãų ÇÊ¿ä°¡ Àִµ¥ ÀÌ Á¤º¸¸¦ arWinMapÀÌ
°¡Áö¸ç ÇÚµé°ú °´Ã¼ÀÇ º¯È¯À» CWindowProcÀÌ Ã³¸®ÇÑ´Ù.
CWindowProcÀÇ ÁÖ¾÷¹«´Â À©µµ¿ì ÇÚµé°ú °´Ã¼ÀÇ ´ëÀÀÇ¥¸¦ º¸°í
°´Ã¼¸¦ ã¾Æ °¡»ó ÇÔ¼ö¸¦ È£ÃâÇÏ´Â °ÍÀÌ´Ù. ÀÌ ¿Ü¿¡µµ »õ·Î µé¾î¿Â ¸Þ½ÃÁöÀÇ ÁÖÀÎÀÌ ¾ÆÁ÷ µî·ÏµÇ¾î ÀÖÁö
¾ÊÀ¸¸é °´Ã¼ ¸Ê¿¡ µî·ÏÇÏ¿© ÀÌÈĺÎÅÍ °´Ã¼¸¦ ÅëÇØ ¸Þ½ÃÁö¸¦ ¹ÞÀ» ¼ö ÀÖµµ·Ï Á¶Ä¡ÇÑ´Ù.
À©µµ¿ì ¿î¿µÃ¼Á¦´Â °´Á¦ ÁöÇâÀûÀÌÁö ¾ÊÁö¸¸ CWindowProc¿¡ ÀÇÇØ
À©µµ¿ì´Â °´Ã¼°¡ µÇ°í °¡»ó ÇÔ¼ö¿¡ ÀÇÇØ ´ÙÇüÀûÀ¸·Î µ¿ÀÛÇÑ´Ù. ÀÌ Ã¼°è¸¦ Àß ±¸ÃàÇØ ³õÀ¸¸é ÀÌÈĺÎÅÍ À©µµ¿ì¸¦
»ý¼ºÇÏ°í µ¿ÀÛÀ» Á¤ÀÇÇϱâ Æí¸®Çϸç C++ÀÇ ¸ðµç ÀÌÁ¡À» ´©¸± ¼ö ÀÖ´Ù.
¿©±â±îÁö´Â À©µµ¿ì¸¦ »ý¼ºÇÏ°í ¿î¿ëÇÒ Áغñ¸¸ Çß´Ù. ÀÌÁ¦ ½ÇÁ¦ À©µµ¿ì¸¦
¸¸µé¾î º¸ÀÚ. SoEnty.h Çì´õ ÆÄÀÏÀ» Ãß°¡ÇÏ°í ¸ÞÀÎ À©µµ¿ì¿Í °£´ÜÇÑ ½Ã°è À©µµ¿ì¸¦ ¼±¾ðÇÑ´Ù. °üÇà»ó Ŭ·¡½º À̸§Àº ¸ðµÎ ´ë¹®ÀÚ C·Î ½ÃÀÛÇÑ´Ù.
// ¸ÞÀÎ À©µµ¿ì Ŭ·¡½º ¼±¾ð
class CMainWindow : public CWindow
{
public:
//
CWindowÀÇ Create¿Í ´Ù¸¦ °æ¿ì º°µµÀÇ ÇÔ¼ö¸¦ ¸¸µç´Ù.
//
´ëºÎºÐÀÇ Â÷Àϵå´Â ÀçÁ¤ÀÇ ºÒÇÊ¿äÇÏ´Ù.
void
Create();
//
°ü½ÉÀÖ´Â ¸Þ½ÃÁöÀÇ Çڵ鷯¸¸ ÀçÁ¤ÀÇÇÑ´Ù.
LRESULT
OnMessage(UINT iMessage, WPARAM wParam, LPARAM lParam);
LRESULT
OnCreate(WPARAM wParam, LPARAM lParam);
LRESULT
OnDestroy(WPARAM wParam, LPARAM lParam);
LRESULT
OnKeyDown(WPARAM wParam, LPARAM lParam);
};
class CClock : public CWindow
{
public:
//
ÇÊ¿äÇÑ ¸â¹ö¸¦ Á¤ÀÇÇÑ´Ù.
TCHAR
sTime[128];
LRESULT
OnCreate(WPARAM wParam, LPARAM lParam);
LRESULT
OnDestroy(WPARAM wParam, LPARAM lParam);
LRESULT
OnTimer(WPARAM wParam, LPARAM lParam);
void
OnDraw(HDC hdc,int width, int height);
};
µÑ ´Ù CWindow·ÎºÎÅÍ ÆÄ»ýµÇ¸ç ±âº» ¼Ó¼º°ú µ¿ÀÛÀ» ¹°·Á ¹ÞÀº
ÈÄ ¿øÇÏ´Â ±â´É¸¸ ÀçÁ¤ÀÇÇÏ¸é µÈ´Ù. ¸ðµç ÆÄ»ý Ŭ·¡½º´Â ¹è°æ»öÀ» °¡Áö°í ´õºí¹öÆÛ¸µÀ» Áö¿øÇϸç OnMessage¸¦ ÅëÇØ ¸Þ½ÃÁö¸¦ ºÐ¹èÇÏ´Â ´É·ÂÀ» °¡Áø´Ù. ´ë°³ÀÇ °æ¿ì
¸Þ½ÃÁö Çڵ鷯¸¸ ÀçÁ¤ÀÇÇصµ ¿øÇÏ´Â ±â´ÉÀ» ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù. Ŭ·¡½º ¼±¾ð¹®¿¡ ÀçÁ¤ÀÇÇÒ ¸Þ¼µå ¸ñ·ÏÀ» ³ª¿ÇÑ´Ù.
¸ÞÀÎ À©µµ¿ì´Â ´ëÀåÀ̶ó´Â Á¡¿¡¼ ¼Ó¼º°ú ¸Þ½ÃÁö 󸮰¡ ƯÀÌÇØ Create¿Í
OnMessage¸¦ ÀçÁ¤ÀÇÇÑ´Ù. »ç½Ç Create ÇÔ¼ö´Â ¿øÇüÀÌ ´Þ¶ó ÀçÁ¤ÀÇ°¡ ¾Æ´Ï¶ó ¾Æ¿¹ ´Ù¸¥ ÇÔ¼ö¸¦ Çϳª ´õ ¸¸µç °ÍÀÌ´Ù. ¸ÞÀÎ À©µµ¿ìÀ̴ϸ¸Å Â÷Àϵå¿Í´Â »ý¼º ¹æ¹ýÀÌ µ¶Æ¯ÇÏ´Ù.
CClockÀº ¸Þ½ÃÁö Çڵ鷯 ¿Ü¿¡ ÇöÀç ½Ã°£À» ÀúÀåÇÒ sTime ¹öÆÛ¸¦ ¸â¹ö·Î ¼±¾ðÇÑ´Ù. Ŭ·¡½ºÀ̹ǷΠ´ç¿¬È÷ ¸â¹ö¸¦ ÀÚÀ¯·Ó°Ô
Ãß°¡ÇÒ ¼ö ÀÖ´Ù. ÇÊ¿äÇÑ ¸ðµç °ÍÀ» Ŭ·¡½º ³»ºÎ¿¡ ĸ½¶ÈÇÏ¿© ´Ù¸¥ Ŭ·¡½º¿Í ¸íĪ Ãæµ¹À» °ÆÁ¤ÇÒ ÇÊ¿ä°¡
¾ø´Ù. ÇÁ·ÎÁ§Æ®°¡ ¾Æ¹«¸® Ä¿Á®µµ Ŭ·¡½º ¾È¿¡¼ ¸â¹ö¸¦ ÀÚÀ¯·Ó°Ô ¼±¾ðÇÒ ¼ö ÀÖ´Ù.
CWindow´Â ¹°·ÐÀÌ°í CMainWindow,
CClockÀÇ ¸ðµç ¸â¹ö´Â ´Ù publicÀÌ¸ç ¸ðµÎ °ø°³µÇ¾î ÀÖ´Ù. °´Ã¼´Â ³»ºÎ ±¸ÇöÀ» ÀûÀýÈ÷ ¼û°Ü¾ß ÇÏÁö¸¸ ÀÌ ÇÁ·ÎÁ§Æ®ÀÇ °´Ã¼´Â ÀÛ¼ºÀÚ°¡ °ð »ç¿ëÀÚÀ̹ǷΠ±»ÀÌ ±×·² ÇÊ¿ä ¾ø´Ù. °³¹ßÁß¿¡ ¸ðµç ¸â¹ö´Â °ø°³ÀÌµÇ ³ªÁß¿¡ ²À ÇÊ¿äÇÑ ¸â¹ö¸¸ ¼±º°ÀûÀ¸·Î ¼û±â¸é µÈ´Ù. ±¸Çö ÆÄÀÏÀº SoEnty.cpp ÆÄÀÏ¿¡ ÀÛ¼ºÇÑ´Ù.
#include <windows.h>
#include <tchar.h>
#include <map>
using namespace std;
#include "Window.h"
#include "SoEnty.h"
#include "Util.h"
// ÀνºÅϽº ÇÚµé °´Ã¼
HINSTANCE g_hInst;
// ¸ÞÀÎ À©µµ¿ì
CMainWindow mainWindow;
// mainWindow ¾È¿¡ Æ÷ÇÔ½ÃÄѵµ »ó°ü ¾øÀ½.
CClock childClock;
CClock* pClock;
void CMainWindow::Create()
{
//
À©µµ¿ì Ŭ·¡½º´Â ¹«Á¶°Ç CWindow·Î ÁöÁ¤ÇÑ´Ù. ¸ÞÀÎÀº CHILD°¡ ¾Æ´Ï¾î¼ ÀçÁ¤ÀÇÇß´Ù.
CreateWindow(L"CWindow",
L"main", WS_OVERLAPPEDWINDOW,
10,
10, 640, 480, nullptr, (HMENU)0, g_hInst, this);
}
LRESULT CMainWindow::OnMessage(UINT iMessage,
WPARAM wParam, LPARAM lParam) {
//
Çڵ鷯°¡ Á¤ÀǵÇÁö ¾ÊÀº ¸Þ½ÃÁö¸¦ Á÷Á¢ ó¸®ÇÑ´Ù.
switch
(iMessage)
{
case
WM_RBUTTONDOWN:
MessageBox(win_hWnd,
L"¸¶¿ì½º ¿À¸¥ÂÊ ¹öÆ°À» ´·¶½À´Ï´Ù.", L"¾Ë¸²", MB_OK);
return
0;
}
//
Çڵ鷯°¡ Á¤ÀǵǾî ÀÖ´Â ¸Þ½ÃÁö´Â Çڵ鷯¸¦ ã¾Æ È£ÃâÇÑ´Ù.
return
CWindow::OnMessage(iMessage, wParam, lParam);
}
LRESULT CMainWindow::OnCreate(WPARAM wParam,
LPARAM lParam)
{
Trace(L"MainWindow
OnCreate. hWnd = %x", win_hWnd);
childClock.Create(win_hWnd);
MoveWindow(childClock.win_hWnd,
10, 10, 300, 100, TRUE);
childClock.SetBackColor(RGB(255,
255, 0));
return
0;
}
LRESULT CMainWindow::OnDestroy(WPARAM wParam,
LPARAM lParam)
{
PostQuitMessage(0);
return
0;
}
LRESULT CMainWindow::OnKeyDown(WPARAM wParam,
LPARAM lParam)
{
switch
(wParam) {
case
'1':
//
Â÷Àϵå À©µµ¿ì¸¦ ´Ù½Ã ¸¸µç´Ù.
if
(IsWindow(childClock.win_hWnd) == FALSE) {
childClock.Create(win_hWnd);
MoveWindow(childClock.win_hWnd,
10, 10, 300, 100, TRUE);
childClock.SetBackColor(RGB(255,
255, 0));
}
break;
case
'2':
if
(IsWindow(childClock.win_hWnd)) {
//
½ÇÇàÁß¿¡ Á¤Àû Â÷Àϵå À©µµ¿ì¸¦ Æı«ÇÒ ¶§ÀÇ Ã³¸®.
DestroyWindow(childClock.win_hWnd);
//
¿©±â¼ °´Ã¼¸¦ Á¦°ÅÇÑ´Ù. Æı«ÁßÀÇ ¸Þ½ÃÁö´Â ¸ðµÎ
SendMessage·Î º¸³»±â ¶§¹®¿¡ ´õ ó¸®ÇÒ ¸Þ½ÃÁö°¡ ¾ø´Ù.
childClock.Dispose();
//
Á¤ÀûÀ¸·Î ¼±¾ðÇÑ °´Ã¼¸¦ Æı«ÇÒ ÇÊ¿ä´Â ¾ø´Ù.
}
break;
case
'3':
//
½ÇÇàÁß¿¡ Â÷ÀÏµå °´Ã¼¸¦ »ý¼ºÇÑ´Ù.
if
(pClock == nullptr) {
pClock
= new CClock();
pClock->Create(win_hWnd);
pClock->SetBackColor(RGB(0,
255, 0));
MoveWindow(pClock->win_hWnd,
10, 150, 300, 100, TRUE);
}
break;
case
'4':
//
Â÷ÀÏµå °´Ã¼¸¦ Æı«ÇÑ´Ù.
if
(pClock != nullptr) {
DestroyWindow(pClock->win_hWnd);
delete
pClock;
pClock
= nullptr;
}
break;
}
return
0;
}
LRESULT CClock::OnCreate(WPARAM wParam, LPARAM
lParam)
{
Trace(L"Clock
OnCreate. hWnd = %x", win_hWnd);
SetTimer(win_hWnd,
1, 1000, NULL);
SendMessage(win_hWnd,
WM_TIMER, 1, NULL);
return
0;
}
LRESULT CClock::OnDestroy(WPARAM wParam, LPARAM
lParam)
{
Trace(L"Clock
OnDestroy. hWnd = %x", win_hWnd);
KillTimer(win_hWnd,
1);
return
0;
}
LRESULT CClock::OnTimer(WPARAM wParam, LPARAM
lParam)
{
SYSTEMTIME
st;
switch
(wParam) {
case
1:
GetLocalTime(&st);
wsprintf(sTime,
TEXT("Áö±Ý ½Ã°£Àº %d:%d:%dÀÔ´Ï´Ù"),
st.wHour,
st.wMinute, st.wSecond);
InvalidateRect(win_hWnd,
NULL, TRUE);
break;
}
return
0;
}
void CClock::OnDraw(HDC hdc, int width, int
height)
{
SetTextAlign(hdc,
TA_CENTER);
SetBkMode(hdc,
TRANSPARENT);
TextOutSz(hdc,
width / 2, 20, sTime);
}
// ¸ÞÀÎ À©µµ¿ì »ý¼ºÇÏ°í ¸Þ½ÃÁö ·çÇÁ¸¸ µ¹¸®¸é µÈ´Ù.
int APIENTRY WinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance
,
_In_ LPSTR lpszCmdParam, _In_ int nCmdShow)
{
MSG
Message;
g_hInst
= hInstance;
mainWindow.Create();
ShowWindow(mainWindow.win_hWnd,
nCmdShow);
while
(GetMessage(&Message, NULL, 0, 0)) {
TranslateMessage(&Message);
DispatchMessage(&Message);
}
//
Á¾·á Á÷Àü¿¡ °´Ã¼ ¸ÊÀ» ÇØÁ¦ÇÑ´Ù.
CWindow::DeleteMap();
return
(int)Message.wParam;
}
mainWindow¿Í childClock
°´Ã¼°¡ Àü¿ªÀ¸·Î ¼±¾ðµÇ¾î ÀÖ°í µÎ Å¬·¡½ºÀÇ ¸â¹ö ÇÔ¼ö°¡ Á¤ÀǵǾî ÀÖ´Ù. ¸ÞÀÎ À©µµ¿ì´Â Â÷Àϵ尡
¾Æ´Ñ OVERLAPPEDWINDOW ¼Ó¼ºÀ» °¡Áö¸ç »ý¼ºÇÒ ¶§ºÎÅÍ Ä¸¼Ç°ú À§Ä¡¸¦ ÁöÁ¤ÇÒ ÇÊ¿ä°¡ ÀÖ¾î Create ¸Þ¼µå¸¦ ÀçÁ¤ÀÇÇß´Ù. CWindowÀÇ Create ¸Þ¼µåµµ ĸ¼Ç°ú ½ºÅ¸ÀÏÀº ÁöÁ¤ÇÒ ¼ö ÀÖÀ¸¹Ç·Î WinMain¿¡¼
´ÙÀ½°ú °°ÀÌ ¸ÞÀÎ À©µµ¿ì¸¦ »ý¼ºÇصµ »ó°ü ¾ø´Ù.
mainWindow.Create(NULL,
WS_OVERLAPPEDWINDOW, 0, L"main");
MoveWindow(mainWindow.win_hWnd, 10, 10,
640, 480, TRUE);
±×·¯³ª ¸ÞÀÎ À©µµ¿ì´Â ±× Ư¼º»ó ÀÌÈÄ¿¡µµ ¿©·¯ °¡Áö È®Àå ½ºÅ¸ÀÏÀÌ ÇÊ¿äÇÏ°í À§Ä¡³ª Å©±â¸¦ ÀúÀå ¹× º¹±¸Çϴ ó¸®µµ
ÇÊ¿äÇØ Create¸¦ ¹Ì¸® ÀçÁ¤ÀÇÇØ µÎ¾ú´Ù. »ý¼º ¸Þ¼µå¸¦
Àß Á¤ÀÇÇØ µÎ¸é WinMain¿¡¼´Â mainWindow.Create()
È£Ã⸸À¸·Î ¸ÞÀÎ À©µµ¿ì¸¦ ½±°Ô »ý¼ºÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½ µÎ ¹®ÀåÀ» Àß ±¸ºÐÇÏÀÚ.
CMainWindow mainWindow; //
À©µµ¿ì°¡ µÉ °´Ã¼¸¦ ¼±¾ðÇÑ´Ù.
mainWindow.Create(); //
°´Ã¼¸¦ ½ÇÁ¦ À©µµ¿ì·Î »ý¼ºÇÑ´Ù.
CWindow ÆÄ»ý Ŭ·¡½º°¡ À©µµ¿ì¸¦ Ç¥ÇöÇÏÁö¸¸ °´Ã¼ ÀÚü°¡ À©µµ¿ì´Â
¾Æ´Ï´Ù. °´Ã¼´Â ¾îµð±îÁö³ª ¸Þ¸ð¸®¿¡ »ý¼ºµÈ ¸â¹öÀÇ ÁýÇÕÀÏ »ÓÀ̸ç ÀÌ °´Ã¼°¡ ¿î¿µÃ¼Á¦°¡ ÀÎÁ¤ÇÏ´Â À©µµ¿ì°¡
µÇ·Á¸é °á±¹ CreateWindow ÇÔ¼ö¸¦ È£ÃâÇØ¾ß ÇÑ´Ù. ÀÌ
ÀÛ¾÷À» Create ¸Þ¼µå°¡ ´ã´çÇÑ´Ù.
Áï, ¸ðµç À©µµ¿ì °´Ã¼´Â ¾î´À ½ÃÁ¡À̵簣¿¡ Create¸¦ È£ÃâÇؾ߸¸ À©µµ¿ì·Î µ¿ÀÛÇÑ´Ù. ¶ÇÇÑ Create´Â À©µµ¿ì Ŭ·¡½º¸¦ Ç×»ó CWindow·Î ÁöÁ¤ÇÏ¿© CWindowProcÀ¸·Î ¸Þ½ÃÁö¸¦ º¸³½´Ù. À̶§ CreateWindowÀÇ ¸¶Áö¸· Àμö·Î this¸¦ Àü´ÞÇÏ¿© »ý¼ºÇÒ À©µµ¿ì¿Í
°´Ã¼ ÀÚ½ÅÀÇ °ü°è¸¦ Çü¼ºÇÏ´Â Áß¿äÇÑ ¿ªÇÒÀ» ÇÑ´Ù. »ý¼ºÇÒ ¶§ °´Ã¼ ¸Ê¿¡ µî·ÏÇØ¾ß ÀÌÈĺÎÅÍ OnMessage¸¦ ÅëÇØ ¸Þ½ÃÁö¸¦ ¹ÞÀ» ¼ö ÀÖ´Ù.
OnMessage´Â ÀÚÁÖ »ç¿ëÇÏ´Â ´ëºÎºÐÀÇ ¸Þ½ÃÁö¸¦ ó¸®Çϸç À©µµ¿ìÀÇ
¸ðµç ¸Þ½ÃÁö¸¦ ´Ù ó¸®ÇÏÁö´Â ¾Ê´Â´Ù. ¸¸¾à CWindow°¡
Çڵ鷯¸¦ Á¦°øÇÏÁö ¾Ê´Â ¸Þ½ÃÁö¸¦ Á÷Á¢ ó¸®ÇÏ·Á¸é OnMessage¸¦ ÀçÁ¤ÀÇÇÏ¿© ¿øÇÏ´Â ¸Þ½ÃÁö¸¦ ó¸®Çϸé
µÈ´Ù. ¸ÞÀÎ À©µµ¿ì´Â WM_RBUTTONDOWN ¸Þ½ÃÁö¸¦
¹Þ¾ÒÀ» ¶§ ¸Þ½ÃÁö ¹Ú½º¸¦ ¿¸ç ÀÌ ¸Þ½ÃÁö¸¦ ó¸®ÇÑ ÈÄ ¹Ù·Î ¸®ÅÏÇÑ´Ù.
±× ¿ÜÀÇ ¸Þ½ÃÁö´Â ¸ðµÎ CWindow::OnMessage·Î º¸³» ¹Ì¸®
Á¤ÀÇÇÑ °¡»ó ¸Þ½ÃÁö Çڵ鷯¸¦ È£ÃâÇÑ´Ù. ¸¸¾à CWindow°¡
Á¤ÀÇÇÑ ¸Þ½ÃÁö ¿Ü¿¡ ´Ù¸¥ ¸Þ½ÃÁö¸¦ ó¸®ÇÒ ÀÏÀÌ ¾ø´Ù¸é OnMessage¸¦ ±»ÀÌ ÀçÁ¤ÀÇÇÒ ÇÊ¿ä´Â ¾ø´Ù. CClockÀÌ ±×·¸°Ô µÇ¾î ÀÖÀ¸¸ç ´ëºÎºÐÀÇ À§Á¬Àº CWindowÀÇ
Çڵ鷯¸¸À¸·Îµµ ÃæºÐÇÏ´Ù.
¸ÞÀÎ À©µµ¿ìÀÇ OnCreate¿¡¼ childClock
À©µµ¿ì¸¦ »ý¼ºÇÑ´Ù. Â÷Àϵå´Â º¸Åë ºÎ¸ðÀÇ OnCreate¿¡¼
»ý¼ºÇÑ´Ù. À§Ä¡¸¦ Àû´çÈ÷ Àâ°í ¹è°æ»öÀº ³ë¶õ»öÀ¸·Î ÁöÁ¤Çß´Ù.
OnDestroy´Â À©µµ¿ì Æı«½ÃÀÇ µÞÁ¤¸®¸¦ Ç쵂 ¸ÞÀÎ À©µµ¿ì´Â PostQuitMessage¸¦
È£ÃâÇÏ¿© ¸Þ½ÃÁö ·çÇÁ¸¦ ¹þ¾î³ªµµ·Ï ÇØ¾ß ÇÑ´Ù. OnKeyDownÀº ´ÙÀ½ Ç׿¡¼ ¿¬±¸ÇØ º¼ Å×½ºÆ® ÄÚµåÀÌ´Ù.
CClock À©µµ¿ì´Â ȸ鿡 ½Ã°è¸¦ Ãâ·ÂÇÏ°í ÁÖ±âÀûÀ¸·Î °»½ÅÇÑ´Ù. OnCreate¿¡¼ 1ÃÊ ÁÖ±âÀÇ Å¸À̸Ӹ¦ ¼³Ä¡ÇÏ°í OnDestroy¿¡¼ ŸÀ̸Ӹ¦ Æı«ÇÑ´Ù. OnTimer¿¡¼ ÇöÀç ½Ã°£À»
Á¶»çÇÏ¿© sTime ¹öÆÛ¿¡ ±â·ÏÇϸç OnDraw´Â Á¶»çÇØ
³õÀº ½Ã°£À» ȸ鿡 Ãâ·ÂÇÑ´Ù. ´õºí¹öÆÛ¸µ 󸮴 CWindow::OnPaint°¡
¾Ë¾Æ¼ ÇÏ°í ÀÖÀ¸¹Ç·Î ±×¸®±â¸¸ ÇÏ¸é µÈ´Ù. 4°³ÀÇ ¸Þ½ÃÁö¸¦ ó¸®ÇÏ¿© ¸ÚÁø ½Ã°è¸¦ ¸¸µé¾ú´Ù.
¿©±â±îÁö ¸ÞÀÎ À©µµ¿ì¿Í ½Ã°è À©µµ¿ì¸¦ Á¤ÀÇÇß´Ù. ÀÌÁ¦ µÎ À©µµ¿ì¸¦
»ç¿ëÇÏ¿© ÇÁ·Î±×·¥À» ¸¸µç´Ù. Ŭ·¡½º°¡ ´ëºÎºÐÀÇ Ã³¸®¸¦ ´Ù ÇÏ°í ÀÖ¾î WinMainÀº
º°·Î ÇÒ°Ô ¾ø´Ù. ¸ÞÀÎ À©µµ¿ì¸¦ »ý¼ºÇÏ¿© º¸ÀÌ°í ¸Þ½ÃÁö ·çÇÁ¸¸ µ¹¸®¸é ±×¸¸ÀÌ´Ù. ÇÁ·Î±×·¥ Á¾·á½Ã °´Ã¼ ¸ÊÀ» ÇØÁ¦ÇÏ°í ³ª°£´Ù.
¿©±â±îÁöÀÇ °úÁ¤Àº ±æ¾úÁö¸¸ ¾îÂ÷ÇÇ CWindow´Â ´õ ¼Õµ¨°Ô ¾ø´Ù. »õ·Î¿î À©µµ¿ì¸¦ ´õ ¸¸µé·Á¸é CClockÀ» ¸¸µéµíÀÌ ¸î ÁÙÀÇ ¼±¾ð¹®°ú
¸Þ½ÃÁö Çڵ鷯¸¸ ¸¸µé¸é µÈ´Ù. ÀÌ·¡¼ °´Ã¼ ÁöÇâÀÌ ÁÁÀº °ÍÀ̸ç ÀÏ´Ü Ã¼°è°¡ ±¸ÃàµÇ¸é »ý»ê¼ºÀÌ ¾öû³ª°Ô
³ôÀº °ÍÀÌ´Ù. ½ÇÇàÇØ º¸ÀÚ.
¸ÞÀÎ À©µµ¿ì¿Í ³ë¶õ ½Ã°è À©µµ¿ì°¡ Àß »ý¼ºµÇ¸ç ÈǸ¢ÇÏ°Ô
µ¿ÀÛÇÑ´Ù. ÀÌ ½Ç½ÀÀ» ÅëÇØ °´Ã¼ ÁöÇâÀÇ ÆÄ¿ö¸¦ ½Ç°¨ÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ
³»ÀÏ Ãâ±ÙÇØ¾ß Çϴµ¥ »õº® 4½Ã±îÁö Àáµµ ¸øÀÚ°í °Á¸¦ ¾²°í ÀÖÀ½µµ ¾Ë ¼ö ÀÖ´Ù. ȸ»ç¸¦ ´Ù´Ï´Ù º¸¸é ¾î¿ ¼ö ¾ø´Â ÀÏÀÌ´Ù.
KFC¸¦ ÀÌ¿ëÇÑ Ã¹¹ø° ¿¹Á¦¸¦ ¿Ï¼ºÇßÀ¸¸ç Àß ½ÇÇàµÇ´Â °Íµµ È®ÀÎÇØ
º¸¾Ò´Ù. ÀÌÁ¦ À©µµ¿ì°¡ »ý¼º ¹× Æı«µÇ´Â ÀýÂ÷¸¦ Çϳª¾¿ Ž±¸ÇØ º¸ÀÚ.
ÀÌ ¿¹Á¦ÀÇ ÄÚµå ÇÑÁÙ ÇÑÁÙÀÌ ´Ù Áß¿äÇÑ Àǹ̰¡ ÀÖ¾î °¢ ÄÚµåÀÇ ¿ªÇÒÀ» ºÐ¸íÈ÷ ÀÌÇØÇØ¾ß ÇÑ´Ù.
ÀÌ ÇÁ·Î±×·¥Àº ½ÇÇàÁß¿¡ ¾î¶² »ç°ÇÀÌ ÀϾ´ÂÁö »ìÆ캸±â À§ÇØ WM_KEYDOWN¿¡
À©µµ¿ì¸¦ »ý¼º ¹× Æı«ÇÏ´Â Å×½ºÆ® Äڵ带 ÀÛ¼ºÇØ µÎ¾ú´Ù. ¶ÇÇÑ À©µµ¿ì »ý¸í Áֱ⸶´Ù µð¹ö±ë ¸Þ½ÃÁö¸¦
Ãâ·ÂÇÏ¿© ³»ºÎ µ¿ÀÛÀ» È®ÀÎÇÑ´Ù. µð¹ö±×
¸ðµå·Î ¿¹Á¦¸¦ ½ÇÇàÇÑ ÈÄ Output âÀ¸·Î Ãâ·ÂµÇ´Â ¸Þ½ÃÁö¸¦ º¸°í µð¹ö°Å·Î ´Ü°è ½ÇÇàÇØ °¡¸ç ¾î¶²
È帧À» Ÿ´ÂÁö ºÐ¼®ÇØ º¸ÀÚ.
ÀÌ ¿¹Á¦´Â mainWindow¿Í childClockÀ»
Á¤ÀûÀ¸·Î ¼±¾ðÇÑ´Ù. Á¤Àû °´Ã¼´Â ½ÇÇà Á÷ÈÄ¿¡ ¹Ù·Î »ý¼ºµÇ´Âµ¥ À̶§ ´ÙÀ½ ÀÏ·ÃÀÇ ¸Þ½ÃÁö°¡ Ãâ·ÂµÈ´Ù. °¢ ¸Þ½ÃÁö°¡ ¹ß»ýÇÏ´Â ÀÌÀ¯¿¡
´ëÇØ ¿·¿¡ ÁÖ¼®À» ´Þ¾Æ µÎ¾ú´Ù.
CWindow »ý¼ºÀÚ È£Ãâ //
mainWindow °´Ã¼ »ý¼º
À©µµ¿ì Ŭ·¡½º µî·Ï, À©µµ¿ì ¸Ê ÃʱâÈ //
À©µµ¿ì ¸Ê ÃʱâÈ
CWindow »ý¼ºÀÚ È£Ãâ //
childClock °´Ã¼ »ý¼º
µÎ º¯¼ö°¡ »ý¼ºµÇ¸é¼ »ý¼ºÀÚ°¡ µÎ ¹ø È£ÃâµÇ¾ú´Ù. óÀ½ È£ÃâÇÒ ¶§
À©µµ¿ì Ŭ·¡½º¿Í À©µµ¿ì ¸ÊÀ» ÃʱâÈÇÏ°í µÎ ¹ø° »ý¼ºÀÚ È£Ãâ½Ã¿¡´Â À©µµ¿ì ¸ÊÀÌ ÀÌ¹Ì ÃʱâȵǾî ÀÖ¾î ÀçÃʱâÈÇÏÁö ¾Ê´Â´Ù. ¿©±â±îÁö´Â º¯¼ö¸¸ »ý¼ºÇß´Ù. ´ÙÀ½Àº WinMainÀ¸·Î ÁøÀÔÇÏ¿© mainWindow.Create()¸¦ È£ÃâÇϸç
¿©±â¼ CreateWindow·Î ¸ÞÀÎ À©µµ¿ì¸¦ »ý¼ºÇÑ´Ù.
CreateWindow(L"CWindow",
L"main", WS_OVERLAPPEDWINDOW,
10,
10, 640, 480, nullptr, (HMENU)0, g_hInst, this);
À©µµ¿ì Ŭ·¡½º¸íÀÌ CWindow·Î °íÁ¤µÇ¾î ÀÖÀ½À» À¯ÀÇÇÏÀÚ. ÀÌÈÄÀÇ ¸ðµç À©µµ¿ì´Â ¼Ò¼ÓÀÌ °°´Ù. ±×¸®°í ¸¶Áö¸· Àμö this°¡ Áß¿äÇÑ ¿ªÇÒÀ» ÇÑ´Ù. À©µµ¿ì¸¦ »ý¼ºÇÒ ¶§ ÆĶó¹ÌÅÍ·Î À©µµ¿ì
°´Ã¼ ÀÚ½ÅÀÇ Æ÷ÀÎÅ͸¦ Àü´ÞÇÑ´Ù. À©µµ¿ì »ý¼ºÁß¿¡ ´ÙÀ½ µÎ ¸Þ½Ã°¡ Ãâ·ÂµÇ´Âµ¥ ÀÌ È帧À» µû¶ó°¡ º¸ÀÚ.
»õ À©µµ¿ì Ãß°¡. °´Ã¼ : b7854c - À©µµ¿ì 390620
MainWindow OnCreate. hWnd = 390620
À©µµ¿ì¸¦ »ý¼ºÇßÀ¸´Ï »ý¼º °ü·Ã ¸Þ½ÃÁö°¡ À©µµ¿ì ÇÁ·Î½ÃÀú·Î Àü´ÞµÈ´Ù. ¸ðµç
À©µµ¿ì´Â CWindowProcÀ¸·Î ¸Þ½ÃÁö¸¦ º¸³½´Ù. ÃÖÃÊ
pWinMapÀº ºñ¾î ÀÖÀ¸¸ç ¾Æ¹« À©µµ¿ìµµ µî·ÏµÇ¾î ÀÖÁö ¾Ê´Ù. À̶§´Â
À©µµ¿ì¸¦ ¸Ê¿¡ ¸ÕÀú µî·ÏÇÑ´Ù.
ÃÖÃÊ Àü´ÞµÇ´Â ¸Þ½ÃÁö´Â WM_NCCREATEÀ̸ç À̶§ ŸÀÌƲ¹Ù, °æ°è¼± µîÀ» »ý¼ºÇÑ´Ù. ÀÌ ¸Þ½ÃÁöÀÇ lParamÀ» ÅëÇØ ÆĶó¹ÌÅÍ°¡ Àü´ÞµÇ´Âµ¥ CreateWindow È£Ãâ½Ã
Àü´ÞÇÑ this, Áï °´Ã¼ÀÇ Æ÷ÀÎÅ͸¦ ±¸ÇÒ ¼ö ÀÖ´Ù. ÀÌ
Æ÷ÀÎÅÍ¿Í ÇÚµéÀ» ¸Ê¿¡ ÀúÀåÇÏ¿© ÀÌÈĺÎÅÍ´Â ¸Ê¿¡¼ °´Ã¼¸¦ ãÀ» ¼ö ÀÖµµ·Ï ÁغñÇÑ´Ù.
À©µµ¿ì ½ºÅ¸ÀÏ¿¡ µû¶ó ¸Þ½ÃÁöÀÇ Á¾·ù°¡ Á¶±Ý ´Þ¶óÁö´Âµ¥ WS_THICKFRAME
½ºÅ¸ÀÏÀÌ ÀÖÀ» ¶§´Â Å©±â¸¦ °áÁ¤Çϱâ À§ÇØ WM_NCCREATEº¸´Ù WM_GETMINMAXINFO ¸Þ½ÃÁö°¡ ¸ÕÀú ¿Â´Ù. ÀÌ ¶§´Â this¸¦ ¾Ë ¼ö ¾øÀ¸¹Ç·Î ÀÌ°Ç DefWindowProcÀ¸·Î Á¶¿ëÇØ
º¸³» Áà¾ß ÇÑ´Ù. ÀÏ¹Ý Â÷Àϵå´Â Ç×»ó WM_NCCREATE°¡
¸ÕÀú ¿À¹Ç·Î this¸¦ ¸Ê¿¡ µî·ÏÇØ ¹ö¸®¸é µÈ´Ù.
(*pWinMap)[hWnd] = pWin;
pWin->win_hWnd = hWnd;
¸Ê¿¡ À©µµ¿ì¸¦ µî·ÏÇÏ´Â Áï½Ã °´Ã¼ÀÇ win_hWnd¿¡ À©µµ¿ì ÇÚµéÀ»
´ëÀÔÇÑ´Ù. ÀÌÈÄÀÇ ¸Þ½ÃÁö ó¸® ·çƾ¿¡¼ °´Ã¼´Â win_hWnd¸¦
ÅëÇØ À©µµ¿ì ÇÚµéÀ» ãÀ¸¹Ç·Î ÀÌ Ã³¸®°¡ ¹Ýµå½Ã ÇÊ¿äÇÏ´Ù. ÇÚµé·ÎºÎÅÍ °´Ã¼¸¦ ãÀ» ¶§´Â ¸ÊÀ» µÚÁö°í °´Ã¼·ÎºÎÅÍ
ÇÚµéÀ» ãÀ» ¶§´Â win_hWnd¸¦ ÀÐ¾î ¾ðÁ¦µçÁö ¼·Î¸¦ ãÀ» ¼ö ÀÖ´Ù.
´ÙÀ½À¸·Î WM_NCCALCSIZE ¸Þ½ÃÁö°¡ ¿À´Âµ¥ À̶§´Â ¸Ê¿¡ À̹Ì
À©µµ¿ì°¡ µî·ÏµÇ¾î ÀÖÀ¸¸ç ¸ÊÀ» ÅëÇØ À©µµ¿ì °´Ã¼¸¦ ã´Â´Ù. °´Ã¼¸¦ ãÀº ÈÄ OnMessage °¡»ó ÇÔ¼ö¸¦ È£ÃâÇÏ¿© °´Ã¼ ½º½º·Î ¸Þ½ÃÁö¸¦ ó¸®Çϵµ·Ï ÇÑ´Ù. ´ÙÀ½À¸·Î
WM_CREATE°¡ ³¯¶ó¿À¸ç À̶§µµ ¸ÊÀ» ÅëÇØ Çڵ鷯¸¦ ã´Â´Ù.
¸ÞÀÎ À©µµ¿ìÀÇ OnCreate Çڵ鷯°¡ È£ÃâµÇ¾î »ý¼º½Ã Ãʱâȸ¦ ó¸®ÇÑ´Ù. Create¿Í OnCreate¸¦ Çò°¥¸®Áö ¸»ÀÚ. Create´Â À©µµ¿ì¸¦ ¸¸µé¶ó´Â ¸í·ÉÀÌ°í OnCreate´Â Áö±Ý
¸¸µé°í ÀÖÀ¸´Ï ÇÊ¿äÇÑ Ãʱâȸ¦ ÇÏ´Â °÷ÀÌ´Ù. ¸ÞÀÎ À©µµ¿ì´Â OnCreate¿¡¼
childClockÀ» »ý¼ºÇÑ´Ù. childClockÀº Create¸¦ ÀçÁ¤ÀÇÇÏÁö ¾Ê¾Æ CWindow·ÎºÎÅÍ »ó¼Ó¹ÞÀº Create¸¦ È£ÃâÇÑ´Ù.
CreateWindow(TEXT("CWindow"), title,
style,
0,
0, 0, 0, hParent, (HMENU)(ULONG_PTR)child_id, g_hInst, this);
À̶§µµ ¸¶Áö¸· Àμö·Î this°¡ Àü´ÞµÊÀ» À¯ÀÇÇÏÀÚ. »ý¼º½Ã °´Ã¼ Æ÷ÀÎÅ͸¦ Àü´ÞÇØ¾ß ¸Ê¿¡ µî·ÏÇÒ ¼ö ÀÖ°í ÀÌÈÄÀÇ ¸Þ½ÃÁö¸¦ °´Ã¼°¡ ¹ÞÀ» ¼ö ÀÖ´Ù. À̶§ ´ÙÀ½ µÎ ¸Þ½ÃÁö°¡ Ãâ·ÂµÈ´Ù.
»õ À©µµ¿ì Ãß°¡. °´Ã¼ : b78438 - À©µµ¿ì 120976
Clock OnCreate. hWnd = 120976
childClockÀº ÃÖÃÊ WM_NCCREATE ¸Þ½ÃÁö¸¦ ¹ÞÀ¸¸ç À̶§ ¸Ê¿¡ ÀÚ½ÅÀ» µî·ÏÇÑ´Ù. ¿¬À̾î Àü´ÞµÇ´Â WM_NCCALCSIZE, WM_CREATE´Â °´Ã¼·Î
Àü´ÞµÈ´Ù. CClockÀÇ OnCreate¿¡¼ ŸÀ̸Ӹ¦ µî·ÏÇÏ¿©
ÁÖ±âÀûÀ¸·Î ½Ã°£À» Ãâ·ÂÇÑ´Ù.
¿©±â±îÁö ÁøÇàÇϸé ÇÁ·Î±×·¥ ÃʱâÈ°¡ ¿Ï·áµÈ °ÍÀÌ´Ù. ÀÌÈÄ µÎ À©µµ¿ì´Â
WM_SIZE, WM_MOVE, WM_TIMER µîÀÇ ¸Þ½ÃÁö¸¦ °è¼Ó ¹Þ´Â´Ù. À̶§¸¶´Ù CWindowProcÀ¸·Î ¸Þ½ÃÁö°¡ Àü´ÞµÇ¸ç ¸ÊÀ» ÅëÇØ ¸Þ½ÃÁöÀÇ
¼ö½Åó¸¦ ¾Ë¾Æ³»°í °´Ã¼ÀÇ OnMessage¸¦ °ÅÃÄ ¸Þ½ÃÁö Çڵ鷯¸¦ È£ÃâÇÏ¸ç ½ÇÇàµÈ´Ù.
À©µµ¿ì¸¦ »ý¼ºÇÏ´Â °Í¸¸ÅÀ̳ª Æı«ÇÏ´Â ÀýÂ÷µµ Áß¿äÇÏ´Ù. Æı«½Ã ¸Þ½ÃÁö¸¦
Á¦´ë·Î ó¸®ÇØ¾ß Â±âµµ ³²Áö ¾ÊÀ¸¸ç ¸¶Áö¸· Á¤¸® ÀÛ¾÷À» ¿øÈ°È÷ ¼öÇàÇÒ ¼ö ÀÖ´Ù. OnKeyDown¿¡
À©µµ¿ì¸¦ Æı«ÇÏ´Â Äڵ带 ¹Ì¸® ÀÛ¼ºÇØ µÎ¾ú´Âµ¥ 2¹øÀ» ´·¯ childClockÀ»
Æı«ÇØ º¸ÀÚ. À̶§ ´ÙÀ½ µÎ ÁÙÀ» ½ÇÇàÇÑ´Ù.
DestroyWindow(childClock.win_hWnd);
childClock.Dispose();
À©µµ¿ì¸¦ Æı«ÇÒ ¶§´Â DestoryWindow¸¦ È£ÃâÇÑ´Ù. À̶§ WM_DESTROY¿Í ÀÏ·ÃÀÇ Æı« ¸Þ½ÃÁö°¡ Àü´ÞµÇ´Âµ¥ OnDestroy¿¡¼ ŸÀ̸Ӹ¦ ÇØÁ¦ÇÑ´Ù. À©µµ¿ì Æı«ÁßÀÇ ¸ðµç ¸Þ½ÃÁö´Â
SendMessage·Î º¸³»Áö¹Ç·Î DestroyWindow ¸®ÅÏ
ÈÄ¿¡´Â ¸ðµç Á¤¸®°¡ ³¡³ª°í ´õ ó¸®ÇÒ ¸Þ½ÃÁö°¡ ¾ø´Ù.
À©µµ¿ì¸¦ ¿ÏÀüÈ÷ Æı«ÇÑ ÈÄ Dispose ¸Þ¼µå¸¦ È£ÃâÇÏ¿© ¸Ê¿¡¼µµ
À©µµ¿ì¸¦ Á¦°ÅÇÑ´Ù. ¹è°æ ºê·¯½Ã¿Í ´õºí¹öÆÛ¸µ ºñÆ®¸ÊÀ» ÇØÁ¦ÇÏ°í ¸Ê¿¡¼ À©µµ¿ì ÇÚµéÀ» Á¦°ÅÇÑ´Ù. ÀÌ °úÁ¤¿¡¼ Ãâ·ÂµÇ´Â µð¹ö°Å
¸Þ½ÃÁö´Â ´ÙÀ½°ú °°´Ù. À©µµ¿ì Æı«, Á¤¸®, ¸Ê Á¦°Å°¡ ¼øÁ¶·Ó°Ô Àß Ã³¸®µÊÀ» ¾Ë ¼ö ÀÖ´Ù.
Clock OnDestroy. hWnd = 120976
CWindow Dispose È£Ãâ
120976 À©µµ¿ì Á¦°Å
À©µµ¿ì Æı«½Ã ÀÌ ¸ðµç 󸮰¡ Á¤»óÀûÀ¸·Î ´Ù 󸮵Ǿî¾ß ÇÑ´Ù.
OnDestroy°¡ ¿ÀÁö ¾ÊÀ¸¸é ŸÀ̸ӳª Â÷Àϵå Á¦°Å, ½ÇÇà Á¤º¸ ÀúÀå µîÀÌ Ã³¸®µÇÁö ¾ÊÀ¸¸ç
°´Ã¼ ¸Ê¿¡¼ Á¦°ÅÇÏÁö ¾ÊÀ¸¸é ºÒÇÊ¿äÇÑ ¾²·¹±â°¡ ³²¾Æ Â÷ÈÄ ¾î¶² ºÎÀÛ¿ëÀ» ÀÏÀ¸Å³Áö ¾Ë ¼ö ¾ø´Ù. À©µµ¿ì
Æı«¸¦ ´ÙÀ½°ú °°ÀÌ Çؼ´Â ¾ÈµÈ´Ù.
childClock.Dispose();
DestroyWindow(childClock.win_hWnd);
Á» ÀÖ´Ù Æı«ÇÒ À©µµ¿ì¶ó°í Çؼ Dispose¸¦ ¸ÕÀú È£ÃâÇØ ¹ö¸®¸é
Æı«ÁßÀÇ ¸Þ½ÃÁö¸¦ ó¸®ÇÒ ¼ö ¾ø¾î ´Ù¿îµÈ´Ù. childClockÀº Á¤ÀûÀ¸·Î ¼±¾ðµÈ º¯¼öÀ̹ǷΠÀÌ º¯¼ö¸¦
Á¦°ÅÇÒ ÇÊ¿ä´Â ¾ø´Ù. ÀÌ À©µµ¿ì¸¦ ´Ù½Ã Àç»ý¼ºÇϸé ÃÖÃÊ ½ÇÇà½Ã¿Í ¶È°°Àº ÃʱâÈ °úÁ¤À» °ÅÄ£´Ù. Å°º¸µåÀÇ 1Å°¸¦ ´©¸£¸é ´Ù½Ã »ý¼ºÇϴµ¥ Á¤»óÀûÀ¸·Î Àß »ý¼ºµÊÀ» ¾Ë
¼ö ÀÖ´Ù.
´ÙÀ½Àº À©µµ¿ì °´Ã¼¸¦ µ¿ÀûÀ¸·Î »ý¼º ¹× Æı«ÇØ º¸ÀÚ. ½ÇÇàÁß¿¡µµ À©µµ¿ì´Â
¾ó¸¶µçÁö »ý¼º, Æı« °¡´ÉÇØ¾ß ÇÑ´Ù. ÀÌ Ã³¸®¸¦ À§ÇØ CClock * ŸÀÔÀÇ pClock º¯¼ö¸¦ ¼±¾ðÇØ µÎ¾úÀ¸¸ç °ü·Ã ÄÚµå´Â
OnKeyDownÀÇ 3¹ø°ú 4¹ø¿¡ ÀÖ´Ù. »ý¼º ÄÚµåºÎÅÍ º¸ÀÚ.
pClock = new CClock();
pClock->Create(win_hWnd);
pClock->SetBackColor(RGB(0, 255, 0));
MoveWindow(pClock->win_hWnd, 10, 150, 300, 100,
TRUE);
new ¿¬»êÀÚ·Î °´Ã¼¸¦ ¸ÕÀú »ý¼ºÇÏ°í Create ¸Þ¼µå¸¦ È£ÃâÇÏ¿© À©µµ¿ì¸¦ »ý¼ºÇÑ´Ù. °´Ã¼¸¦ ¸ÕÀú »ý¼ºÇÑ
ÈÄ À©µµ¿ì¸¦ »ý¼ºÇØ¾ß ÇÑ´Ù. ±×¸®°í ¹è°æ»öÀ̳ª À§Ä¡ ÁöÁ¤ µîÀÇ Ãß°¡ ÀÛ¾÷À» ó¸®ÇÑ´Ù. À̶§ Ãâ·ÂµÇ´Â ¸Þ½ÃÁö´Â ´ÙÀ½°ú °°´Ù.
CWindow »ý¼ºÀÚ È£Ãâ
»õ À©µµ¿ì Ãß°¡. °´Ã¼ : e19088 - À©µµ¿ì 505ce
Clock OnCreate. hWnd = 505ce
°´Ã¼ »ý¼ºÀÚ°¡ È£ÃâµÇ¸ç Create È£Ãâ½Ã WM_NCCREATE, WM_CREATE ¸Þ½ÃÁö°¡ Àü´ÞµÇ´Â °úÁ¤¿¡¼ À©µµ¿ì ¸Ê¿¡ µî·ÏÇÏ°í OnCreate¿¡¼ ŸÀ̸Ӹ¦ »ý¼ºÇÏ¿© ½Ã°£À» Ãâ·ÂÇÑ´Ù. µÎ °³ÀÇ Â÷Àϵå À©µµ¿ì°¡ ¾Æ·¡,
À§·Î ³ª¶õÈ÷ Àß ½ÇÇàµÈ´Ù.
À̹ø¿¡´Â 4Å°¸¦ ´·¯ Æı«ÇØ º¸ÀÚ.
µ¿ÀûÀ¸·Î »ý¼ºÇÑ À©µµ¿ì´Â ´Ù »ç¿ëÇÑ ÈÄ ¾ðÁ¦µçÁö Æı«ÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ÄÚµå´Â ´ÙÀ½°ú
°°´Ù.
DestroyWindow(pClock->win_hWnd);
delete pClock;
pClock = nullptr;
Æı«ÇÒ ¶§´Â À©µµ¿ì ¸ÕÀú Æı«ÇÏ°í °´Ã¼¸¦ Á¦°ÅÇÑ´Ù. Æı«Áß¿¡µµ ¸Þ½ÃÁö´Â
¹Þ¾Æ¾ß Á¦´ë·Î Á¤¸®¸¦ ÇÒ ¼ö ÀÖÀ¸¹Ç·Î ±× µ¿¾È¿¡´Â °´Ã¼°¡ ³²¾Æ ÀÖ¾î¾ß ÇÑ´Ù. µ¿ÀûÀ¸·Î ¸¸µç °´Ã¼ÀÌ´Ï
»èÁ¦ÇÒ ¶§´Â ´ç¿¬È÷ deleteÀ̸ç À̶§ Æı«ÀÚ¸¦ °æÀ¯ÇÏ¿© Dispose¸¦
È£ÃâÇÏ¿© °´Ã¼ ¸Ê¿¡¼ ÀÚ½ÅÀ» Á¦°ÅÇÑ´Ù.
Æ®·¹À̽º ¸Þ½ÃÁö´Â ´ÙÀ½°ú °°´Ù.
Clock OnDestroy. hWnd = 505ce
CWindow Dispose È£Ãâ
505ce À©µµ¿ì Á¦°Å
ÀÌ ¼ø¼´ë·Î È£ÃâµÇ¾î À©µµ¿ì, °´Ã¼ ¼øÀ¸·Î Æı«ÇÏ°í ¸Ê¿¡¼µµ Á¦°ÅÇÑ´Ù. »ý¼ºÇÒ ¶§´Â °´Ã¼, À©µµ¿ì ¼øÀÌ°í Æı«ÇÒ ¶§´Â ¹Ý´ë·Î À©µµ¿ì, °´Ã¼ ¼øÀÌ´Ù. °´Ã¼°¡ À©µµ¿ì¸¦ ·¡ÇÎÇϹǷΠ¸ÕÀú »ý¼ºµÇ¾î¾ß ÇÏ°í ¿ÏÀüÈ÷
Æı«µÉ ¶§±îÁö ³²¾Æ ÀÖ¾î¾ß ÇÑ´Ù.
C++Àº »ý¼ºÀÚ¿¡¼ ÃʱâÈ, Æı«ÀÚ¿¡¼
Á¤¸®¸¦ ÀÚµ¿À¸·Î ¼öÇàÇÒ ¼ö Àִµ¥ ¿Ö »ý¼º, Æı«°¡ ¼öµ¿À¸·Î µÇ¾î ÀÖÀ»±î? »ç½Ç ÀÌ·¸°Ôµµ ÇÒ ¼ö ÀÖÀ¸¸ç MFC´Â °ú¿¬ ±×·¸°Ô µÇ¾î ÀÖ´Ù. ±×·¯³ª ÀÌ·¸°Ô ¸¸µéÀÚ¸é Á¤Àû, µ¿Àû »ý¼º ¹æ¹ý¿¡ ´Þ¶óÁö¸ç Ŭ·¡½º
°èÃþ»ó¿¡¼ »èÁ¦ÇÒ ¶§ÀÇ ¿¹¿Ü 󸮰¡ °úÇÏ°Ô º¹ÀâÇÏ´Ù. Dispose¿¡¼ À©µµ¿ì¸¦ Æı«ÇÏ´Â Äڵ带 ³Ö¾î
º¸ÀÚ.
void CWindow::Dispose() {
Trace(L"CWindow
Dispose È£Ãâ");
if
(win_backBrush != nullptr) DeleteObject(win_backBrush);
if
(win_dblBuffer != nullptr) DeleteObject(win_dblBuffer);
if
(IsWindow(win_hWnd)) { DestroyWindow(win_hWnd); }
....
°´Ã¼ Á¦°Å½Ã À©µµ¿ì¸¦ ¾Ë¾Æ¼ Æı«Çϵµ·Ï ÇØ µÎ¸é Dispose¸¸ È£ÃâÇϸé
µÈ´Ù. ±×·¯³ª ÀÌ ÄÚµå´Â À©µµ¿ì°¡ °èÃþÀ» ÀÌ·ê ¶§ ¹®Á¦°¡ ÀÖ´Ù. »ó¼Ó¹ÞÀº
°¡»ó Æı«ÀÚ´Â ´ÙÇüÀûÀ¸·Î µ¿ÀÛÇÏÁö ¾Ê¾Æ Æı«ÁßÀÇ WM_DESTROY¸¦ ó¸®ÇÒ OnMessage¸¦ Á¤È®È÷ ãÁö ¸øÇÑ´Ù. ÀÌ¿¡ ´ëÇÑ ¹®¹ýÀû À̷п¡ ´ëÇؼ´Â ´ç±Ù 1.2¹öÀü °Á 21-1-»ç Ç×À» Âü°íÇÑ´Ù.
MFC´Â º°µµÀÇ ³»ºÎ ¸â¹ö º¯¼ö¸¦ µÎ¾î ÀÌ·± ¹®Á¦¿¡µµ Àß ´ëóÇÏÁö¸¸
¿Ïº®ÇÑ ÀÚµ¿µµ ¾Æ´Ï¾î¼ ¶§·Î´Â °³¹ßÀÚ°¡ ³»ºÎ ±¸Á¶¸¦ ¾Ë¾Æ¾ß ´ëóÇÒ ¼ö ÀÖ´Â °æ¿ìµµ ÀÖ´Ù. °úÇÏ°Ô ÀÚµ¿ÈÇÏ·Á¸é
¾ðÁ¨°¡´Â ¹Î°¨ÇÑ ¹®Á¦°¡ ¹ß»ýÇÑ´Ù. KFC´Â ±× Á¤µµ±îÁöÀÇ Ã¼°è´Â ±¸ÃàÇÏÁö ¾Ê°í »ý¼º, Æı«ÇÒ ¶§ ¼ø¼¸¸ Àß ÁöÅ°µµ·Ï Çß´Ù. ¾à°£ÀÇ ºÒÆí ´ë½Å ´Ü¼øÇÔÀ»
À¯ÁöÇÏÀÚ´Â ÀÛÀüÀÌ´Ù.
´ÙÀ½Àº °´Ã¼ ¸Ê Á¤¸® Äڵ带 º¸ÀÚ. ¸Ê ÃʱâÈÇÏ´Â ÃÖÃÊÀÇ À©µµ¿ì°¡
»ý¼ºµÉ ¶§ »ý¼ºÀÚ¿¡¼ ó¸®ÇÑ´Ù. ±×·¯³ª Æı«´Â Ŭ·¡½º ¼öÁØ¿¡¼ Àû´çÇÑ ½ÃÁ¡ÀÌ ¾ø´Ù. ¸¶Áö¸· À©µµ¿ì°¡ Á¦°ÅµÉ ¶§ Æı«ÀÚ¿¡¼ ó¸®ÇÒ ¼ö ÀÖÀ» °Í °°Áö¸¸ ±× À©µµ¿ì°¡ ¿ÏÀüÈ÷ Á¦°ÅµÉ¶§±îÁö´Â ³²¾Æ ÀÖ¾î¾ß
ÇÏ´Ï ¾ÈµÈ´Ù. ±×·¡¼ ¸Ê Á¤¸®´Â WinMain¿¡¼ ¸Þ½ÃÁö
·çÇÁ Å»Ãâ Á÷ÈÄ¿¡ Á÷Á¢ ÇÑ´Ù.
delete pWinMap;
pWinMap = nullptr;
¸ÊÀ» Á¦°ÅÇÏ°í nullptr·Î ¸¸µé¾î ºÒ´ÉÈ ½ÃŲ´Ù. ¸ÊÀÌ ¾øÀ¸¸é ´õ ÀÌ»ó °´Ã¼µµ ãÁö ¸øÇÏ°í ¸Þ½ÃÁö¸¦ ó¸®ÇÏÁöµµ ¸øÇÏÁö¸¸ ¸Þ½ÃÁö ·çÇÁ°¡ ³¡³ ½ÃÁ¡¿¡ ´õ Àü´ÞÇÒ
¸Þ½ÃÁöµµ ¾ø¾î ¹®Á¦µÇÁö ¾Ê´Â´Ù. ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ Á¾·áµÇ´Â ½ÃÁ¡À̶ó »ç½Ç ÀÌ ÄÚµå´Â »ý·«Çصµ ¸Þ¸ð¸® ´©¼ö´Â
¾ø´Ù.
Win32´Â ÁÖ¼Ò °ø°£ÀÌ ºÐ¸®µÇ¾î ÀÖ¾î ÇÁ·Î±×·¥ÀÌ Á¾·áµÇ¸é ¸Þ¸ð¸®´Â
¸ðµÎ ¾Ð¼öµÈ´Ù. ´Ù¸¸ ±â´ÉÀû ¿Ï¼ºµµ¸¦ À§ÇØ ±ò²ûÇÏ°Ô Á¤¸®ÇÏ°í ³ª°¡´Â °ÍÀÌ´Ù. ÀÌ Äڵ尡 µé¾î°¡¸é Dispose¿¡¼ ¸ÊÀÌ »ì¾Æ ÀÖ´ÂÁö¸¦ Á¡°ËÇÏ´Â
Á¶°Ç¹®ÀÌ ÇÊ¿äÇØÁø´Ù.
if (pWinMap != nullptr) {
pWinMap->erase(win_hWnd);
Trace(L"%x
À©µµ¿ì Á¦°Å", win_hWnd);
}
mainWindow, childClockÀº Á¤ÀûÀ¸·Î ¼±¾ðµÈ º¯¼ö¿©¼
WinMain Á¾·á Á÷ÈÄ Æı«ÀÚ°¡ È£ÃâµÇ´Âµ¥ À̶§´Â ¸ÊÀÌ Á¸ÀçÇÏÁö ¾ÊÀ¸¹Ç·Î ÀÚ½ÅÀ» ¸Ê¿¡¼ Á¦°ÅÇÒ ÇÊ¿äµµ
¾ø´Ù. ¿ÀÈ÷·Á Á¦°ÅÇÏ·Á°í ÇÏ¸é ±ò²ûÇÏ°Ô Á¤¸®ÇÏ·Á´Ù°¡ ´Ù¿îµÇ¾î ¹ö¸°´Ù.
WinMain ³¡ÀÇ DeleteMap È£Ãâ¹®À» Á¦°ÅÇϸé ÀÌ Á¶°Ç¹®µµ ÇÊ¿ä ¾ø´Ù.
ÀÌ»óÀ¸·Î CWindow Ŭ·¡½º¿Í À©µµ¿ì¸Ê °ü·Ã Äڵ带 ÀÛ¼ºÇÏ°í Å×½ºÆ®±îÁö
¸¶ÃÆ´Ù. ±æÁö ¾ÊÀº ¼Ò½ºÀÌÁö¸¸ ³ª¸§ Á¤±³Çϸç ÀÌ·± Äڵ带 È®º¸Çϱ⠽±Áö ¾Ê¾Ò´Ù. ¿©·¯ ¹øÀÇ ½ÃÇàÂø¿À¿Í °³¼±À» °ÅÃÄ ¾à°£ ºÒÆíÇÏÁö¸¸ ¸»½é¾øµµ·Ï ¸¸µé¾ú´Ù. »ý¼º, Æı« ¼ø¼¸¸ Àß ÁöÅ°¸é µÈ´Ù.