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´Â À©µµ¿ì Æ÷Áö¼Ç°ú °ü·ÃµÈ ´Ù¾çÇÑ °ªµéÀ» °¡Áú ¼ö ÀÖ´Ù°í ÇÑ´Ù. ÀϹÝÀûÀ¸·Î ¾Æ·¡¿Í °°Àº °ªµéÀÇ Á¶ÇÕÀ¸·Î ±¸¼ºµÈ´Ù.
SWP_DRAWFRAME- ÇÁ·¹ÀÓÀ» ±×¸°´Ù.SWP_FRAMECHANGEDSWP_HIDEWINDOW- À©µµ¿ì¸¦ ¼û±ä´Ù.SWP_NOACTIVATE- À©µµ¿ì¸¦ Ȱ¼ºÈ ½ÃŰÁö ¾Ê´Â´Ù.SWP_NOCOPYBITS- Ŭ¶óÀÌ¾ðÆ® ¿µ¿ª°ú °ü·ÃµÈ ¸ðµç Á¤º¸¸¦ ¹«½ÃÇÑ´Ù.SWP_NOMOVE- ÇöÀç À§Ä¡¸¦ À¯ÁöÇÑ´Ù. (x,y ÆÄ¶ó¹ÌÅ͸¦ ¹«½ÃÇÑ´Ù.)SWP_NOOWNERZORDER- ¼ÒÀ¯ÁÖ À©µµ¿ìÀÇ Z-order¸¦ º¯°æÇÏÁö ¾Ê´Â´Ù.SWP_NOREDRAW- À©µµ¿ì¸¦ »õ·Î ±×¸®Áö ¾Ê´Â´Ù. ¾î¶°ÇÑ ÆäÀÎÆÃ °ü·Ã ¸Þ½ÃÁöµµ Æ÷½ºÆ® µÇÁö ¾Ê´Â´Ù.SWP_NOREPOSITION- SW_NOOWNERZORDER Ç÷¡±×¿Í °°À½SWP_NOSENDCHANGING- À©µµ¿ì°¡ WM_WINDOWPOSCHANGING ¸Þ½ÃÁö¸¦ ¹Þ´Â °ÍÀ» ¸·´Â´Ù.SWP_NOSIZE- »çÀÌÁ º¯°æÇÏÁö ¾Ê´Â´Ù. (cx, cy ÆÄ¶ó¹ÌÅ͸¦ ¹«½ÃÇÑ´Ù.)SWP_NOZORDER- Z-order¸¦ º¯°æÇÏÁö ¾Ê´Â´Ù.SWP_SHOWWINDOW- À©µµ¿ì¸¦ Ãâ·ÂÇÑ´Ù.
À©µµ¿ì´Â ÀϹÝÀûÀ¸·Î 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¸¦ È£ÃâÇÏÁö ¾Ê°í ±×³É ¸®ÅÏÇØ¾ß ÇÑ´Ù´Â Á¡À» ±â¾ïÇØ¾ß ÇÑ´Ù.