MFC ¸ð´Þ ´ÙÀ̾˷α׸¦ ¼û±è »óÅ·Π½ÃÀÛÇÏ´Â ¹æ¹ý

2006-07-25 ½Å¿µÁø

1. Introduction

MFC¸¦ »ç¿ëÇØ¼­ Æ®·¹ÀÌ ±â¹ÝÀ¸·Î µ¿ÀÛÇÏ´Â ´ÙÀÌ¾Ë·Î±× º£À̽ºµåÀÇ ÇÁ·Î±×·¥À» °³¹ßÇØ º» »ç¶÷À̶ó¸é ´©±¸³ª ÇѹøÂëÀº ÀÌ·± »ý°¢À» ÇØ º¸¾ÒÀ»°ÍÀÌ´Ù. À̳ðÀÇ ¸ð´Þ ¿Ö ½ÃÀÛÇϱ⸸ ÇÏ¸é ³ªÅ¸³ªÁö? ShowWindow API¸¦ »ç¿ëÇØ¼­ SW_HIDE¸¦ ¸î ±ºµ¥ ³Ö¾îº¸¾Æµµ »ÏÁ·ÇÑ ¼ö°¡ ¾ø¾úÀ» °ÍÀÌ´Ù. ÃÖ´ëÇÑ ³ë·ÂÀ» ÇØ º¸¾ÒÀÚ, È­¸é¿¡ ³ªÅ¸³µ´Ù ±Ý»õ »ç¶óÁö´Â°Ô ÀüºÎ´Ù.

±×·³ ¿Ö ÀÌ·± Çö»óÀÌ ³ªÅ¸³¯±î? ±×°Ç MFC ³»ºÎÀûÀ¸·Î DoModal¾È¿¡¼­ ´ÙÀ̾˷α׸¦ ShowÇÏ°Ô ¸¸µé±â ¶§¹®ÀÌ´Ù. ±×·¸´Ù¸é ¹æ¹ýÀº ¾øÀ»±î? ºÒÇàÇϰԵµ ÀϹÝÀûÀÎ ShowWindow¸¦ »ç¿ëÇÑ ¹æ¹ýÀº ¾ø´Ù. ÀÌ ¹®¼­¿¡¼­´Â ¹®Á¦¸¦ ÇØ°áÇÏ´Â ´Ù¸¥ ¹æ¹ýÀ» Á¦½ÃÇϰí ÀÖ´Ù. ±×·³ 2Àå¿¡¼­ Á» ´õ ÀÚ¼¼È÷ »ìÆìº¸±â·Î ÇÏÀÚ.

2. HOWTO

ÀÌ¹Ì 1Àå¿¡¼­ ShowWindow¸¦ ÅëÇÑ ´äÀÌ ¾ø´Ù°í ¹àÇû´Ù. ±×·¸´Ù¸é µµ´ëü ¹«¾ùÀ» »ç¿ëÇØ¾ß ±ò²ûÇÏ°Ô ´ÙÀ̾˷α׸¦ Á¦¾îÇÒ ¼ö ÀÖÀ»±î? ±× ´äÀº ¹Ù·Î WM_WINDOWPOSCHAINGING¿¡ ÀÖ´Ù. º¸±â¿¡µµ »ó´çÈ÷ ±ä À̸§À» °¡Áø ¸Þ½ÃÁöÀÌ´Ù. ¾Æ¸¶µµ À©µµ¿ì À§Ä¡°¡ º¯°æµÉ¶§ ¹ß»ýÇÒ °Í °°Àº ´À³¦À» ÁÖÁö ¾Ê´Â°¡? ±×·¸°Ô »ý°¢Çß´Ù¸é Á¤´äÀÌ´Ù.

MSDN¿¡ µû¸£¸é WM_WINDOWPOSCHANGING ¸Þ½ÃÁö´Â À©µµ¿ìÀÇ »çÀÌÁî, Æ÷Áö¼Ç, ¶Ç´Â Z-order ¼ø¼­°¡ º¯°æµÇ´Â °æ¿ì À©µµ¿ì¿¡ Å뺸µÈ´Ù°í ÇÑ´Ù. ±×·¸´Ù¸é À©µµ¿ìÀÇ °ÅÀÇ ¸ðµç ¿ÜºÎ º¯È­¿¡ ÀÌ ¸Þ½ÃÁö°¡ ¹ß»ýÇÑ´Ù°í º¸¸éµÈ´Ù. ÀÌ ¸Þ½ÃÁö¿¡ ´ëÇØ¼­ Á» ´õ »ìÆìº¸¸é ´ÙÀ½°ú °°´Ù.

À§´Â ÇØ´ç ¸Þ½ÃÁöÀÇ wParam°ú lParam¹× lParam¿¡ »ç¿ëµÇ´Â ±¸Á¶Ã¼ÀÇ ¼³¸íÀ» ³ªÅ¸³½ °ÍÀÌ´Ù. ¿À´Ã ¿ì¸®ÀÇ ¹®Á¦¸¦ ÇØ°áÇϴµ¥ °¡Àå Áß¿äÇÑ °ÍÀº ÀÌ WINDOWPOS ±¸Á¶Ã¼´Ù. ±× Áß¿¡¼­µµ flags¶ó°í ÇÒ ¼ö ÀÖ´Ù.

flags´Â À©µµ¿ì Æ÷Áö¼Ç°ú °ü·ÃµÈ ´Ù¾çÇÑ °ªµéÀ» °¡Áú ¼ö ÀÖ´Ù°í ÇÑ´Ù. ÀϹÝÀûÀ¸·Î ¾Æ·¡¿Í °°Àº °ªµéÀÇ Á¶ÇÕÀ¸·Î ±¸¼ºµÈ´Ù.

z-order
À©µµ¿ì´Â ÀϹÝÀûÀ¸·Î 2Â÷¿ø Æò¸é ¸ð´ÏÅÍ¿¡ Ãâ·ÂµÈ´Ù. ±×·¡¼­ x,yÃàÀÌ ±âº»ÀûÀ¸·Î Á¸ÀçÇÑ´Ù. °Å±â¿¡ ´õÇØ¼­ À©µµ¿ì ½Ã½ºÅÛ¿¡¼­´Â z-order¶ó´Â °³³äÀÌ ÀÖ´Ù. À̰ÍÀº ¼öÇаú ¸¶Âù°¡Áö·Î x,yÃà ¿Ü¿¡ zÃàÀ» ±âÁØÀ¸·Î ÇÑ ¼ø¼­°¡ µÈ´Ù. À©µµ¿ì·Î µûÁö¸é ƯÁ¤ À©µµ¿ì µÚ¿¡ ¹«½¼ À©µµ¿ì°¡ ÀÖ´ÂÁö¸¦ ±â¼úÇÏ´Â °ÍÀ» z-order¶ó°í »ý°¢ÇÏ¸é µÈ´Ù.

¿©±â¼­ ƯÈ÷³ª Áß¿äÇÑ °ÍÀº SWP_SHOWWINDOW´Ù. È­¸é¿¡ À©µµ¿ì°¡ Ãâ·ÂµÇ·Á°í ÇÏ¸é ºÐ¸í WM_WINDOWPOSCHANGING ¸Þ½ÃÁö°¡ Æ÷½ºÆÃ µÉ °ÍÀÌ´Ù. ´ç¿¬È÷ ³Ñ¾î¿Â WINDOWPOS ±¸Á¶Ã¼ÀÇ flags Çʵ尪¿¡´Â SWP_SHOWWINDOW°¡ ¼³Á¤µÇ¾î ÀÖÀ» °ÍÀÌ´Ù. ±×·¸´Ù¸é °ªÀ» »ì¦ Á¦°ÅÇØ ¹ö¸®¸é ¾î¶»°Ô µÉ±î? ¾Æ¸¶µµ MFCÀÇ ´ÙÀÌ¾Ë·Î±× º£À̽ºµå ÇÁ·Î±×·¥À̶ó¸é ¾Æ·¡¿Í °°Àº Äڵ尡 µÉ °ÍÀÌ´Ù.

À§¿Í °°ÀÌ ÇØµÎ°í ÇÁ·Î±×·¥À» ½ÇÇàÇϸé, ´ÙÀ̾˷αװ¡ È­¸é¿¡ Ãâ·ÂµÇÁö ¾ÊÀ» °ÍÀÌ´Ù. ÇÁ·Î¼¼½º ¸ñ·Ï¿¡¼­ ÇØ´ç ÇÁ·Î±×·¥À» Á¾·á½ÃŰÀÚ. À̰ÍÀÌ ¿ì¸®°¡ Àû¿ëÇÒ ¸ð´Þ ´ÙÀ̾˷α׸¦ °£´ÜÇÏ°Ô ¼û±â´Â ¹æ¹ýÀÌ´Ù. À̰͵éÀ» ÇÕÃļ­ Á» ´õ ¿ì¾ÆÇÏ°Ô »ç¿ëÇÏ´Â ¹æ¹ýÀ» ´ÙÀ½ Àå¿¡¼­ »ìÆìº¸µµ·Ï ÇÏÀÚ.

Âü°í
±âº»ÀûÀ¸·Î ´ÙÀ̾˷α׸¦ Ŭ·¡½º À§Àúµå·Î ¿­°Ô µÇ¸é, ¸Þ½ÃÁö »óÀÚ¿¡ WM_WINDOWPOSCHANGING ¸Þ½ÃÁö°¡ ¾ø´Ù. Ŭ·¡½º À§ÀúµåÀÇ ¸¶Áö¸· ÅÇ¿¡ À§Ä¡ÇÑ Å¬·¡½º ÀÎÆ÷·Î °¡¼Å¼­ ¸Þ½ÃÁö ÇÊÅ͸¦ À©µµ¿ì·Î º¯°æÇÑÈÄ¿¡ º¸¸é WM_WINDOWPOSCHANGING ¸Þ½ÃÁö°¡ Ãß°¡µÇ¾î ÀÖ´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.

3. Codes

2Àå¿¡¼­ »ìÆìº» ³»¿ëÀÇ ÀÇÇÏ¸é °á±¹ ¿ì¸®´Â ±âÁ¸ÀÇ ShowWindowÇൿÀ» ¹«½ÃÇÏ°í µ¶ÀÚÀûÀÎ ÇൿÀ» ÇØ¾ß ÇÑ´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. ½±°Ô »ý°¢ÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ¸·Î °£´ÜÇÏ°Ô ¸â¹öº¯¼öµîÀ» Çϳª ¸¸µé°í ±× °ª¿¡ µû¶ó¼­ WM_WINDOWPOSCHANGING Çڵ鷯¿¡¼­ SWP_SHOWWINDOW Ç÷¡±×¸¦ ¼³Á¤¶Ç´Â Á¦°ÅÇØ ÁÖ¸é ½±°Ô µÉ °Í ÀÌ´Ù. ÇÏÁö¸¸ ÀÌ·¸°Ô ÀÎÅÍÆäÀ̽º¸¦ ºÐ¸®½Ãų¶§¿¡´Â ²À ±âÁ¸ÀÇ ÇൿÀ̶û À¯»çÇÏ°Ô ³»Áö´Â ±âÁ¸ÀÇ ÇൿÀ» ÅëÇØ¼­ º¯°æ½ÃÄÑ ÁÖ´Â °ÍÀÌ ÁÁ´Ù. ±×·¸°Ô ÇØ¾ß ÃßÈÄ¿¡ º¸´õ¶óµµ Çò°¥¸®Áö ¾Ê±â ¶§¹®ÀÌ´Ù.

ÀÌ·¯ÇÑ ÀÛ¾÷À» °¡Àå ¿Ïº®ÇÏ°Ô ÇÒ ¼ö ÀÖ´Â °÷Àº ¾Æ¸¶µµ ShowWindowÀÏ °ÍÀÌ´Ù. CWndÀÇ ShowWindow¸¦ ÀçÁ¤ÀÇÇØ¼­ »ç¿ëÇÏ´Â °ÍÀÌ´Ù. ÇÏÁö¸¸ ÀÌ °æ¿ì ShowWindow°¡ CWnd¿¡ virtualÇÔ¼ö·Î ¼±¾ðµÇ¾îÁ® ÀÖÁö ¾Ê±â¶§¹®¿¡ ´ÙÀ̾˷α׸¦ CWndÆ÷ÀÎÅÍ·Î »ç¿ëÇÏ´Â °æ¿ì¿¡´Â µ¿ÀÛÇÏÁö ¾ÊÀ» ¼ö ÀÖ´Ù. ±×·¸°Ô µÇ¸é ¿À·ù´Â ³ªÁö ¾ÊÁö¸¸ °á°ú°¡ ÀÌ»óÇÏ°Ô µÇ¹Ç·Î ´Ù¸¥ »ç¶÷ÀÌ ¾²°Ô µÉ ¶§ ¿ÀÇØ¸¦ ÁÙ ¼ö ÀÖ´Ù. µû¶ó¼­ ShowWindow¸¦ ¿À¹ö¶óÀ̵å ÇÏÁö ¾Ê°í, ±×¿Í ºñ½ÁÇÑ À̸§ÀÇ ShowWindowEx¸¦ ¸¸µé¾î ±×³ðÀ» »ç¿ëÇϱâ·Î ÇÏÀÚ. ¾Æ·¡´Â °£´ÜÇÏ°Ô ÀÛ¼ºÇغ» »ùÇà ÄÚµå´Ù.

m_bShowFlag´Â BOOLÇüÀ¸·Î ¼±¾ðµÈ ¸â¹ö º¯¼ö´Ù. ÀÌÁ¦ ´ÙÀ̾˷α×ÀÇ ShowWindowEx ÇÔ¼ö¸¦ DoModalÀü¿¡ »ç¿ëÇϸé, DoModalÀÌ ½ÇÇàµÇ´õ¶óµµ ´ÙÀ̾˷αװ¡ È­¸é¿¡ Ç¥½ÃµÇÁö ¾ÊÀ» °ÍÀÌ´Ù.

ÁÖÀÇÇØ¼­ º¸¾Æ¾ß ÇÒ Á¡ Áß¿¡ Çϳª´Â ShowWindowExÀÇ ¸¶Áö¸· È£ÃâÀº ShowWindow·Î ÀÌ·ç¾îÁø´Ù´Â Á¡ÀÌ´Ù. ÇÏÁö¸¸ DoModal ÀÌÀü¿¡ ´ÙÀ̾˷α״ »ý¼ºµÇÁö ¾ÊÀ¸¹Ç·Î ±× °æ¿ì¿¡ ShowWindow¸¦ È£ÃâÇÏ¸é ¿À·ù°¡ ³­´Ù. ¿Ö³ÄÇÏ¸é ¾ÆÁ÷ ¸¸µé¾îÁø À©µµ¿ì ÇÚµéÀÌ ¾ø±â ¶§¹®ÀÌ´Ù. µû¶ó¼­ ÀÌ °æ¿ì´Â ShowWindow¸¦ È£ÃâÇÏÁö ¾Ê°í ±×³É ¸®ÅÏÇØ¾ß ÇÑ´Ù´Â Á¡À» ±â¾ïÇØ¾ß ÇÑ´Ù.