ÀÌÈÄ °è¼Ó ±â´ÉÀ» ´Ã·Á°¥ÅÙµ¥ °¢ ½Ç½ÀÀÇ ½ÃÀÛÁ¡À» ºÐ¸®ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. ƯÁ¤
½Ç½ÀÀ» Á÷Á¢ ÇØ º¸°í ½Í´Ù¸é ±× Á÷Àü±îÁöÀÇ ÇÁ·ÎÁ§Æ®°¡ µû·Î ÀÖ¾î¾ß ÇÑ´Ù. ±×·¡¼ ¸Å ´Ü°è¸¶´Ù ÇÁ·ÎÁ§Æ®ÀÇ
»çº»À» ¶ß°í ¹øÈ£¸¦ ºÙ¿© °¡¸ç ±â´ÉÀ» Ãß°¡Çϱâ·Î ÇÑ´Ù.
SoEnty ÇÁ·ÎÁ§Æ®ÀÇ »çº»À» ¶ß±â Àü¿¡ ¸ðµç ÆÄÀÏÀ» ´Ý°í ¼Ö·ç¼Çµµ
´Ý´Â´Ù. ÀÏÀÏÀÌ ´ÝÀ» ÇÊ¿ä ¾øÀÌ ÆÄÀÏ ÅÇÀÇ Æ˾÷ ¸Þ´º¿¡¼ Close
All Tabs ¸í·ÉÀ» ¼±ÅÃÇϸé Çѹø¿¡ ´Ù ´ÝÀ» ¼ö ÀÖ´Ù.
²À ±×·² ÇÊ¿ä±îÁö´Â ¾øÁö¸¸ ¾Æ¿¹ ºñÁÖ¾ó ½ºÆ©µð¿À¸¦ ¿ÏÀüÈ÷ Á¾·áÇÏ¿© ÇÁ·ÎÁ§Æ®ÀÇ ¶ôÀ» ¿ÏÀüÈ÷ Ç®¾îÁÖ´Â °ÍÀÌ ÁÁ´Ù. ¾Õ ´Ü°è±îÁö ½Ç½ÀÇß´ø SoEnty ÇÁ·ÎÁ§Æ® Æú´õÀÇ À̸§À» SoEnty01·Î º¯°æÇÑ´Ù. ¸Å ´Ü°è¸¶´Ù ¹øÈ£¸¦ ºÙÀ̱â À§ÇؼÀÌ´Ù.
±×¸®°í SoEnty01 Æú´õ¸¦ º¹»çÇÏ¿© SoEnty02 Æú´õ¿¡ »çº»À» ¶á´Ù. ºñÁÖ¾ó ½ºÆ©µð¿À·Î SoEnty02 Æú´õÀÇ SoEnty.sln ÆÄÀÏÀ» ¿¬´Ù. µÎ ÇÁ·ÎÁ§Æ®´Â Áö±Ý ´çÀåÀº °°Áö¸¸
SoEnty02Àº ¾ÕÀ¸·Î Á¡Á¡ ´õ È®ÀåÇÒ °ÍÀÌ´Ù. ¾ÕÀ¸·Î
ÀÌ·± ½ÄÀ¸·Î »çº»À» ¶° ½Ç½ÀÀ» °è¼ÓÇÑ´Ù.
ƯÁ¤ ½Ç½ÀÀ» ´Ù½Ã ¹Ýº¹ÇØ º¸°í ½Í´Ù¸é ÀÌÀü ÇÁ·ÎÁ§Æ®ÀÇ »çº»À» ¶°¼ ½Ç½ÀÇØ º¸¸é µÈ´Ù. ¾î¶² ºÐ¾ß³ª ¹Ýº¹ ½Ç½ÀÀÌ Áß¿äÇϸç À̸¦ À¯µµÇϱâ À§ÇØ ÇÁ·ÎÁ§Æ®ÀÇ »çº» ¶ß°í °¢ ´Ü°èº° ¼Ò½º¸¦ Á¦°øÇÑ´Ù.
SoEnty02 ÇÁ·ÎÁ§Æ®ÀÇ ¸ñ·ÏÀº ÀÌÈÄÀÇ ½Ç½À ÆíÀǸ¦ À§ÇØ ¼Ò½º¸¦
Á¤¸®ÇÏ°í ÇÁ·ÎÁ§Æ® ¿É¼ÇÀ» Á¶Á¤ÇÏ´Â °ÍÀÌ´Ù. ÀÌ Á¤¸®¸¦ Á÷Á¢ ÇÏÁö ¾Ê´õ¶óµµ ¾î¶² °úÁ¤À» °ÅÃÄ Á¤¸®Çß´ÂÁö´Â
¾Ë¾Æ µÎ¾î¾ß ÇÑ´Ù. ÇöÀç ¼Ò½º´Â ¿¡·¯´Â ¾øÁö¸¸ °æ°í°¡ Çϳª ÀÖ´Ù.
ÄÄÆÄÀÏ·¯°¡ ¹º°¡ ÁöÀûÀ» Çϸé À̸¦ ¼öÁ¤ÇÏ´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÏ´Ù. °æ°í°¡
¹ß»ýÇÏ´Â À§Ä¡´Â CClock Ŭ·¡½ºÀÌ´Ù.
class CClock : public CWindow
{
public:
//
ÇÊ¿äÇÑ ¸â¹ö¸¦ Á¤ÀÇÇÑ´Ù.
TCHAR
sTime[128];
sTime ¸â¹ö¸¦ ÃʱâÈÇÏÁö ¾Ê¾Ò´Ù´Â °æ°í°¡ ¹ß»ýÇϴµ¥ ÀÏ´Ü ÃʱâÈÇÏÁö
¾ÊÀº °ÍÀº ¸Â´Ù. ±×·¯³ª sTimeÀº Ãâ·ÂÇϱâ Àü¿¡ ÇöÀç
½Ã°£À¸·Î ÃʱâÈÇϵµ·Ï µÇ¾î ÀÖ¾î »ý¼º ´Ü°è¿¡¼´Â ÃʱâÈÇÏÁö ¾Ê¾Æµµ º° ÁöÀåÀÌ ¾ø´Ù. ¹®Á¦´Â ¾øÁö¸¸ °æ°í¸¦
¹Þ¾ÒÀ¸´Ï Á¶Ä¡¸¦ ÇÏ´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÏ´Ù.
TCHAR sTime[128] = { '\0', };
¹è¿À» ÀüºÎ 0À¸·Î ÃʱâÈÇß´Ù. »ó¼ö
¹®ÀÚ¿ÀÌ ¾Æ´Ï¾î¼ L""·Î´Â ÃʱâÈÇÒ ¼ö ¾ø°í ¹è¿À» ÃʱâÈÇØ¾ß ÇÑ´Ù. ÀÌ °æ°í´Â ÇÕ´çÇÏÁö¸¸ »ý¼ºÀÚ°¡ Ç×»ó ¸ðµç ¸â¹ö¸¦ ÃʱâÈÇÒ ÇÊ¿ä´Â ¾ø´Ù. ±ÍÂúÀº
°æ°í¸¦ ¹ÞÁö ¾ÊÀ¸·Á¸é ´ÙÀ½°ú °°ÀÌ ¼±¾ðÇÏ¸é µÈ´Ù.
#pragma warning (disable:26495)
26495¹ø °æ°í´Â ¾Æ¿¹ ¹«½ÃÇÏ°Ú´Ù´Â ¶æÀ̸ç ÀÌ °æ°í¿¡ ´ëÇؼ´Â ´õ
ÀÌ»ó ÄÄÆÄÀÏ·¯°¡ µýÁö¸¦ °ÉÁö ¾Ê´Â´Ù. Àá½Ã ÈÄ ºñ½ÁÇÑ ¼±¾ð¹®À» ¸ð¾Æ ÇÑ °÷¿¡¼ ÇѲ¨¹ø¿¡ ¼±¾ðÇϱâ·Î ÇÑ´Ù. ¿äÁò C++ ¹®¹ýÀÌ ³Ê¹« ¾ö°ÝÇØÁ®¼ ¾µµ¥¾ø´Â ÀܼҸ®¸¦ ÇÏ´Â °æ¿ì°¡
²Ï ÀÖ´Ù. °¡±ÞÀû °æ°í¸¦ ¹Þ¾ÆµéÀÌµÇ Á¤ ¾Æ´Ï´Ù ½ÍÀº °æ°í´Â ¾ÕÀ¸·Î ¹«½ÃÇϱâ·Î ÇÑ´Ù.
ÇÁ·Î±×·¥À» Àå½ÄÇÏ·Á¸é ¸®¼Ò½º°¡ ÇÊ¿äÇÏ´Ù. ÇÁ·ÎÁ§Æ®¿¡ ¸®¼Ò½º ÆÄÀÏÀ»
Ãß°¡ÇÏ°í ¸ÞÀÎ ¾ÆÀÌÄÜÀ» ¸¸µé¾î º¸ÀÚ. ¼Ö·ç¼Ç Ž»ö±âÀÇ Reource
Files ³ëµå Æ˾÷ ¸Þ´º¿¡¼ Add/New ItemÀ» ¼±ÅÃÇÏ°í Resource/Resource File(.rc) Ç׸ñÀ» ¼±ÅÃÇÏ¿© Resource.rc
ÆÄÀÏÀ» Ãß°¡ÇÑ´Ù.
Resource.rc¿Í resource.h
ÆÄÀÏÀÌ Ãß°¡µÇ°í ÅÖ ºñ¾î ÀÖ´Â ¸®¼Ò½º ºä°¡ ¿¸°´Ù. Æ˾÷ ¸Þ´º¿¡¼ Add Resource¸¦ ¼±ÅÃÇÏ°í IconÀ» Ãß°¡ÇÑ´Ù.
¾ÆÀÌÄÜ Æ÷¸ËÀÌ ³Ê¹« ¸¹ÀÌ »ý¼ºµÇ´Âµ¥ 256 * 256 Å©±â´Â ½ÇÁ¦·Î
Àß ¾²ÀÌÁöµµ ¾Ê°í ¿ë·®¸¸ Â÷ÁöÇϹǷΠ´Ù Áö¿ì°í 32 * 32Å©±â·Î 24ºñÆ®
Æ÷¸Ë Çϳª¸¸ ³²±ä´Ù. ´ÙÀ½°ú °°ÀÌ µðÀÚÀÎÇÑ´Ù. À§Á¬°ú ƼÁ¬ÀÌ
¹è¿µÇ¾î ÀÖ´Â ¸ð½ÀÀ» Çü»óÈÇÑ °ÍÀε¥ º°·Î ¿¹»ÚÁö´Â ¾ÊÁö¸¸ ¾î¶² ÇÁ·Î±×·¥ÀÎÁö´Â ¾Ë ¼ö ÀÖ´Ù.
ºñÁÖ¾ó ½ºÆ©µð¿À´Â ¾ÆÀÌÄÜ ÆÄÀÏÀ» icon1.ico ·Î »ý¼ºÇØ Áִµ¥
ÀÌ ÆÄÀϸíÀ» º¯°æÇÏ´Â °ÍÀÌ ±²ÀåÈ÷ ¾î·Æ´Ù. ¶ÇÇÑ º°´Ù¸¥ ÁöÁ¤ÀÌ ¾øÀ¸¸é ÇÁ·ÎÁ§Æ® Æú´õ¿¡ ¾ÆÀÌÄÜÀ» ¸¸µé¾î
¹ö¸°´Ù. ÀÌ·± ¸éÀ» º¸¸é Win32 Áö¿øÀÌ ±²ÀåÈ÷ ¹ÚÇØÁ³À½À»
¾Ë ¼ö Àִµ¥ ´ÙÀ½°ú °°ÀÌ ÀÌ µ¿ÀÛÀ» ¼öÁ¤ÇÑ´Ù.
- ÇÁ·ÎÁ§Æ® Æú´õ ¹Ø¿¡ res Æú´õ¸¦
»ý¼ºÇÑ´Ù.
- icon1.icoÀÇ À̸§À» SoEnty.ico·Î
¹Ù²ã res Æú´õ·Î º¹»çÇÑ´Ù.
- ¿ø·¡ÀÇ ¾ÆÀÌÄÜÀº Á¦°ÅÇÏ°í ´Ù½Ã ÀÓÆ÷Æ®ÇÏ¿© IDI_SOENTY ¾ÆÀÌÄÜÀ» µî·ÏÇÑ´Ù.
Çѹø¸¸ ÀÌ·¸°Ô ÇØ ÁÖ¸é ÀÌÈĺÎÅÍ »ý¼ºµÇ´Â ¸®¼Ò½º´Â res Æú´õ¿¡ ÀúÀåÇØ
ÁØ´Ù. ¸®¼Ò½º Æú´õ¸¦ ÁöÁ¤ÇÏ´Â º°µµÀÇ ¼³Á¤Àº ¾ø°í ºñÁÖ¾ó ½ºÆ©µð¿À°¡ ¾Ë¾Æ¼ ãµµ·Ï µÇ¾î ÀÖ´Ù. ¸ÞÀÎ À©µµ¿ìÀÇ ¾ÆÀÌÄÜÀº À©µµ¿ì Ŭ·¡½º¿¡ ÁöÁ¤ÇÏ´Â °ÍÀÌ ¿øÄ¢ÀÌÁö¸¸ SoEnty´Â
À©µµ¿ì Ŭ·¡½º°¡ °íÁ¤Àε¥´Ù ¸ðµç À©µµ¿ì°¡ °øÀ¯ÇÏ°í ÀÖ¾î Á÷Á¢ ¼öÁ¤ÇÒ ¼ö ¾ø´Ù. ±×·¡¼ À©µµ¿ì »ý¼º ÈÄ
ÇØ´ç À©µµ¿ì¿¡ ´ëÇؼ´Â ¾ÆÀÌÄÜÀ» µû·Î ÁöÁ¤ÇØ¾ß ÇÑ´Ù.
#include "resource.h"
void CMainWindow::Create()
{
CreateWindow(L"CWindow",
L"main", WS_OVERLAPPEDWINDOW,
10,
10, 640, 480, nullptr, (HMENU)0, g_hInst, this);
HICON
hIcon = LoadIcon(g_hInst, MAKEINTRESOURCE(IDI_SOENTY));
SetClassLong(win_hWnd,
GCL_HICON, (LONG)hIcon);
}
¾ÆÀÌÄÜÀ» ÀÐ°í ¸ÞÀÎ À©µµ¿ìÀÇ À©µµ¿ì Ŭ·¡½º¿¡ ´ëÇؼ¸¸ ¾ÆÀÌÄÜÀ» ÁöÁ¤Çß´Ù. ½ÇÇàÇØ
º¸¸é ¸ÞÀÎ À©µµ¿ìÀÇ Å¸ÀÌƲ ¹Ù ¿·¿¡ ¾ÆÀÌÄÜÀÌ ³ªÅ¸³´Ù.
ÀÌÈÄ¿¡µµ ºñÆ®¸ÊÀ̳ª ¸Þ´º, ´ëÈ»óÀÚ µîÀÇ ¸®¼Ò½º¸¦ ´ë·®À¸·Î ¸¸µé¾î¾ß
Çϴµ¥ ÀÌ ÀÛ¾÷Àº ½Ç½À¿¡¼ Á¦¿ÜÇÑ´Ù. ¹«½¼ ´ë´ÜÇÑ ³í¸®°¡ ÀÖ´Â °Íµµ ¾Æ´Ï°í ±×³É ÀâÀÏÀÏ »ÓÀÌ´Ù. ÃÖÁ¾ ÇÁ·ÎÁ§Æ®ÀÇ ¸®¼Ò½º¸¦ SoEnty02¿¡ ¹Ì¸® Æ÷ÇÔ½ÃÄÑ µÎ¾úÀ¸¸ç
ÀÌÈÄ ½Ç½À¿¡ »ç¿ëÇÒ ¸ð¸¥ ¸®¼Ò½º¸¦ ¹Ì¸® ¸¸µé¾î µÎ¾ú´Ù.
½Ç½À ÆíÀÇ´Â ¹°·Ð ¹Ýº¹ÀûÀÎ ÇнÀÀ» À§ÇØ ¸®¼Ò½º´Â »©°í Äڵ常 »ìÆ캼 ¼ö ÀÖµµ·Ï Á¶Ä¡ÇØ µÎ¾ú´Ù. ÀÌÈÄ¿¡´Â ±×³É ¸®¼Ò½º¸¦ ºÒ·¯¿Í »ç¿ëÇϱ⸸ ÇÏ¸é µÈ´Ù. ¹°·Ð ½Ç½À
´Ü°è¿¡ Æ÷ÇÔµÇÁö ¾Ê´Â »õ·Î¿î ±â´ÉÀ» ¸¸µé·Á¸é À̶§´Â ¸®¼Ò½º ÀÛ¾÷À» Ãß°¡·Î ´õ ÇØ¾ß ÇÑ´Ù.
C++Àº ¾ð¾îÀÇ Æ¯¼º»ó Àü¿ª º¯¼ö°¡ ²À ÇÊ¿äÇϸç ÇÁ·ÎÁ§Æ® ¾îµð¿¡¼³ª
Âü°íÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ÀÌ·ÐÀûÀ¸·Î Àü¿ª º¯¼ö¸¦ ÀüÇô ¾²Áö ¾Ê°íµµ ÇÁ·Î±×·¥À» ¸¸µé ¼ö´Â ÀÖÁö¸¸ Win32 API°¡ C ¼öÁØÀÇ ¶óÀ̺귯¸®¿©¼ ±×·¸°Ô µÇÁö ¾Ê´Â´Ù. ƯÈ÷ ÇÁ·Î±×·¥ÀÇ ÀνºÅϽº ÇÚµéÀÎ g_hInst´Â Ç×»ó ÂüÁ¶ÇØ¾ß ÇÒ
Á¤º¸ÀÌ´Ù. ±×·¡¼ Window.cpp ¼±µÎ¿¡ ´ÙÀ½°ú °°ÀÌ
¿ÜºÎ ¼±¾ðÇØ µÎ¾ú´Ù.
extern HINSTANCE g_hInst;
g_hInst´Â SoEnty.cpp¿¡
¼±¾ðµÈ Àü¿ª º¯¼öÀÌµÇ À©µµ¿ì¸¦ »ý¼ºÇÏ·Á¸é ±× »ý¼º ÁÖü¸¦ ¹àÇô¾ß ÇÏ´Ï Window.cpp¿¡¼µµ ÂüÁ¶Çؾß
ÇÑ´Ù. ±×·¡¼ ¿ÜºÎ ¼±¾ðÇÏ¿© ŸÀÔ°ú ´Ù¸¥ ¸ðµâ¿¡ ÀÖÀ½À» ¾Ë¸®´Â °ÍÀÌ´Ù.
¾ÕÀ¸·Îµµ ÀÌ·± Àü¿ª º¯¼ö¿¡ ´ëÇÑ ¿ÜºÎ ¼±¾ðÀº Á¾Á¾ ÇÊ¿äÇÏ´Ù. ƯÈ÷ ´ë»§¿¡ ÇØ´çÇÏ´Â mainWindowµµ ¾îµð¼³ª Àоî¾ß ÇÑ´Ù.
º¯¼ö°¡ ´Ã¾î³¯ ¶§¸¶´Ù °¢ ¸ðµâº°·Î ÀÏÀÏÀÌ extern ¼±¾ðÀ» ÇÏ´Â
°ÍÀº ¹«Ã´ ±ÍÂúÀº ÀÏÀÏ »Ó¸¸ ¾Æ´Ï¶ó À߸øÇÏ¸é ³í¸®°¡ ²¿¿© ¼ø¼±îÁö Á¶Á¤ÇØ¾ß ÇÏ´Â ¹ø°Å·Î¿òÀÌ ÀÖ´Ù. ÀÌ·±
¹ø°Å·Î¿òÀ» ¹æÁöÇϱâ À§ÇØ extern ¼±¾ð¸¸ ¸ð¾Æ µÎ´Â global.h
Çì´õ ÆÄÀÏÀ» »ý¼ºÇÑ´Ù. »õ Çì´õ ÆÄÀÏÀ» »ý¼ºÇÏ°í ´ÙÀ½ µÎ º¯¼ö¸¦ ¿ÜºÎ ¼±¾ðÇÑ´Ù.
extern HINSTANCE g_hInst;
extern CMainWindow mainWindow;
ÀÌÁ¦ Window.h´Â extern
¼±¾ðÀ» Á÷Á¢ÇÒ ÇÊ¿ä ¾øÀÌ global.h¸¸ Æ÷ÇÔÇÏ¸é µÈ´Ù.
°¢ Àü¿ª º¯¼öÀÇ ¼±¾ð À§Ä¡´Â ¾îµð°Ç »ó°ü ¾øÀ¸¸ç Á¸ÀçÇϱ⸸ Çϸé Àü ¼Ò½º¿¡¼ ¸¶À½´ë·Î ÀÐ°í ¾µ ¼ö ÀÖ´Ù.
C´Â µü Çѹø¸¸ ¼Ò½º¸¦ Àд ¿øÆнº(One
Pass) ¹æ½ÄÀÇ ¾ð¾îÀ̸ç C++µµ ¸¶Âù°¡ÁöÀÌ´Ù. ÀÚ¹Ù³ª
C#Àº ¹Ì¸® ¸ÕÀú ÀÐ¾î ¸íĪÀ» ã¾Æ ³õÁö¸¸ C/C++Àº ¾Æ·¡ÂÊ¿¡
¼±¾ðµÈ °ÍÀº À§¿¡¼ ¹Ì¸® ¾Ë ¼ö ¾ø´Ù. ±×·¡¼ °¢ ¸ðµâ¿¡¼ ¼·Î¸¦ ÂüÁ¶ÇϱⰡ ¹ø°Å·Î¿ì¸ç ¶§·Î´Â ½ÉÇÏ°Ô
²¿ÀÌ´Â °æ¿ì°¡ ÀÖ´Ù. ´ÙÀ½ ¿¹¸¦ º¸ÀÚ.
class CMainWindow {
trayWindow
°´Ã¼ »ç¿ë
class CTrayWindow {
mainWindow
°´Ã¼ »ç¿ë
¾çÂÊ Å¬·¡½º¿¡¼ ¼·Î¸¦ ÂüÁ¶ÇÏ°í ÀÖÀ¸¸é µµ´ëü ¹¹ºÎÅÍ ¼±¾ðÇØ¾ß Çϴ°¡ÀÇ ¹®Á¦°¡ »ý±ä´Ù. Main¿¡¼´Â Tray¸¦ ¾Ë¾Æ¾ß ÇÏ°í Tray´Â MainÀ» ¾Ë¾Æ¾ß ÇÏ´Ï ¼ø¼¸¦ Á¶Á¤Çؼ´Â ÇØ°áÇÒ ¼ö ¾ø´Ù. µÑ¸¸ Çصµ ±×·±µ¥ 3°³³ª 4°³ÀÇ
ŸÀÔ°ú ¸íĪÀÌ ¿«À̸é Á¶Á¾ÀÌ °ÅÀÇ ºÒ°¡´ÉÇÏ´Ù. ±×·¡¼ C/C++Àº
´ÙÀ½ ¹æ½ÄÀ¸·Î Äڵ带 ÀÛ¼ºÇÑ´Ù.
- ¸ðµç ¼±¾ðÀº Çì´õ ÆÄÀÏ¿¡ µÎ°í ±¸Çö Äڵ常 cpp ÆÄÀÏ¿¡ µÐ´Ù. Çì´õ ÆÄÀÏ¿¡´Â Äڵ带 µÎÁö ¾Ê´Â´Ù.
- ¿ÜºÎ·Î °ø°³ÇÒ Àü¿ª º¯¼ö´Â global.h¿¡
°¡±ÞÀû ¸ð¾Æ¼ ÇѲ¨¹ø¿¡ ¿ÜºÎ ¼±¾ðÇÑ´Ù.
ÀÌÁß, ù¹ø° ¿øÄ¢ÀÌ Áß¿äÇÏ´Ù. classÀÇ
¸â¹öÁß ¾ÆÁÖ °£´ÜÇÑ ÄÚµå´Â ÀζóÀÎÀ¸·Î ÀÛ¼ºÇصµ µÇÁö¸¸ ÀÌ ¾È¿¡¼ ´Ù¸¥ °´Ã¼¸¦ ÂüÁ¶Çؼ´Â ¾ÈµÈ´Ù. ÅÛÇø´Ã³·³
ºÒ°¡ÇÇÇÑ °æ¿ìµµ ÀÖÁö¸¸ °¡±ÞÀûÀ̸é Çì´õ´Â ¼±¾ð¸¸ ÇÏ´Â °ÍÀÌ ¿Ç´Ù.
¸®¼Ò½º¸¦ ¸¸µå´Â °ÍÀÌ ½Ç½À¿¡ º° µµ¿òÀÌ ¾ÈµÇ´Â °Íó·³ À¯Æ¿¸®Æ¼ ÇÔ¼öµµ ¿©±â Àú±â¼ ÀÌ¹Ì ¸¸µé¾îÁø °ÍÀ» °¡Á®¿Í
¾²´Â °ÍÀÌ´Ù. ¿ø·¡ ÇÏ°íÀÚ ÇÏ´Â ½Ç½À°ú´Â ´Ù¼Ò ¹«°üÇÑ ³í¸®¶ó ¹Ì¸® ÁغñÇØ ³õ±â·Î ÇÑ´Ù. Util.h¿¡ ¿øÇüÀ» ¼±¾ðÇÑ´Ù.
void StretchBitmap(HDC hdc, int x, int y, int w,
int h, HBITMAP hBit);
void TextOutVCenter(HDC hdc, int x, int y, LPCTSTR
str);
void FillRect(HDC hdc, int left, int top, int
right, int bottom, HBRUSH brush);
void moveNext(int& now, int size);
void movePrev(int& now, int size);
bool IsTopMost(HWND hWnd);
void MySetImeMode(HWND hEdit, BOOL bHan);
StretchBitmapÀº ºñÆ®¸ÊÀ» È®ÀåÇÏ¿© Ãâ·ÂÇÑ´Ù. TextOutVCenter´Â ¼öÁ÷ Áß¾Ó¿¡ ¹®ÀÚ¿À» Ãâ·ÂÇϴµ¥ Á¼Àº ¸éÀû¿¡ ÁÂÇ¥ °è»êÀ» ´Ü¼øÈÇØ ÁÖ´Â È¿°ú°¡
ÀÖ´Ù. FillRect´Â RECT ±¸Á¶Ã¼°¡ ¾Æ´Ñ LTRB¸¦ °¢°¢ ¹Þ´Â ·¡ÆÛ ÇÔ¼öÀÌ´Ù. moveNext¿Í movePrev´Â ÀÏÁ¤ ±æÀÌÀÇ ¹è¿À» °¡¸®Å°´Â ÷ÀÚ¸¦ ¾ÕµÚ·Î À̵¿ÇÑ´Ù. »ö»óÀ̳ª
¸ð´ÏÅ͸¦ ¼øȸÇÒ ¶§ ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇϸé Æí¸®ÇÏ´Ù.
IsTopMost ÇÔ¼ö´Â Ç×»ó À§ ¿É¼ÇÀÌ ÄÑÁ® ÀÖ´ÂÁö Á¶»çÇÑ´Ù. MySetImeMode´Â ÀÔ·Â ¸ðµå¸¦ ÇѱÛ, ¿µ¹® µî ¿øÇÏ´Â »óÅ·Î
º¯°æÇÏ¸ç ¹®ÀÚ¿ ÀԷ½à ¸ðµå¸¦ ¹Ì¸® ¸ÂÃç ÁØ´Ù. °¢ ÇÔ¼öÀÇ ±¸Çö ÄÚµå´Â Util.cpp¿¡ ÀÛ¼ºÇÑ´Ù. ÄÚµå´Â °¢ÀÚ ºÐ¼®ÇØ º¸µÇ µüÈ÷ ¾î·Á¿î ³»¿ëÀº
¾ø´Ù.
void
StretchBitmap(HDC hdc, int x, int y, int w, int h, HBITMAP hBit)
{
HDC MemDC;
HBITMAP oldBitmap;
int bx, by;
BITMAP bit;
SetStretchBltMode(hdc,
HALFTONE);
MemDC =
CreateCompatibleDC(hdc);
oldBitmap =
(HBITMAP)SelectObject(MemDC, hBit);
GetObject(hBit, sizeof(BITMAP),
&bit);
bx = bit.bmWidth;
by = bit.bmHeight;
StretchBlt(hdc, x, y, w, h,
MemDC, 0, 0, bx, by, SRCCOPY);
SelectObject(MemDC,
oldBitmap);
DeleteDC(MemDC);
}
// ¼öÁ÷ Áß¾Ó¿¡ ¹®ÀÚ¿À»
Ãâ·ÂÇÑ´Ù. ¼öÆòÀº hdcÀÇ ¼Ó¼ºÀ» µû¸¥´Ù.
void
TextOutVCenter(HDC hdc, int x, int y, LPCTSTR str)
{
SIZE sz;
GetTextExtentPoint32(hdc,
str, lstrlen(str), &sz);
TextOut(hdc, x, y - sz.cy /
2, str, lstrlen(str));
}
void FillRect(HDC
hdc, int left, int top, int right, int bottom, HBRUSH brush)
{
RECT rt;
SetRect(&rt, left, top,
right, bottom);
FillRect(hdc, &rt,
brush);
}
// ¹è¿À» ¼øȯÇϸç
´ÙÀ½ ÷ÀÚ¸¦ ã´Â´Ù.
void
moveNext(int& now, int size)
{
if (now == size - 1) {
now =
0;
} else {
now++;
}
}
// ¹è¿À» ¼øȯÇϸç
ÀÌÀü ÷ÀÚ¸¦ ã´Â´Ù.
void
movePrev(int& now, int size)
{
if (now == 0) {
now =
size - 1;
} else {
now--;
}
}
bool
IsTopMost(HWND hWnd)
{
LONG_PTR ExStyle;
ExStyle =
GetWindowLongPtr(hWnd, GWL_EXSTYLE);
return ((ExStyle &
WS_EX_TOPMOST) != 0);
}
void
MySetImeMode(HWND hEdit, BOOL bHan)
{
HIMC hImc;
hImc = ImmGetContext(hEdit);
if (bHan == TRUE) {
ImmSetConversionStatus(hImc,
IME_CMODE_NATIVE, IME_SMODE_NONE);
} else {
ImmSetConversionStatus(hImc,
0, IME_SMODE_NONE);
}
ImmReleaseContext(hEdit,
hImc);
}
ºñÆ®¸Ê È®Àå ¸ðµå´Â °¡Àå Ç°ÁúÀÌ ÁÁÀº HALFTONEÀ¸·Î ¹«Á¶°Ç ÁöÁ¤ÇÑ´Ù. °ú°Å ÄÄÇ»ÅÍ°¡ ´À¸± ¶§´Â ²À ÇÊ¿äÇÒ ¶§¸¸ ÀÌ ¿É¼ÇÀ» ¼±ÅÃÇßÁö¸¸ ¿äÁò ȯ°æ¿¡¼´Â ±×·± °Å ½Å°æ¾µ ÇÊ¿ä ¾ø´Ù. °¡Àå ÁÁÀº Ç°Áú·Î Çصµ ¿¬»ê ½Ã°£ÀÌ ¾ó¸¶ °É¸®Áö ¾Ê´Â´Ù.
¿äÁòÀº ´ÙÁß ¸ð´ÏÅÍ È¯°æÀÌ ÀϹÝÈµÇ¾î ¿©·¯ ¸ð´ÏÅ͸¦ ºÙ¿© ³õ°í ¾´´Ù. ¸ð´ÏÅÍ
°³¼ö¸¦ Á¶»çÇÏ°í ¼øȸÇÒ ¹æ¹ýÀÌ ÇÊ¿äÇϸç À©µµ¿ì°¡ ¾î´À ¸ð´ÏÅÍ¿¡ ÀÖ´ÂÁöµµ ¾Ë¾Æ¾ß ÇÑ´Ù. Util.h¿¡ ¸ÖƼ ¸ð´ÏÅÍ Á¤º¸ Á¶»ç¿ë ±¸Á¶Ã¼¿Í ÇÔ¼ö¸¦ ¼±¾ðÇÑ´Ù.
struct SMonitorInfo {
HMONITOR
hMonitor;
RECT
rcMonitor;
RECT
rcWork;
bool
primary;
};
BOOL CALLBACK MonitorEnumProc(HMONITOR hMonitor,
HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData);
int GetMonitorOfWindow(HWND hWnd);
Util.cpp¿¡´Â ¸ð´ÏÅÍ ¹è¿°ú °³¼ö¸¦ ÀúÀåÇÒ º¯¼ö, Á¤º¸¸¦ Á¶»çÇÏ´Â ÇÔ¼ö¸¦ ÀÛ¼ºÇÑ´Ù.
SMonitorInfo arMonitor[10];
int monitorCount;
BOOL CALLBACK MonitorEnumProc(HMONITOR hMonitor,
HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData)
{
MONITORINFOEX
mi;
arMonitor[monitorCount].hMonitor
= hMonitor;
arMonitor[monitorCount].rcMonitor
= *lprcMonitor;
mi.cbSize
= sizeof(MONITORINFOEX);
GetMonitorInfo(hMonitor,
&mi);
arMonitor[monitorCount].rcWork
= mi.rcWork;
arMonitor[monitorCount].primary
= (mi.dwFlags & MONITORINFOF_PRIMARY);
monitorCount++;
return
TRUE;
}
int GetMonitorOfWindow(HWND hWnd)
{
HMONITOR
hMonitor;
hMonitor
= MonitorFromWindow(hWnd, MONITOR_DEFAULTTONEAREST);
for
(int i = 0;; i++) {
if
(arMonitor[i].hMonitor == hMonitor) {
return
i;
}
}
return
-1;
}
ÃÖ´ë 10°³ÀÇ ¸ð´ÏÅÍ¿¡ ´ëÇÑ Á¤º¸¸¦ Á¶»çÇÒ ¼ö ÀÖ´Ù. ÀÌ Á¤µµ¸é ÃæºÐÇÏ´Ù. µÎ º¯¼ö ¸ðµÎ global.h¿¡ Àü¿ª ¿ÜºÎ º¯¼ö·Î ¼±¾ðÇÏ¿© ÇÁ·ÎÁ§Æ® Àü¿ª º¯¼ö·Î ¸¸µé¾î µÐ´Ù.
extern SMonitorInfo arMonitor[10];
extern int monitorCount;
¸ð´ÏÅÍ Á¤º¸´Â ¸ÞÀÎ À©µµ¿ì°¡ Ãʱâ鵃 ¶§ Á¶»çÇÑ´Ù. Çѹø Á¶»çÇØ ³õÀº
Á¤º¸´Â ÇÁ·Î±×·¥ Àü¿ªÀûÀ¸·Î È°¿ëÇÑ´Ù.
LRESULT CMainWindow::OnCreate(WPARAM wParam,
LPARAM lParam)
{
....
monitorCount
= 0;
EnumDisplayMonitors(NULL,
NULL, MonitorEnumProc, (LPARAM)NULL);
Util.cpp¿¡ ¼±¾ðµÇ¾î ÀÖ´Â monitorCount
º¯¼ö°¡ global.h¿¡ ¿ÜºÎ ¼±¾ðµÇ¾î ÀÖ¾î SoEnty.cpp¿¡¼µµ
ÀÚÀ¯·Ó°Ô ÀÐÀ» ¼ö ÀÖ´Ù.
´ÙÀ½ ½Ç½ÀºÎÅÍ À§Á¬°ú ƼÁ¬À» ¸¸µé °ÍÀÌ¸ç ¾çÀÌ ¸¹¾Æ º°µµÀÇ ¸ðµâ¿¡ Äڵ带 ÀÛ¼ºÇÑ´Ù. ÀÌ µÎ ¸ðµâÀ» ¹Ì¸® Æ÷ÇÔ½ÃÄÑ ³õ´Â´Ù. °¢°¢ Çì´õ ÆÄÀÏ°ú ±¸Çö ÆÄÀÏÀ»
µû·Î ¸¸µç´Ù.
Widget.h, Widget.cpp
Tidget.h, Tidget.cpp
ÀÌÈÄ ¸¹Àº ¸ðµâÀ» ´õ Ãß°¡ÇÒÅÙµ¥ ±×¶§¸¶´Ù Çì´õ ÆÄÀÏ Æ÷ÇÔ °ü°è¸¦ Á¶Á¤Çϱ⠹ø°Å·Ó´Ù. ´ÙÀ½ ÀýÂ÷¸¦ °ÅÃÄ ¹Ì¸® ÄÄÆÄÀÏµÈ Çì´õ ¿É¼ÇÀ» ¼³Á¤ÇÑ´Ù. Á» ¹ø°Å·ÓÁö¸¸ Çѹø¸¸ ¼³Á¤ÇØ µÎ¸é ÀÌÈÄ ÄÄÆÄÀÏ ¼Óµµ°¡ »¡¶óÁö°í
Çì´õ ÆÄÀÏÀ» °ü¸®Çϱ⵵ ½±´Ù. ¸ÕÀú pch.h Çì´õ ÆÄÀÏÀ»
Ãß°¡ÇÏ°í ´ÙÀ½ ³»¿ëÀ» ÀÛ¼ºÇÑ´Ù.
// »ý¼ºÀÚ¿¡¼ ¸ðµç
¸â¹ö¸¦ ÃʱâÈÇ϶ó´Â °æ°í
#pragma warning
(disable:26495)
// mallocÇÑ
¸Þ¸ð¸®°¡ NULLÀÏ ¼öµµ ÀÖ´Ù.
#pragma warning
(disable:6387)
#pragma warning
(disable:6308)
#pragma warning
(disable:6011)
// NULLÀÏ ¼öµµ
ÀÖ´Â Æ÷ÀÎÅÍ ÂüÁ¶ °æ°í
#pragma warning
(disable:28182)
#pragma warning
(disable:28183)
// ReadFileÀÌ
¸®ÅÏ°ªÀ» ¹«½ÃÇß´Ù´Â °æ°í
#pragma warning
(disable:6031)
// ³Î Á¾·á ¹®ÀÚ¿ÀÌ
¾Æ´Ò ¼öµµ ÀÖ´Ù´Â °æ°í.
#pragma warning
(disable:6064)
#pragma warning
(disable:6054)
#pragma
comment(lib, "comctl32.lib")
#pragma
comment(lib, "pdh.lib")
#pragma
comment(lib, "imm32.lib")
#pragma
comment(lib, "gdiplus")
#pragma
comment(lib, "shlwapi.lib")
#pragma
comment(lib, "winmm.lib")
#include
<windows.h>
#include
<stdlib.h>
#include
<stdio.h>
#include
<assert.h>
#include
<malloc.h>
#include
<memory.h>
#include
<tchar.h>
#include
<imm.h>
#include
<commctrl.h>
#include
<math.h>
#include
<Pdh.h>
#include
<string.h>
#include
<string>
#include
<map>
#include
<vector>
#include
<gdiplus.h>
#include
<shlwapi.h>
#include
<mmsystem.h>
using namespace
std;
using namespace
Gdiplus;
extern HINSTANCE
g_hInst;
#include
"resource.h"
#include
"Util.h"
#include
"Window.h"
#include
"Widget.h"
#include
"Tidget.h"
#include
"SoEnty.h"
#include "global.h"
±ÍÂúÀº °æ°í¸¦ ¹«½ÃÇϵµ·Ï Çß´Ù. ¾ÕÀ¸·Î »ç¿ëÇÒ ¶óÀ̺귯¸®¿¡ ´ëÇÑ ÀÓÆ÷Æ®
¼±¾ðµµ ¹Ì¸®ÇØ µÎ¾ú´Ù. ¿ø·¡´Â ¼³Á¤Ã¢¿¡¼ ÇØ¾ß ÇÏÁö¸¸ Äڵ忡¼µµ °£ÆíÇÏ°Ô µî·ÏÇÒ ¼ö ÀÖ´Ù.
ÀÚÁÖ »ç¿ëÇϴ ǥÁØ Çì´õ¿Í ÀÌ ÇÁ·Î±×·¥ÀÇ Çì´õ ÆÄÀÏÀ» Æ÷ÇÔÇÑ´Ù. pch.cpp
ÆÄÀÏÀ» »ý¼ºÇÏ°í ÄÚµå´Â ÀÛ¼ºÇÒ ÇÊ¿ä ¾øÀÌ pch.h¸¸ Æ÷ÇÔÇÑ´Ù. Window.cpp¿Í SoEnty.cpp, Util.cpp, Widget.cpp, Tidget.cpp¿¡µµ ´Ù¸¥ Çì´õ ÆÄÀÏÀº ÇÊ¿ä ¾ø°í
pch.h¸¸ ÀÖÀ¸¸é µÈ´Ù.
#include "pch.h"
´ÙÀ½Àº pch.cppÀÇ ¼Ó¼ºÃ¢À» ¿¾î ÀÌ ¸ðµâ·Î ¹Ì¸® ÄÄÆÄÀÏµÈ Çì´õ¸¦
¸¸µéµµ·Ï Create ¿É¼ÇÀ» ¼±ÅÃÇÏ°í ¹Ì¸® ÄÄÆÄÀÏµÈ ÆÄÀϸíÀº pch.h·Î
ÁöÁ¤ÇÑ´Ù. Debug, Release ¸ðµÎ ÇØ´çµÇ¹Ç·Î All
Configurations¸¦ ¼±ÅÃÇØ ³õ°í ¿É¼ÇÀ» Á¶Á¤ÇØ¾ß ÇÑ´Ù.
³ª¸ÓÁö ¸ðµâ¿¡ ´ëÇؼµµ ¶È°°Àº ¹æ¹ýÀ¸·Î ¼³Á¤Ç쵂 À̹ø¿¡´Â Create°¡
¾Æ´Ï¶ó Use ¿É¼ÇÀ» ¼±ÅÃÇÑ´Ù. ¼Ö·ç¼Ç Ž»ö±â¿¡¼ ¿©·¯ ÆÄÀÏÀ»
¼±ÅÃÇØ ³õ°í ÇѲ¨¹ø¿¡ ¼Ó¼ºÀ» º¯°æÇÒ ¼ö ÀÖ´Ù. ÀÌÈĺÎÅÍ´Â ¸ðµâ¸¶´Ù Çì´õ ÆÄÀÏÀ» ÀоîµéÀÌÁö ¾Ê°í pch.cpp ÄÄÆÄÀϽà ¹Ì¸® »ý¼ºÇØ µÐ Çì´õÆÄÀÏ Á¤º¸¸¦ »ç¿ëÇÑ´Ù.
ÀÌÁ¦ Çì´õ ÆÄÀÏÀº ¹«Á¶°Ç pch.h¿¡¼¸¸ ÀÎŬ·çµåÇÏ¸é µÈ´Ù. ¼ø¼µµ ÀÌ ¾È¿¡¼¸¸ Àß Á¶Á¤Çϸé
µÇ´Ï ²¿ÀÏ ÀÏÀÌ °ÅÀÇ ¾ø´Ù. ¸¶¹ý»ç¸¦ ¾²¸é ÀÌ ¼³Á¤ÀÌ ÀÚµ¿À¸·Î µÇÁö¸¸ ÇÁ·ÎÁ§Æ® ±¸¼ºÀÌ º¹ÀâÇØÁ® ¼öµ¿À¸·Î
Á÷Á¢ ¼³Á¤Çß´Ù.
pch¿¡´Â Çì´õ ÆÄÀÏ Æ÷ÇÔ ¿Ü¿¡µµ ÇÁ·ÎÁ§Æ® Àü¿ªÀûÀÎ ¼³Á¤ÀÌ µé¾î°¡´Âµ¥
std, gdiplus ³×ÀÓ½ºÆäÀ̽º¸¦ »ç¿ëÇϵµ·Ï Çß´Ù. ¾ÕÀ¸·Î
»ç¿ëÇÒ ¸ðµç ±â´ÉÀ» ´Ù ¹Ì¸® Æ÷ÇÔ½ÃÄÑ µÐ °ÍÀÌ´Ù. ÀÌÈÄ¿¡´Â Äڵ常 ÀÛ¼ºÇÏ¸é µÈ´Ù.
ÇÁ·ÎÁ§Æ®ÀÇ ¿É¼ÇÀº µüÈ÷ ´õ Á¶Á¤ÇÒ °Ç ¾ø°í ´Üµ¶ ½ÇÇà ÆÄÀÏ·Î ÄÄÆÄÀÏ Çϵµ·Ï Á¶Á¤ÇÑ´Ù. Debug, Release¿¡
´ëÇØ °¢°¢ ¿É¼ÇÀ» µû·Î Á¶Á¤ÇØ¾ß ÇÑ´Ù.
Debug ¹öÀüÀº Multi-threaded
Debug(/MTd)¸¦ ¼±ÅÃÇÏ°í ¸±¸®Áî ¹öÀüÀº Multi-threaded (/MT)·Î ¼±ÅÃÇÑ´Ù. ÀÌ ¿É¼Ç¿¡ ÀÇÇØ SoEnty´Â VC
·±Å¸ÀÓÀ» ³»ÀåÇÏ¿© Å©±â´Â ¾à°£ ´Ã¾î³ªÁö¸¸ ¾îµð¼³ª ½ÇÇàµÇ´Â ´Üµ¶ ½ÇÇà ÆÄÀÏÀÌ µÈ´Ù. º°µµÀÇ
¼³Ä¡ °úÁ¤ÀÌ ÇÊ¿ä ¾øÀ¸¸ç º¹»çÇؼ ¹Ù·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù.
¸¶Áö¸·À¸·Î Äڵ带 Á» Á¤¸®ÇÑ´Ù. °´Ã¼ÀÇ »ý¼º°ú Æı« °úÁ¤À» »ìÆì º¸±â
À§ÇØ Trace·Î µð¹ö±ë Á¤º¸¸¦ Âï¾î ºÃ´Âµ¥ Áö±ÝÀº ´Ù ÀÌÇØÇßÀ¸¹Ç·Î ºÒÇÊ¿äÇÑ Á¤º¸´Â Á¦°ÅÇÑ´Ù. µð¹ö±ë ·Î±×°¡ ³Ê¹« ¸¹À¸¸é Â÷ÈÄ ´Ù¸¥ µð¹ö±ëÀ» ÇÒ ¶§ °É¸®Àû°Å¸°´Ù. ¸ñÀûÀ»
ÀÌ·ç¾úÀ¸¸é Á¦°ÅÇÏ´Â °ÍÀÌ ÁÁ´Ù.
ÁÖ¼®µµ Àû´çÈ÷ Á¦°ÅÇÑ´Ù. ¼³¸íÀ» À§ÇØ ÁÖ¼®À» ÀÌ°Í Àú°Í ´Þ¾Æ ³õ¾Ò´Âµ¥
³Ê¹« ÁÖ¼®ÀÌ ¸¹ÀÌ ´Þ·Á ÀÖÀ¸¸é ÁöÀúºÐÇÏ´Ù. ÁÖ¼®À» Á¦°ÅÇÏ°í ¼Ò½º¸¦ ±ò²ûÇÏ°Ô Á¤¸®Çß´Ù. ¾îÂ÷ÇÇ CWindow Ŭ·¡½º´Â ¿ÏÀüÈ÷ ÀÌÇØÇÏ°í ÀÖ¾î¾ß ÇϹǷΠ¼³¸íÀÌ
ÇÊ¿äÇÏ¸é ¾Õ ¿¹Á¦¸¦ ´Ù½Ã º¹½ÀÇϵµ·Ï ÇÏÀÚ.
OnKeyDown ¸Þ½ÃÁö Çڵ鷯µµ Á¦°ÅÇÑ´Ù. Å×½ºÆ®¸¦ À§ÇØ °´Ã¼¸¦ »ý¼º ¹× Æı«ÇØ ºÃ´Âµ¥ ¾îµð±îÁö³ª Å×½ºÆ® ±â´ÉÀ̾úÀ¸¹Ç·Î ÀÌÁ¦´Â ÇÊ¿ä ¾ø´Ù. ¼±¾ð°ú ±¸Çö ¸ðµÎ Á¦°Å ÇÑ´Ù. Ȥ½Ã ÀÌ ºÎºÐ¿¡ ¹®Á¦°¡ Àְųª ´õ ¿¬±¸ÇÒ ÇÊ¿ä°¡ ÀÖÀ¸¸é SoEnty01 ÇÁ·ÎÁ§Æ®¸¦ »ç¿ëÇÑ´Ù.
¿©±â±îÁö ÀÛ¾÷Çϸé SoEnty02Àº ÀÌÀü ÇÁ·ÎÁ§Æ®¿Í ³»¿ëÀº °°µÇ ¾ÆÀÌÄܸ¸
Çϳª ´õ Ãß°¡µÇ¾ú´Ù. ´ë½Å ÀÌÈÄÀÇ °³¹ßÀ» Æí¸®ÇÏ°Ô ¼öÇàÇÒ ¼ö ÀÖµµ·Ï ÀÌ°Í Àú°Í ¿É¼ÇÀ» ÁöÁ¤Çß´Ù. ÀÌÈÄ ÇÁ·ÎÁ§Æ® Á¦ÀÛ ½Ç½ÀÀÇ ½ÃÀÛÁ¡À¸·Î »ç¿ëÇÏ¸é µÈ´Ù.