½Ç½À Áغñ

ÇÁ·ÎÁ§Æ® »çº»

ÀÌÈÄ °è¼Ó ±â´ÉÀ» ´Ã·Á°¥ÅÙµ¥ °¢ ½Ç½ÀÀÇ ½ÃÀÛÁ¡À» ºÐ¸®ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. ƯÁ¤ ½Ç½ÀÀ» Á÷Á¢ ÇØ º¸°í ½Í´Ù¸é ±× Á÷Àü±îÁöÀÇ ÇÁ·ÎÁ§Æ®°¡ µû·Î ÀÖ¾î¾ß ÇÑ´Ù. ±×·¡¼­ ¸Å ´Ü°è¸¶´Ù ÇÁ·ÎÁ§Æ®ÀÇ »çº»À» ¶ß°í ¹øÈ£¸¦ ºÙ¿© °¡¸ç ±â´ÉÀ» Ãß°¡Çϱâ·Î ÇÑ´Ù.

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Àº ÀÌÀü ÇÁ·ÎÁ§Æ®¿Í ³»¿ëÀº °°µÇ ¾ÆÀÌÄܸ¸ Çϳª ´õ Ãß°¡µÇ¾ú´Ù. ´ë½Å ÀÌÈÄÀÇ °³¹ßÀ» Æí¸®ÇÏ°Ô ¼öÇàÇÒ ¼ö ÀÖµµ·Ï ÀÌ°Í Àú°Í ¿É¼ÇÀ» ÁöÁ¤Çß´Ù. ÀÌÈÄ ÇÁ·ÎÁ§Æ® Á¦ÀÛ ½Ç½ÀÀÇ ½ÃÀÛÁ¡À¸·Î »ç¿ëÇÏ¸é µÈ´Ù.