[Áöµð³ÝÄÚ¸®¾Æ]¸¶ÀÌÅ©·Î¼ÒÇÁÆ®(ÀÌÇÏ MS)ÀÇ À©µµ¿ì´Â GUI(Graphic User Interface) ±â¹ÝÀÇ Æí¸®ÇÑ ÀÎÅÍÆäÀ̽º¸¦ ±â¹ÝÀ¸·Î À©µµ¿ì 3.0¿¡¼ºÎÅÍ À©µµ¿ì 95/98À» °ÅÃÄ XP¿¡ À̸£´Â PC ȯ°æ¿¡ Ä¿´Ù¶õ º¯È¸¦ °¡Á®¿Â ¿î¿µÃ¼Á¦¶ó ÇÒ ¼ö ÀÖ´Ù. À©µµ¿ì´Â °³¹ßÀÚ¿¡°Ôµµ ¸¹Àº º¯È¸¦ Áá´Âµ¥ ±× ÀÌÀüÀÇ DOS ÇÁ·Î±×·¡¹Ö¿¡¼´Â º¼ ¼ö ¾ø¾ú´ø ¸Þ½ÃÁö ±â¹Ý(message-driven ¶Ç´Â event-driven) ¹æ½ÄÀ» Á¦°øÇϰí DOS¿¡¼´Â ±âº» C ÇÔ¼ö ¿Ü¿¡ ÀÎÅÍ·´Æ®(interrupt) ±â¹ÝÀÇ ½Ã½ºÅÛ ÇÔ¼ö¸¦ ÀÌ¿ëÇØ ÇÁ·Î±×·¡¹ÖÀ» Çß´Ù¸é À©µµ¿ì¿¡¼´Â ÀÚüÀûÀ¸·Î Á¦°øÇÏ´Â ¼ö¹é °³ÀÇ API(Application Programming Interface)¿¡ Àͼ÷ÇØ¾ß ÇÁ·Î±×·¡¹ÖÇÒ ¼ö ÀÖ´Ù.
°³¹ßÀÚ´Â À©µµ¿ì°¡ DOS¿Í´Â ¼³°è °³³äºÎÅͰ¡ ´Ù¸¥ ¿î¿µÃ¼Á¦À̾ú±â ¶§¹®¿¡ °°Àº ÇÁ·Î±×·¡¹Ö ¾ð¾î¸¦ »ç¿ëÇÑ´Ù ÇÏ´õ¶óµµ ±âº» ¹®¹ý¸¸ °°À» »Ó ¸¹Àº »õ·Î¿î ºÎºÐÀ» ÀÍÇô¾ß ÇÏ´Â ¾î·Á¿òÀº ÀÖ¾ú´Ù. ±×·¯³ª DOS³ª À¯´Ð½º °°Àº ¸í·É¾î ¶óÀÎ ±â¹Ý ¿î¿µÃ¼Á¦¿¡¼ ÀÀ¿ë ÇÁ·Î±×·¡¹Ö °³¹ß½Ã ¾Ö·Î»çÇ×ÀÎ »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º ºÎºÐÀ» ¿î¿µÃ¼Á¦¿¡¼ Áö¿øÇØÁشٴ °ÍÀº »ó´çÈ÷ ¸Å·ÂÀûÀÌ´Ù.
ƯÈ÷ À©µµ¿ì ÇÁ·Î±×·¡¸Ó·ÎÀÇ ÀüȯÀº À©µµ¿ì 95°¡ ¼Ò°³µÇ´Â ½Ã±â¸¦ »ý°¢ÇÏ¸é °ÅÀÇ ´ë¼¼¿´°í, MS¿¡¼ Á¦°øÇÏ´Â ÅëÇÕ È¯°æÀÇ Æí¸®ÇÔ°ú MFC(Microsoft Foundation Class)¶ó´Â Æí¸®ÇÑ ¶óÀ̺귯¸®´Â C/C++ °³¹ßÀÚ°¡ 4GL ¸øÁö¾Ê°Ô À©µµ¿ì¿¡ ´ëÇÑ ±íÀº ÀÌÇØ ¾øÀÌ ÇÁ·Î±×·¡¹ÖÇÒ ¼ö ÀÖ°Ô ÇØÁá´Ù. À̹ø È£¿¡¼´Â ÀÌ·¯ÇÑ À©µµ¿ì ±â¹ÝÀÇ GUI ÇÁ·Î±×·¡¹Ö¿¡ ´ëÇØ¼ »ìÆìº¸°íÀÚ ÇÑ´Ù. À©µµ¿ì ÇÁ·Î±×·¡¹ÖÀÇ ±âº»¿¡¼ºÎÅÍ MFC¸¦ ÀÌ¿ëÇÑ ¹æ¹ý°ú ÀÀ¿ë ÇÁ·Î±×·¥À» Á»´õ ¸ÚÁö°Ô ²Ù¹Ð ¼ö ÀÖ°Ô ÇØÁÖ´Â ¸î¸î °ø°³ ¹× »ç¿ë ¶óÀ̺귯¸®¸¦ ¼Ò°³ÇÒ °ÍÀÌ´Ù.
À©µµ¿ì ÇÁ·Î±×·¡¹ÖÀÇ ±âº»
C/C++ ¾ð¾î¸¦ ÀÌ¿ëÇÑ À©µµ¿ì ÇÁ·Î±×·¡¹ÖÀº PC ȯ°æÀÇ DOS³ª À¯´Ð½º¿¡¼¿Í ¾à°£ ´Ù¸¥ ±¸Á¶¸¦ °®´Â´Ù(¹°·Ð À©µµ¿ì¿¡¼µµ DOS¿¡¼¿Í °°Àº ÄÜ¼Ö ±â¹Ý ÇÁ·Î±×·¡¹ÖÀÌ °¡´ÉÇÏ´Ù). ÀüÅëÀûÀÎ ½ÃÀÛ Æ÷ÀÎÆ®(entry point)ÀÎ main ÇÔ¼ö ´ë½Å WinMain ÇÔ¼ö¸¦ »ç¿ëÇϰí, Ç¥ÁØ ÀÔÃâ·Â ÇÔ¼ö ´ë½Å¿¡ À©µµ¿ì(window) Á¦¾î¿Í GDI(Graphics Device Interface) API¸¦ ÀÌ¿ëÇØ¼ ÀÔÃâ·ÂÀ» ó¸®ÇÑ´Ù. ¶ÇÇÑ ¸Þ½ÃÁö ·çÇÁ(message loop)°¡ Á¸ÀçÇØ À©µµ¿ì·Î Àü´ÞµÇ´Â ¸Þ½ÃÁö¸¦ ó¸®ÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù.
À©µµ¿ì ÇÁ·Î±×·¥ÀÇ ±âº»ÀûÀÎ ¸ñÀûÀº Çϳª ÀÌ»óÀÇ À©µµ¿ì¸¦ »ý¼ºÇÏ°í »ç¿ëÀڷκÎÅÍ ÀԷµǴ ÀÔ·Â Á¤º¸¿¡ ÇØ´çÇÏ´Â À̺¥Æ®¸¦ ó¸®Çϴµ¥ ÀÖ´Ù. ÀÌ·¯ÇÑ µ¿ÀÛÀ» Çϱâ À§Çؼ °³¹ßÀÚ´Â À©µµ¿ì¿¡°Ô »ý¼ºÇÏ·Á´Â À©µµ¿ì¿¡ ´ëÇÑ ¸î °¡Áö Á¤º¸¸¦ Àü´ÞÇØ¾ß ÇÏ°í ±× Á¤º¸¸¦ ±âÁØÀ¸·Î ÀÚ½ÅÀÌ ¿øÇÏ´Â À©µµ¿ì¸¦ »ý¼ºÇÒ ¼ö ÀÖ´Ù. ±× ÀýÂ÷´Â ´ÙÀ½°ú °°´Ù.
¨ç À©µµ¿ì¸¦ »ý¼ºÇÏ·Á´Â À©µµ¿ì Ŭ·¡½º¸¦ µî·ÏÇÑ´Ù.
¨è ¸ÞÀÎ À©µµ¿ì¸¦ »ý¼ºÇÑ´Ù.
¨é ¸Þ½ÃÁö ·çÇÁ¸¦ ½ÇÇàÇÑ´Ù.
À©µµ¿ì »ý¼º¿¡ ù ¹øÂ° ´Ü°è´Â À©µµ¿ì¿¡ À©µµ¿ì Ŭ·¡½º Á¤º¸¸¦ µî·ÏÇÏ´Â °ÍÀÌ´Ù. À©µµ¿ì Ŭ·¡½º(window class) Á¤º¸ µî·ÏÀ» À§Çؼ <¸®½ºÆ® 1>ÀÇ WNDCLASS ±¸Á¶Ã¼°¡ »ç¿ëµÈ´Ù.
<¸®½ºÆ® 1> WNDCLASS ±¸Á¶Ã¼ Á¤º¸
typedef struct _WNDCLASS {
UINT style; // Ŭ·¡½º ½ºÅ¸ÀÏ ÁöÁ¤
WNDPROC lpfnWndProc; // À©µµ¿ì ÇÁ·Î½ÃÁ®ÀÇ Æ÷ÀÎÅÍ
int cbClsExtra; // Ŭ·¡½º ¿¢½ºÆ®¶ó µ¥ÀÌÅÍ Å©±â
int cbWndExtra; // À©µµ¿ì ¿¢½ºÆ®¶ó µ¥ÀÌÅÍ Å©±â
HINSTANCE hInstance; // À©µµ¿ì ÀνºÅϽº ÇÚµé
HICON hIcon; // ¾ÆÀÌÄÜ ÇÚµé
HCURSOR hCursor; // Ä¿¼ ÇÚµé
HBRUSH hbrBackground; // ¹é±×¶ó¿îµå ºê·¯½Ã ÇÚµé
LPCTSTR lpszMenuName; // ¸Þ´º ¸®¼Ò½º ¸í
LPCTSTR lpszClassName; // Ŭ·¡½º ¸í
} WNDCLASS, *PWNDCLASS;