MFCÀÇ ±¸Á¶

 À©µµ¿ì ÇÁ·Î±×·¡¹Ö °æÇèÀÌ ÀÖ´Ù¸é MFC¸¦ ÀÌÇØÇϱⰡ ½¬¿ï °ÍÀÌ´Ù. ¸¸ÀÏ À©µµ¿ì ÇÁ·Î±×·¡¹Ö °æÇè Áß¿¡µµ SDKÇÁ·Î±×·¡¹Ö °æÇèÀÌ ÀÖ´Ù¸é ÈξÀ ´õ ÀÌÇØÇϱ⠽¬¿ï °ÍÀÌ´Ù. ¿Ö³ÄÇϸé MFC´Â SDKÀÇ ±¸Á¶¸¦ °ÅÀÇ ±×´ë·Î Ŭ·¡½º·Î °¡Á®´Ù ¸¸µé¾ú±â ¶§¹®ÀÌ´Ù. ÀÌÁ¦ºÎÅÍ ÇÏ´Â ¼³¸íÀº ÁÖ·Î SDK¿Í °ü·ÃÇÑ ³»¿ëÀÌ ¸¹´Ù.
 MFCÀÇ ÇϺΠ±¸Á¶°¡ SDKÀÌ°í À̹ø ÀåÀº ±× ±¸Á¶¸¦ ¼³¸íÇÏ´Â ºÎºÐÀ̱⠶§¹®ÀÌ´Ù. µû¶ó¼­ SDK ÇÁ·Î±×·¡¹ÖÀ» ÇØ º» °æÇèÀÌ ¾ø´Ù¸é ÀÌÇØÇϱⰡ Èûµé °ÍÀÌ´Ù. ÇÏÁö¸¸ ÀÌ ÀåÀº MFCÀÇ ³»ºÎ¸¦ ¼³¸íÇÏ´Â ºÎºÐÀ̹ǷΠ¸ô¶óµµ º° »ó°üÀº ¾øÁö¸¸ ³»¿ëÀ» Àß ÀÌÇØÇÑ´Ù¸ç ±×¸¸Å­ ÇÁ·Î±×·¡¹ÖÀ» Çϱâ´Â ½¬¿ï °ÍÀÌ´Ù. ÀÌÁ¦ºÎÅÍ SDK¸¦ ¹ÙÅÁÀ¸·Î MFCÀÇ ³»ºÎ ±¸Á¶°¡ ¾î¶² ½ÄÀ¸·Î ±¸¼ºµÇ¾î ÀÖ´ÂÁö C++À» Áß½ÉÀ¸·Î ¾Ë¾Æº¸ÀÚ.

 SDK À©µµ¿ì ÇÁ·Î±×·¡¹ÖÀ» ÇÏ´Ùº¸¸é ÇÚµéÀ̶õ ¸»À» ¸¹ÀÌ µè°Ô µÈ´Ù. ÇÚµéÀ̶õ À©µµ¿ì, µð¹ÙÀ̽º ÄÁÅؽºÆ®, ºñÆ®¸Ê, ¸Þ¸ð¸® µîÀÇ ¿ÀºêÁ§Æ®¶ó ÇÒ ¼ö ÀÖ´Â °ÍÀ» ÁöĪÇϴµ¥ »ç¿ëµÈ´Ù. ÇÚµéÀ» ¾î¶² ¿ÀºêÁ§Æ®¸¦ ±¸º°Çϱâ À§ÇØ »ç¿ëÇÏ´Â ÀÏÁ¾ÀÇ ÀϷùøÈ£¶ó°í »ý°¢Çصµ µÉ µíÇÏ´Ù. ¿¹¸¦ µé¾î À©µµ¿ì ÇÚµéÀ̶õ °¢ À©µµ¿ì¸¦ ±¸º°Çϱâ À§ÇØ À©µµ¿ìº°·Î ÇÒ´çµÈ ¹øÈ£¶ó°í »ý°¢ÇÏ´Â °ÍÀÌ´Ù. À§µµ¿ì¿Í °ü°èµÈ ¸ðµç API¿¡´Â Á¶ÀÛ ´ë»óÀÌ µÇ´Â À©µµ¿ì¸¦ ÁöĪÇÏ´Â ¹«¾ùÀΰ¡°¡ ÇÊ¿äÇÏ´Ù. ±×·¡¼­ ±×·± APIµéÀÇ ÀÎÀÚ¸¦ »ìÆ캸¸é ±×·± ¿ëµµ·Î »ç¿ëµÇ´Â ÀÎÀÚ°¡ ÀÖ´Ù .¹Ù·Î ±× ÀÎÀÚ·Î À©µµ¿ì ÇÚµéÀÌ »ç¿ëµÇ´Â °ÍÀÌ´Ù. ¿¹¸¦ µé¾î À©µµ¿ìÀÇ Å©±â¸¦ ¾ò°í ½ÍÀ¸¸é GetClientRect API¸¦ »ç¿ëÇÏ¸é µÈ´Ù. »ç¿ë¹ýÀº ´ÙÀ½°ú °°´Ù.

¶Ç À©µµ¿ìÀÇ Å©±â³ª À§Ä¡¸¦ º¯°æÇÏ°í ½Í´Ù¸é MoveWindow API¸¦ ÀÌ¿ëÇÏ¸é µÈ´Ù.

 À§ÀÇ µÎ API¸¦ º¸¸é ÀÛ¾÷´ë»óÀÎ À©µµ¿ì¸¦ ÁöĪÇϱâ À§ÇØ Ã¹ ¹ø° ÀÎÀÚ·Î À©µµ¿ì ÇÚµéÀ» ÀԷ¹ްí ÀÖÀ½À» ¾Ë ¼ö ÀÖ´Ù. ÀÌ·± À©µµ¿ì ÇÚµé°ú À©µµ¿ì °ü·Ã API¸¦ ¹ÙÅÁÀ¸·Î MFC¿¡¼­´Â CWnd¶ó´Â Ŭ·¡½º¸¦ »ý¼ºÇÏ¿´´Ù. CWnd Ŭ·¡½º¿¡´Â À©µµ¿ì¿Í °ü·ÃÀÖ´Â ¸ðµç SDKÀÇ ÇÔ¼öµéÀÌ µé¾î°¡ ÀÖ´Ù. ¾ÕÀÇ ¿¹¿¡ ºñÃß¾î º¸ÀÚ¸é ´ë·« ´ÙÀ½°ú °°Àº ¸ð¾çÀ» ¶ì°Ô µÈ´Ù.

 À§¿¡ CWnd Ŭ·¡½ºÀÇ Á¤ÀǸ¦ ¾ÆÁÖ ¾à°£ º¸¿´´Âµ¥ ½ÇÁ¦ CWnd Ŭ·¡½ºÀÇ Á¤ÀǸ¦ º¸°í ½ÍÀ¸¸é MSDEV\MFC\INCLUDE µð·ºÅ丮¿¡ ÀÖ´Â AFXWIN.H¸¦ º¸±â ¹Ù¶õ´Ù. »ý°¢º¸´Ù µ¢Ä¡°¡ ±²ÀåÈ÷ Ŭ °ÍÀÌ´Ù. AFXWIN.H¿¡´Â MFCŬ·¡½º ´ëºÎºÐÀÇ Á¤ÀÇ°¡ µé¾îÀÖ´Ù.  À§ÀÇ CWnd Ŭ·¡½º¸¦ º¸¸é µ¥ÀÌÅÍ ¸â¹ö·Î m_hWnd °¡ ÀÖ´Ù. ¹Ù·Î À©µµ¿ì ÇÚµéÀÌ´Ù.
 ¸â¹öÇÔ¼ö·Î´Â À©µµ¿ì¿¡°Ô ¹«¾ùÀΰ¡ ÀÛ¾÷À» ÇÒ ¼ö ÀÖ´Â °ÍµéÀÌ Àֱ⠸¶·ÃÀÎÀÏÅÙµ¥ MFC´Â ±× ÇÔ¼öµéÀÇ À̸§À» SDK¿¡¼­¿Í °°Àº À̸§À¸·Î »ç¿ëÇÏ°í ÀÖ´Ù. ¾Õ¼­ »ìÆ캻 °Íó·³ GetClientRect³ª MoveWindow ¿ª½Ã SDK¿¡¼­¿Í °°Àº À̸§À» ±×´ë·Î »ç¿ëÇÏ°í ÀÖÀ½À» ¾Ë ¼ö ÀÖ´Ù. ±×·¸±â ¶§¹®¿¡ SDK¿¡ ´ëÇÑ °æÇèÀÌ ÀÖ´Â »ç¶÷ÀÌ MFC¸¦ ¹è¿ì±â°¡ À¯¸®ÇÏ´Ù´Â °ÍÀÌ´Ù. À̵é ÇÔ¼ö´Â ½ÇÁ¦·Î ¾î¶»°Ô ±¸ÇöµÇ¾î ÀÖÀ»±î? ´ÙÀ½°ú °°ÀÌ µ¥ÀÌÅÍ ¸â¹öÀÎ m_hWnd¸¦ ÀÌ¿ëÇØ SDK¿¡ ÀÖ´Â À©µµ¿ì API¸¦ ¹Ù·Î È£ÃâÇØ ¹ö¸°´Ù.

 CWnd Ŭ·¡½ºÀÇ ¸â¹öÇÔ¼öµéÀ» º¸¸é SDK ÇÁ·Î±×·¥½Ã¿¡ º¼ ¼ö ÀÖ´ø À̸§µéÀÌ ¸¹À½À» ¾Ë ¼ö Àִµ¥ ¸ðµÎ SDK¿¡¼­¿Í´Â ´Þ¸® ÀÎÀÚÁß¿¡ À©µµ¿ì ÇÚµéÀÌ ºüÁ®ÀÖÀ½À» ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù. ±× ÀÌÀ¯´Â À§¿¡¼­Ã³·³ À©µµ¿ì ÇÚµéÀº µ¥ÀÌÅÍ ¸â¹ö·Î ¼û°Ü ³õ°í ³ªÁß¿¡ ÀÌ¿ëÇϱ⠶§¹®ÀÌ´Ù.
 ÀÌ·± ¹æ½ÄÀ¸·Î MFCÀÇ Å¬·¡½º´Â ±¸¼ºµÇ¾î ÀÖ´Ù. Áï MFCÀÇ ¹Ø¹ÙÅÁÀÌ SDK¶ó´Â ¸»ÀÇ Àǹ̸¦ ÀÌÇØÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. À§ÀÇ ¿¹¸¦ º¸¸é¼­ MFC´Â SDK À§¿¡ ÇÑ °ãÀ» ´õ ½×¾ÆµÐ ¼ÀÀÌ´Ï ¼Óµµ°¡ ¸¹ÀÌ ´À·ÁÁö°Ú±¸³ª ¶ó°í »ý°¢ÇÒÁöµµ ¸ð¸£°Ú´Ù. ÇÏÁö¸¸ ²À ±×·¸Áö´Â ¾Ê´Ù. »ç½Ç À§ÀÇ ÇÔ¼öµéÀº ÀζóÀÎ ÇÔ¼ö·Î Á¤ÀǵǾî Àֱ⠶§¹®¿¡ ÄÄÆÄÀÏ¿¡ ¾Õ¼­ ¸ÅÅ©·Îó·³ ġȯµÇ¾î ¹ö¸®±â ¶§¹®ÀÌ´Ù. MFC¿¡¼­ Á÷Á¢ SDK API¸¦ ºÎ¸£´Â ¸ðµç ÇÔ¼ö´Â ÀζóÀÎ ÇÔ¼ö·Î ±¸ÇöµÇ¾î ÀÖ´Ù.  MFCÀÇ ÀζóÀÎ ÇÔ¼ö´Â \MSDEV\MFC\INCLUDE µð·ºÅ丮¿¡ °¡º¸¸é *.inl À̶ó´Â ÆÄÀϵéÀÌ ÀÖÀ»ÅÙµ¥ °Å±â¿¡ ¸ðµÎ Á¤ÀǵǾî ÀÖ´Ù.

 À̹ø¿¡´Â µð¹ÙÀ̽º ÄÁÅؽºÆ®¸¦ °®°í ¿¹¸¦ µé¾îº¸ÀÚ. µð¹ÙÀ̽º ÄÁÅؽºÆ®¶õ À©µµ¿ì¿¡¼­ Ãâ·ÂÀåÄ¡¿¡ ¹«¾ùÀΰ¡¸¦ Ãâ·ÂÇÏ°íÀÚ ÇÏ¸é ¹Ýµå½Ã ÇÊ¿äÇÏ´Ù. µð¹ÙÀ̽º ÄÁÅؽºÆ®¶õ Ãâ·Â´ë»óÀ» ÁöĪÇÏ´Â °ÍÀ̶ó°í »ý°¢ÇÏ¸é µÈ´Ù.
 È­¸é¿¡ ¹«¾ùÀΰ¡¸¦ Ãâ·ÂÇÏ°íÀÚ Çϸé È­¸é¿¡ ´ëÇÑ µð¹ÙÀ̽º ÄÁÅؽºÆ®°¡ ÇÊ¿äÇÏ°í ÇÁ¸°ÅÍ¿¡ ¹«¾ùÀΰ¡ Ãâ·ÂÇÏ°íÀÚ ÇÏ¸é ¿ª½Ã ÇÁ¸°ÅÍ¿¡ ´ëÇÑ µð¹ÙÀ̽º ÄÁÅؽºÆ®°¡ ÇÊ¿äÇÏ´Ù. ±×·±µ¥ µð¹ÙÀ̽º ÄÁÅؽºÆ®¸¦ »ý¼ºÇÏ¸é ±×°ÍÀÇ ¹øÈ£°¡ ¸®ÅϵȴÙ. À̸¦ ÀÎÀÚ·Î Ãâ·ÂÇÔ¼ö¸¦ È£ÃâÇÏ¸é ±×¸®·Î Ãâ·ÂÀÌ ³ª°£´Ù. ¿¹¸¦ µé¾î È­¸é¿¡ »ç°¢Çü°ú ÅؽºÆ®¸¦ Ãâ·ÂÇÏ°íÀÚ ÇÑ´Ù¸é Rectangle À̶ó´Â ÇÔ¼ö¿Í TextOut À̶õ ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¸é µÈ´Ù.

 GetDC¶ó´Â ÇÔ¼ö°¡ ¹Ù·Î À©µµ¿ì È­¸é¿¡ ´ëÇÑ µð¹ÙÀ̽º ÄÁÅؽºÆ®¸¦ »ý¼ºÇÏ¿© ±× ¹øÈ£(ÇÚµé)¸¦ µ¹·ÁÁÖ´Â ÇÔ¼öÀÌ´Ù. Rectangle°ú TextOut°ú °°ÀÌ µð¹ÙÀ̽º ÄÁÅؽºÆ®·ÎÀÇ Ãâ·Â¿¡ »ç¿ëµÇ´Â ÇÔ¼ö¸¦ GDI(Graphic Device Interface) ÇÔ¼ö¶ó Çϴµ¥ ÀÌ ÇÔ¼öµéÀÇ Æ¯Â¡Àº Ãâ·ÂÇÔ¼öÀ̱⠶§¹®¿¡ ÀÎÀÚ·Î Ãâ·Â´ë»óÀ» ÁöĪÇÏ´Â µð¹ÙÀ̽º ÄÁÅؽºÆ® ÇÚµéÀÌ ÇÊ¿äÇÏ´Ù´Â °ÍÀÌ´Ù. MFC¿¡¼­´Â ÀÌ·± GDIµé°ú µð¹ÙÀ̽º ÄÁÅؽºÆ® ÇÚµéÀ» CDC¶ó´Â Ŭ·¡½º ¾ÈÀ¸·Î Áý¾î³Ö¾î ¹ö·È´Ù. CDC´Â ´ÙÀ½°ú °°Àº ±¸Á¶¸¦ °®°í ÀÖ´Ù.

 À§ÀÇ CDC Ŭ·¡½ºÀÇ Rectangle °ú TextOut ¸â¹öÇÔ¼ö´Â ¾î¶² ±¸Á¶¸¦ °®°í ÀÖÀ»±î? ¾î´À Á¤µµ °¨ÀÌ ÀâÈù´Ù¸é MFC¿¡ Á¸ÀçÇϴ Ŭ·¡½ºµéÀÇ ±âº»±¸Á¶´Â ¾È °ÍÀ̳ª ´Ù¸§¾ø´Ù. (´Ù¸¸ ±âº»ÀûÀÎ ±¸Á¶ÀÏ »ÓÀÌÁö¸¸..) Á¤´äÀº ´ÙÀ½°ú °°´Ù.

 CWnd ¿¡¼­Ã³·³ ³»ºÎÀûÀ¸·Î À¯ÁöÇÏ°í ÀÖ´Â µð¹ÙÀ̽º ÄÁÅؽºÆ® ÇÚµéÀ» ÀÎÁö·Î ÇÏ¿© SDK¿¡ ÀÖ´Â API¸¦ ±×´ë·Î È£ÃâÇÏ°í ÀÖ´Ù. À§ÀÇ °Í ¿ª½Ã ÀζóÀÎ ÇÔ¼ö·Î Á¤ÀǵǾî ÀÖ´Ù.

 °á·ÐÀûÀ¸·Î MFCÀÇ ÇϺα¸Á¶´Â SDK¿¡ ÀÖ´Â API·Î µÇ¾î ÀÖÀ½À» ¾Ë ¼ö ÀÖ´Ù. °á±¹ MFC¶õ SDK API¸¦ ±â´ÉÀûÀ¸·Î ±¸ºÐÇÏ¿© ±× À§¿¡ Ŭ·¡½º¶õ ¿ÊÀ» ÀÔÈù °ÍÀ̶ó ÇÒ ¼ö ÀÖ´Ù. ±× ±â´ÉÀûÀÎ ºÐ·ù°¡ ¾Õ¼­ º» °Íó·³ ÇÚµéÀ» Áß½ÉÀ¸·Î ÀÌ·ç¾îÁ® ÀÖ´Ù.
 ÀÌ´Â ¾îµð±îÁö³ª ±âº»ÀûÀΠŬ·¡½ºÀÇ °æ¿ì¿¡ ÇØ´çÇÏ´Â °ÍÀÌ°í Á»´õ º¹ÀâÇÏ°í °­·ÂÇÑ ±â´ÉÀ» Á¦°øÇϴ Ŭ·¡½ºµéÀº À̸¦ ¹ÙÅÁÀ» Á¸ÀçÇÏ°í ÀÖ´Ù.