MFCÀÇ ±¸Á¶
À©µµ¿ì ÇÁ·Î±×·¡¹Ö °æÇèÀÌ ÀÖ´Ù¸é MFC¸¦ ÀÌÇØÇϱⰡ ½¬¿ï °ÍÀÌ´Ù. ¸¸ÀÏ
À©µµ¿ì ÇÁ·Î±×·¡¹Ö °æÇè Áß¿¡µµ SDKÇÁ·Î±×·¡¹Ö °æÇèÀÌ ÀÖ´Ù¸é ÈξÀ ´õ ÀÌÇØÇϱ⠽¬¿ï
°ÍÀÌ´Ù. ¿Ö³ÄÇϸé MFC´Â SDKÀÇ ±¸Á¶¸¦ °ÅÀÇ ±×´ë·Î Ŭ·¡½º·Î °¡Á®´Ù ¸¸µé¾ú±â ¶§¹®ÀÌ´Ù.
ÀÌÁ¦ºÎÅÍ ÇÏ´Â ¼³¸íÀº ÁÖ·Î SDK¿Í °ü·ÃÇÑ ³»¿ëÀÌ ¸¹´Ù.
MFCÀÇ ÇϺΠ±¸Á¶°¡ SDKÀÌ°í À̹ø ÀåÀº ±× ±¸Á¶¸¦ ¼³¸íÇÏ´Â ºÎºÐÀ̱⠶§¹®ÀÌ´Ù.
µû¶ó¼ SDK ÇÁ·Î±×·¡¹ÖÀ» ÇØ º» °æÇèÀÌ ¾ø´Ù¸é ÀÌÇØÇϱⰡ Èûµé °ÍÀÌ´Ù. ÇÏÁö¸¸ ÀÌ
ÀåÀº MFCÀÇ ³»ºÎ¸¦ ¼³¸íÇÏ´Â ºÎºÐÀ̹ǷΠ¸ô¶óµµ º° »ó°üÀº ¾øÁö¸¸ ³»¿ëÀ» Àß ÀÌÇØÇÑ´Ù¸ç
±×¸¸Å ÇÁ·Î±×·¡¹ÖÀ» Çϱâ´Â ½¬¿ï °ÍÀÌ´Ù. ÀÌÁ¦ºÎÅÍ SDK¸¦ ¹ÙÅÁÀ¸·Î MFCÀÇ ³»ºÎ ±¸Á¶°¡
¾î¶² ½ÄÀ¸·Î ±¸¼ºµÇ¾î ÀÖ´ÂÁö C++À» Áß½ÉÀ¸·Î ¾Ë¾Æº¸ÀÚ.
SDK À©µµ¿ì ÇÁ·Î±×·¡¹ÖÀ» ÇÏ´Ùº¸¸é ÇÚµéÀ̶õ ¸»À» ¸¹ÀÌ µè°Ô µÈ´Ù. ÇÚµéÀ̶õ À©µµ¿ì, µð¹ÙÀ̽º ÄÁÅؽºÆ®, ºñÆ®¸Ê, ¸Þ¸ð¸® µîÀÇ ¿ÀºêÁ§Æ®¶ó ÇÒ ¼ö ÀÖ´Â °ÍÀ» ÁöĪÇϴµ¥ »ç¿ëµÈ´Ù. ÇÚµéÀ» ¾î¶² ¿ÀºêÁ§Æ®¸¦ ±¸º°Çϱâ À§ÇØ »ç¿ëÇÏ´Â ÀÏÁ¾ÀÇ ÀϷùøÈ£¶ó°í »ý°¢Çصµ µÉ µíÇÏ´Ù. ¿¹¸¦ µé¾î À©µµ¿ì ÇÚµéÀ̶õ °¢ À©µµ¿ì¸¦ ±¸º°Çϱâ À§ÇØ À©µµ¿ìº°·Î ÇÒ´çµÈ ¹øÈ£¶ó°í »ý°¢ÇÏ´Â °ÍÀÌ´Ù. À§µµ¿ì¿Í °ü°èµÈ ¸ðµç API¿¡´Â Á¶ÀÛ ´ë»óÀÌ µÇ´Â À©µµ¿ì¸¦ ÁöĪÇÏ´Â ¹«¾ùÀΰ¡°¡ ÇÊ¿äÇÏ´Ù. ±×·¡¼ ±×·± APIµéÀÇ ÀÎÀÚ¸¦ »ìÆ캸¸é ±×·± ¿ëµµ·Î »ç¿ëµÇ´Â ÀÎÀÚ°¡ ÀÖ´Ù .¹Ù·Î ±× ÀÎÀÚ·Î À©µµ¿ì ÇÚµéÀÌ »ç¿ëµÇ´Â °ÍÀÌ´Ù. ¿¹¸¦ µé¾î À©µµ¿ìÀÇ Å©±â¸¦ ¾ò°í ½ÍÀ¸¸é GetClientRect API¸¦ »ç¿ëÇÏ¸é µÈ´Ù. »ç¿ë¹ýÀº ´ÙÀ½°ú °°´Ù.
RECT rc;
GetClientRect(hwnd, &rc); // hwnd ´Â À©µµ¿ì ÇÚµé
¶Ç À©µµ¿ìÀÇ Å©±â³ª À§Ä¡¸¦ º¯°æÇÏ°í ½Í´Ù¸é MoveWindow API¸¦ ÀÌ¿ëÇÏ¸é µÈ´Ù.
MoveWindow(hwnd, x, y, x2, y2, TRUE);
À§ÀÇ µÎ API¸¦ º¸¸é ÀÛ¾÷´ë»óÀÎ À©µµ¿ì¸¦ ÁöĪÇϱâ À§ÇØ Ã¹ ¹ø° ÀÎÀÚ·Î À©µµ¿ì ÇÚµéÀ» ÀԷ¹ްí ÀÖÀ½À» ¾Ë ¼ö ÀÖ´Ù. ÀÌ·± À©µµ¿ì ÇÚµé°ú À©µµ¿ì °ü·Ã API¸¦ ¹ÙÅÁÀ¸·Î MFC¿¡¼´Â CWnd¶ó´Â Ŭ·¡½º¸¦ »ý¼ºÇÏ¿´´Ù. CWnd Ŭ·¡½º¿¡´Â À©µµ¿ì¿Í °ü·ÃÀÖ´Â ¸ðµç SDKÀÇ ÇÔ¼öµéÀÌ µé¾î°¡ ÀÖ´Ù. ¾ÕÀÇ ¿¹¿¡ ºñÃß¾î º¸ÀÚ¸é ´ë·« ´ÙÀ½°ú °°Àº ¸ð¾çÀ» ¶ì°Ô µÈ´Ù.
class CWnd : public CCmdTarget
{
HWND
m_hWnd;
.......
BOOL
GetClientRect(LPRECT lpRect);
BOOL MoveWindow(int
x, int y, int width, int height, BOOL bDraw = TRUE);
........
}
À§¿¡ CWnd Ŭ·¡½ºÀÇ Á¤ÀǸ¦ ¾ÆÁÖ ¾à°£ º¸¿´´Âµ¥ ½ÇÁ¦ CWnd Ŭ·¡½ºÀÇ Á¤ÀǸ¦
º¸°í ½ÍÀ¸¸é MSDEV\MFC\INCLUDE µð·ºÅ丮¿¡ ÀÖ´Â AFXWIN.H¸¦ º¸±â ¹Ù¶õ´Ù. »ý°¢º¸´Ù
µ¢Ä¡°¡ ±²ÀåÈ÷ Ŭ °ÍÀÌ´Ù. AFXWIN.H¿¡´Â MFCŬ·¡½º ´ëºÎºÐÀÇ Á¤ÀÇ°¡ µé¾îÀÖ´Ù. À§ÀÇ
CWnd Ŭ·¡½º¸¦ º¸¸é µ¥ÀÌÅÍ ¸â¹ö·Î m_hWnd °¡ ÀÖ´Ù. ¹Ù·Î À©µµ¿ì ÇÚµéÀÌ´Ù.
¸â¹öÇÔ¼ö·Î´Â À©µµ¿ì¿¡°Ô ¹«¾ùÀΰ¡ ÀÛ¾÷À» ÇÒ ¼ö ÀÖ´Â °ÍµéÀÌ Àֱ⠸¶·ÃÀÎÀÏÅÙµ¥
MFC´Â ±× ÇÔ¼öµéÀÇ À̸§À» SDK¿¡¼¿Í °°Àº À̸§À¸·Î »ç¿ëÇÏ°í ÀÖ´Ù. ¾Õ¼ »ìÆ캻
°Íó·³ GetClientRect³ª MoveWindow ¿ª½Ã SDK¿¡¼¿Í °°Àº À̸§À» ±×´ë·Î »ç¿ëÇÏ°í
ÀÖÀ½À» ¾Ë ¼ö ÀÖ´Ù. ±×·¸±â ¶§¹®¿¡ SDK¿¡ ´ëÇÑ °æÇèÀÌ ÀÖ´Â »ç¶÷ÀÌ MFC¸¦ ¹è¿ì±â°¡
À¯¸®ÇÏ´Ù´Â °ÍÀÌ´Ù. À̵é ÇÔ¼ö´Â ½ÇÁ¦·Î ¾î¶»°Ô ±¸ÇöµÇ¾î ÀÖÀ»±î? ´ÙÀ½°ú °°ÀÌ µ¥ÀÌÅÍ
¸â¹öÀÎ m_hWnd¸¦ ÀÌ¿ëÇØ SDK¿¡ ÀÖ´Â À©µµ¿ì API¸¦ ¹Ù·Î È£ÃâÇØ ¹ö¸°´Ù.
BOOL CWnd::GetClientRect(LPRECT lpRect)
{
::GetClientRect(m_hWnd,
lpRect);
}
BOOL MoveWindow(int x, int y, int width, int height, BOOL bDraw =
TRUE)
{
::MoveWindow(m_hWnd,
x, y, width, height)
}
CWnd Ŭ·¡½ºÀÇ ¸â¹öÇÔ¼öµéÀ» º¸¸é SDK ÇÁ·Î±×·¥½Ã¿¡ º¼ ¼ö ÀÖ´ø À̸§µéÀÌ
¸¹À½À» ¾Ë ¼ö Àִµ¥ ¸ðµÎ SDK¿¡¼¿Í´Â ´Þ¸® ÀÎÀÚÁß¿¡ À©µµ¿ì ÇÚµéÀÌ ºüÁ®ÀÖÀ½À»
¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù. ±× ÀÌÀ¯´Â À§¿¡¼Ã³·³ À©µµ¿ì ÇÚµéÀº µ¥ÀÌÅÍ ¸â¹ö·Î ¼û°Ü ³õ°í
³ªÁß¿¡ ÀÌ¿ëÇϱ⠶§¹®ÀÌ´Ù.
ÀÌ·± ¹æ½ÄÀ¸·Î MFCÀÇ Å¬·¡½º´Â ±¸¼ºµÇ¾î ÀÖ´Ù. Áï MFCÀÇ ¹Ø¹ÙÅÁÀÌ SDK¶ó´Â
¸»ÀÇ Àǹ̸¦ ÀÌÇØÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. À§ÀÇ ¿¹¸¦ º¸¸é¼ MFC´Â SDK À§¿¡ ÇÑ °ãÀ» ´õ
½×¾ÆµÐ ¼ÀÀÌ´Ï ¼Óµµ°¡ ¸¹ÀÌ ´À·ÁÁö°Ú±¸³ª ¶ó°í »ý°¢ÇÒÁöµµ ¸ð¸£°Ú´Ù. ÇÏÁö¸¸ ²À ±×·¸Áö´Â
¾Ê´Ù. »ç½Ç À§ÀÇ ÇÔ¼öµéÀº ÀζóÀÎ ÇÔ¼ö·Î Á¤ÀǵǾî Àֱ⠶§¹®¿¡ ÄÄÆÄÀÏ¿¡ ¾Õ¼ ¸ÅÅ©·Îó·³
ġȯµÇ¾î ¹ö¸®±â ¶§¹®ÀÌ´Ù. MFC¿¡¼ Á÷Á¢ SDK API¸¦ ºÎ¸£´Â ¸ðµç ÇÔ¼ö´Â ÀζóÀÎ
ÇÔ¼ö·Î ±¸ÇöµÇ¾î ÀÖ´Ù. MFCÀÇ ÀζóÀÎ ÇÔ¼ö´Â \MSDEV\MFC\INCLUDE µð·ºÅ丮¿¡
°¡º¸¸é *.inl À̶ó´Â ÆÄÀϵéÀÌ ÀÖÀ»ÅÙµ¥ °Å±â¿¡ ¸ðµÎ Á¤ÀǵǾî ÀÖ´Ù.
À̹ø¿¡´Â µð¹ÙÀ̽º ÄÁÅؽºÆ®¸¦ °®°í ¿¹¸¦ µé¾îº¸ÀÚ. µð¹ÙÀ̽º ÄÁÅؽºÆ®¶õ
À©µµ¿ì¿¡¼ Ãâ·ÂÀåÄ¡¿¡ ¹«¾ùÀΰ¡¸¦ Ãâ·ÂÇÏ°íÀÚ ÇÏ¸é ¹Ýµå½Ã ÇÊ¿äÇÏ´Ù. µð¹ÙÀ̽º ÄÁÅؽºÆ®¶õ
Ãâ·Â´ë»óÀ» ÁöĪÇÏ´Â °ÍÀ̶ó°í »ý°¢ÇÏ¸é µÈ´Ù.
ȸ鿡 ¹«¾ùÀΰ¡¸¦ Ãâ·ÂÇÏ°íÀÚ Çϸé ȸ鿡 ´ëÇÑ µð¹ÙÀ̽º ÄÁÅؽºÆ®°¡ ÇÊ¿äÇÏ°í
ÇÁ¸°ÅÍ¿¡ ¹«¾ùÀΰ¡ Ãâ·ÂÇÏ°íÀÚ ÇÏ¸é ¿ª½Ã ÇÁ¸°ÅÍ¿¡ ´ëÇÑ µð¹ÙÀ̽º ÄÁÅؽºÆ®°¡ ÇÊ¿äÇÏ´Ù.
±×·±µ¥ µð¹ÙÀ̽º ÄÁÅؽºÆ®¸¦ »ý¼ºÇÏ¸é ±×°ÍÀÇ ¹øÈ£°¡ ¸®ÅϵȴÙ. À̸¦ ÀÎÀÚ·Î Ãâ·ÂÇÔ¼ö¸¦
È£ÃâÇÏ¸é ±×¸®·Î Ãâ·ÂÀÌ ³ª°£´Ù. ¿¹¸¦ µé¾î ȸ鿡 »ç°¢Çü°ú ÅؽºÆ®¸¦ Ãâ·ÂÇÏ°íÀÚ
ÇÑ´Ù¸é Rectangle À̶ó´Â ÇÔ¼ö¿Í TextOut À̶õ ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¸é µÈ´Ù.
HDC hDC = GetDC(hWnd); // ȸ鿡 ´ëÇÑ µð¹ÙÀ̽º ÄÁÅؽºÆ®¸¦ ¾ò´Â´Ù.
Rectangle(hDC, 10, 10, 100, 100); // »ç°¢ÇüÀ» ±×¸°´Ù.
TextOut(hDC, 10, 10, "Sample", 6); // ÅؽºÆ®¸¦ Ãâ·ÂÇÑ´Ù.
ReleaseDC(hWnd, hDC); // ȸ鿡 ´ëÇÑ
µð¹ÙÀ̽º ÄÁÅؽºÆ®¸¦ ¹ÝȯÇÑ´Ù.
GetDC¶ó´Â ÇÔ¼ö°¡ ¹Ù·Î À©µµ¿ì ȸ鿡 ´ëÇÑ µð¹ÙÀ̽º ÄÁÅؽºÆ®¸¦ »ý¼ºÇÏ¿© ±× ¹øÈ£(ÇÚµé)¸¦ µ¹·ÁÁÖ´Â ÇÔ¼öÀÌ´Ù. Rectangle°ú TextOut°ú °°ÀÌ µð¹ÙÀ̽º ÄÁÅؽºÆ®·ÎÀÇ Ãâ·Â¿¡ »ç¿ëµÇ´Â ÇÔ¼ö¸¦ GDI(Graphic Device Interface) ÇÔ¼ö¶ó Çϴµ¥ ÀÌ ÇÔ¼öµéÀÇ Æ¯Â¡Àº Ãâ·ÂÇÔ¼öÀ̱⠶§¹®¿¡ ÀÎÀÚ·Î Ãâ·Â´ë»óÀ» ÁöĪÇÏ´Â µð¹ÙÀ̽º ÄÁÅؽºÆ® ÇÚµéÀÌ ÇÊ¿äÇÏ´Ù´Â °ÍÀÌ´Ù. MFC¿¡¼´Â ÀÌ·± GDIµé°ú µð¹ÙÀ̽º ÄÁÅؽºÆ® ÇÚµéÀ» CDC¶ó´Â Ŭ·¡½º ¾ÈÀ¸·Î Áý¾î³Ö¾î ¹ö·È´Ù. CDC´Â ´ÙÀ½°ú °°Àº ±¸Á¶¸¦ °®°í ÀÖ´Ù.
class CDC : public CObject
{
HDC
m_hDC;
..............
BOOL
Rectangle(int x1, int y1, int x2, int y2);
BOOL
TextOut(int x, int y, LPSTR lpstr, int size);
...............
}
À§ÀÇ CDC Ŭ·¡½ºÀÇ Rectangle °ú TextOut ¸â¹öÇÔ¼ö´Â ¾î¶² ±¸Á¶¸¦ °®°í ÀÖÀ»±î? ¾î´À Á¤µµ °¨ÀÌ ÀâÈù´Ù¸é MFC¿¡ Á¸ÀçÇϴ Ŭ·¡½ºµéÀÇ ±âº»±¸Á¶´Â ¾È °ÍÀ̳ª ´Ù¸§¾ø´Ù. (´Ù¸¸ ±âº»ÀûÀÎ ±¸Á¶ÀÏ »ÓÀÌÁö¸¸..) Á¤´äÀº ´ÙÀ½°ú °°´Ù.
BOOL CDC::Rectangle(int x1, int y1, int x2, int y2)
{
::Rectangle(m_hDC,
x1, y1, x2, y2);
}
BOOL TextOut(int x, int y, LPSTR lpstr, int size)
{
::TextOut(m_hDC,
x, y, lpstr, size);
}
CWnd ¿¡¼Ã³·³ ³»ºÎÀûÀ¸·Î À¯ÁöÇÏ°í ÀÖ´Â µð¹ÙÀ̽º ÄÁÅؽºÆ® ÇÚµéÀ» ÀÎÁö·Î ÇÏ¿© SDK¿¡ ÀÖ´Â API¸¦ ±×´ë·Î È£ÃâÇÏ°í ÀÖ´Ù. À§ÀÇ °Í ¿ª½Ã ÀζóÀÎ ÇÔ¼ö·Î Á¤ÀǵǾî ÀÖ´Ù.
°á·ÐÀûÀ¸·Î MFCÀÇ ÇϺα¸Á¶´Â SDK¿¡ ÀÖ´Â API·Î µÇ¾î ÀÖÀ½À» ¾Ë ¼ö ÀÖ´Ù.
°á±¹ MFC¶õ SDK API¸¦ ±â´ÉÀûÀ¸·Î ±¸ºÐÇÏ¿© ±× À§¿¡ Ŭ·¡½º¶õ ¿ÊÀ» ÀÔÈù °ÍÀ̶ó
ÇÒ ¼ö ÀÖ´Ù. ±× ±â´ÉÀûÀÎ ºÐ·ù°¡ ¾Õ¼ º» °Íó·³ ÇÚµéÀ» Áß½ÉÀ¸·Î ÀÌ·ç¾îÁ® ÀÖ´Ù.
ÀÌ´Â ¾îµð±îÁö³ª ±âº»ÀûÀΠŬ·¡½ºÀÇ °æ¿ì¿¡ ÇØ´çÇÏ´Â °ÍÀÌ°í Á»´õ º¹ÀâÇÏ°í
°·ÂÇÑ ±â´ÉÀ» Á¦°øÇϴ Ŭ·¡½ºµéÀº À̸¦ ¹ÙÅÁÀ» Á¸ÀçÇÏ°í ÀÖ´Ù.