À©µµ¿ìÁî´Â ȸéÀ̳ª ÇÁ¸°ÅÍ·Î Ãâ·ÂÇÒ ¶§ GDI ¿ÀºêÁ§Æ®¸¦ »ç¿ëÇϴµ¥ ÇÚµé·Î °ü¸®¸¦ ÇÏ´Ù º¸´Ï »ç¿ëÇϱ⠺ÒÆíÇÏ´Ù. ±×·¡¼ MFC´Â GDI ¿ÀºêÁ§Æ®¸¦ Ŭ·¡½º·Î ·¡ÇÎÇÏ¿© °ü·Ã ÇÔ¼öµéÀ» ĸ½¶ÈÇÏ°í ÀÚµ¿ÈµÈ Æı«¸¦ Áö¿øÇÑ´Ù. WTLµµ ºñ½ÁÇѵ¥ GDI ¿ÀºêÁ§Æ®¸¦ Ŭ·¡½º·Î Á÷Á¢ ·¡ÇÎÇÏÁö ¾Ê°í ÅÛÇø´À¸·Î ·¡ÇÎÇÑ´Ù´Â Á¡ÀÌ Á¶±Ý ´Ù¸£´Ù.
´ëÇ¥ÀûÀÎ GDI ¿ÀºêÁ§Æ®ÀÎ ÆæÀ» ·¡ÇÎÇÏ´Â CPenT ÅÛÇø´À» ¿¬±¸ÇØ º¸ÀÚ. ÀÌ ÅÛÇø´¿¡ ´ëÇؼ´Â º°µµÀÇ ¹®¼¸¦ ÀÐÀ» ÇÊ¿äµµ ¾øÀÌ(¹®¼µµ ¾øÁö¸¸) Çì´õ ÆÄÀÏÀÇ ÅÛÇø´ ¼±¾ð¹®À» ÀÐ¾î º¸¸é ´ëÃæÀÇ ±¸Á¶¸¦ ºü¸£°Ô ÀÌÇØÇÒ ¼ö ÀÖ´Ù. ÇÁ·Î±×·¡¸Ó¿¡°Ô´Â ±Û·Î µÈ ¼³¸íº¸´Ù ¶§·Î´Â ¼Ò½º Äڵ尡 ´õ ¸íÄèÇÑ Á¤º¸¸¦ Á¦°øÇÑ´Ù. ¼Ò½º¸¦ º¸´Â °ÍÀ» µÎ·Á¿öÇÏÁö ¸»°í Ç×»ó ¼Ò½º º¸±â¸¦ Áñ±âµµ·Ï ÇÏÀÚ.
template <bool t_bManaged> class CPenT
{
public:
HPEN m_hPen;
CPenT(HPEN hPen = NULL) : m_hPen(hPen) { }
~CPenT()
{
if(t_bManaged && m_hPen != NULL)
DeleteObject();
}
º¸´Ù½ÃÇÇ ¸â¹ö´Â HPEN ÇÚµé µü Çϳª¹Û¿¡ ¾øÀ¸¸ç ´Ü¼øÈ÷ HPENÀ» ·¡ÇÎÇÒ »ÓÀÌ´Ù. »ý¼ºÀÚ´Â ·¡ÇÎÇÒ HPEN ÇÚµéÀ» Àü´Þ¹ÞµÇ µðÆúÆ® °ªÀÌ NULL·Î µÇ¾î ÀÖ¾î ÇÚµéÀ» Àü´ÞÇÏÁö ¾ÊÀ¸¸é ºó °´Ã¼·Î »ý¼ºµÈ´Ù. MFCó·³ »ý¼ºÀÚ¸¦ ÅëÇØ ÆæÀ» ¹Ù·Î »ý¼ºÇÒ ¼ö´Â ¾øÀ¸¹Ç·Î CreatePen µûÀ§ÀÇ »ý¼º ÇÔ¼ö¸¦ µû·Î È£ÃâÇØ¾ß ÇÑ´Ù.
PenT Ŭ·¡½º´Â boolÇüÀÇ ºñŸÀÔ Àμö Çϳª¸¦ ÃëÇÑ´Ù. WTLÀº ºñŸÀÔ Àμö¸¦ ŸÀÔ Àμö¿Í ½±°Ô ±¸ºÐÇϱâ À§ÇØ t_ Á¢µÎ¸¦ ºÙÀδÙ. Ȥ½Ã ºñŸÀÔ Àμö°¡ ¹ºÁö ¸ð¸¥´Ù¸é C++ ¹®¹ý¼¸¦ Àá½Ã ÂüÁ¶Çϵµ·Ï ÇÏÀÚ. ÈçÇÏ°Ô ¾²Áö ¾Ê´Â ¹®¹ýÀ̶ó »ý¼ÒÇÒ °ÍÀÌ´Ù. t_bManaged°¡ trueÀ̸é Æı«ÀÚ°¡ ÇÚµéÀ» ¾Ë¾Æ¼ Æı«ÇÏÁö¸¸ t_bManaged°¡ falseÀÌ¸é ´Ü¼øÈ÷ ·¡Çθ¸ ÇÒ »ÓÀ̸ç ÀÚµ¿ÈµÈ Æı«¸¦ ÇÏÁö ¾Ê´Â´Ù. ¿¹Á¦¸¦ ¸¸µé¾î º¸ÀÚ.
¿¹ Á¦ : GDIObject |
ºä¿¡ OnPaint Çڵ鷯°¡ ¹Ì¸® ÀÛ¼ºµÇ¾î ÀÖÀ¸¹Ç·Î ¿©±â¿¡ Ãâ·Â Äڵ带 ÀÛ¼ºÇÏ¸é µÈ´Ù. dc±îÁö ¼±¾ðµÇ¾î ÀÖÀ¸¹Ç·Î dcÀÇ ¸â¹ö ÇÔ¼ö¸¦ È£ÃâÇϱ⸸ ÇÏ¸é µÈ´Ù. ´ÙÀ½ ÄÚµå´Â »ç°¢ÇüÀ» ±×¸°´Ù.
LRESULT CGDIObjectView::OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
CPaintDC dc(m_hWnd);
dc.Rectangle(10,10,100,100);
return 0;
}
µðÆúÆ® ¼Ó¼º´ë·Î ±×·ÈÀ¸¹Ç·Î °ËÁ¤»öÀÇ »ç°¢ÇüÀÌ ±×·ÁÁú °ÍÀÌ´Ù. ¼±ÀÇ »ö»óÀ» ÆĶõ»öÀ¸·Î ¹Ù²Ù°í ½ÍÀ¸¸é ÆĶõ»ö ÆæÀ» ¸¸µé¾î DC·Î ¼±ÅÃÇÏ¸é µÈ´Ù.
LRESULT CGDIObjectView::OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
CPaintDC dc(m_hWnd);
CPenT<true> Pen, OldPen;
Pen.CreatePen(PS_SOLID,3,RGB(0,0,255));
OldPen=dc.SelectPen(Pen);
dc.Rectangle(10,10,100,100);
dc.SelectPen(OldPen);
return 0;
}
DC¿¡ GDI ¿ÀºêÁ§Æ®¸¦ »ý¼º, ¼±Åà ¹× ÇØÁ¦ÇÏ´Â ¹æ¹ýÀº Win32³ª MFC³ª ¸ðµÎ µ¿ÀÏÇÏ´Ù. µÎ ÄÚµåÀÇ ½ÇÇà °á°ú´Â ´ÙÀ½°ú °°´Ù. ÆæÀ» ¹Ù²ÞÀ¸·Î½á »ç°¢ÇüÀÇ ¿Ü°û¼±ÀÌ ´Þ¶óÁø´Ù.
CPenT ŸÀÔÀÇ °´Ã¼¸¦ ¼±¾ðÇ쵂 Àμö·Î true¸¦ ÁÖ¾î °ü¸®µÇ´Â Ææ °´Ã¼¸¦ ¸¸µé¾ú´Ù. ´Ù »ç¿ëÇÑ ÈÄ PenÀ» Æı«ÇÏÁö ¾Ê¾Æµµ Æı«ÀÚ°¡ ¾Ë¾Æ¼ Á¤¸®ÇÒ °ÍÀÌ´Ù. ÀÌ¿¡ ºñÇØ ÅÛÇø´ Àμö·Î false¸¦ ÁÙ ¶§´Â ´Ù »ç¿ëÇÑ ÈÄ DeleteObject¸¦ ¹Ýµå½Ã È£ÃâÇØ¾ß ÇÑ´Ù.
LRESULT CGDIObjectView::OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
CPaintDC dc(m_hWnd);
CPenT<false> Pen, OldPen;
Pen.CreatePen(PS_SOLID,3,RGB(0,0,255));
OldPen=dc.SelectPen(Pen);
dc.Rectangle(10,10,100,100);
dc.SelectPen(OldPen);
Pen.DeleteObject();
return 0;
}
Á¦ÀÏ ¸¶Áö¸·¿¡ DeleteObject È£ÃâÀÌ ÀÖ´Ù´Â Á¡ÀÌ ´Ù¸£´Ù. ÀÌ È£ÃâÀ» »ý·«ÇÏ¸é ´çÀåÀÇ µ¿ÀÛ¿¡´Â ÀÌ»óÀÌ ¾ø´Â °Íó·³ º¸ÀÌÁö¸¸ ¸®¼Ò½º°¡ »õ¹Ç·Î ºÒ¾ÈÁ¤ÇØÁø´Ù. MFCÀÇ CPenÀº Æı«ÀÚ°¡ ¹«Á¶°Ç µ¿ÀÛÇÏÁö¸¸ WTLÀÇ CPenT´Â Æı«ÀÚÀÇ µ¿ÀÛ ¿©ºÎ¸¦ ÅÛÇø´ Àμö·Î ¼±ÅÃÇϵµ·Ï µÇ¾î ÀÖ´Ù. ´ëºÎºÐÀÇ °æ¿ì Æı«ÀÚ°¡ ÀÚµ¿À¸·Î Æı«ÇÏ´Â °ÍÀÌ Æí¸®ÇÏ°í ¾ÈÀüÇÏÁö¸¸ ¶§·Î´Â ÀÌ·± Æı«ÀÚÀÇ µ¿ÀÛÀÌ ¹æÇØ°¡ µÉ ¼öµµ ÀÖ´Ù.
¿¹¸¦ µé¾î ½º·¹µå°£¿¡ Ææ °´Ã¼¸¦ °øÀ¯ÇѴٰųª ÇÔ¼ö ³»ºÎ¿¡¼ Ææ °´Ã¼¸¦ »ý¼ºÇÏ¿© Àü¿ª ±¸Á¶Ã¼ ³»¿¡ ÀúÀåÇØ ³õ°íÀÚ ÇÒ ¶§´Â Áö¿ª °´Ã¼¶óµµ ÇԺηΠÆı«µÇ¾î¼´Â ¾ÈµÈ´Ù. ±×·¡¼ ºñ°ü¸® ·¡ÆÛµµ µû·Î Á¦°øµÇ¸ç ÀÚÁÖ´Â ¾Æ´ÏÁö¸¸ Á¾Á¾ ÇÊ¿äÇÒ ¶§°¡ ÀÖ´Ù. ºñ°ü¸® ·¡ÆÛ´Â ´Ü¼øÈ÷ ÇÚµéÀ» ·¡Çθ¸ ÇÒ »Ó °ü¸®´Â ÇÏÁö ¾Ê´Â °ÍÀÌ´Ù. ±×·±µ¥ CPenT<true> µûÀ§ÀÇ À̸§ÀÌ ³Ê¹« ¾²±â ºÒÆíÇÏ´Ù. ±×·¡¼ WTLÀº °ü¸® ¿©ºÎ¿¡ µû¸¥ º°ÄªÀ» Á¤ÀÇÇØ ³õ¾Ò´Ù.
typedef CPenT<false> CPenHandle;
typedef CPenT<true> CPen;
°ü¸®µÇ´Â Ææ °´Ã¼¸¦ ¼±¾ðÇÏ·Á¸é CPenÀ̶ó´Â ¸íĪÀ» »ç¿ëÇÏ¸é µÇ°í °ü¸®ÇÒ ÇÊ¿ä¾øÀÌ ´Ü¼øÈ÷ Çڵ鸸 ·¡ÇÎÇÏ°í ½Í´Ù¸é CPenHandleÀ» »ç¿ëÇÏ¸é µÈ´Ù. ŸÀÔ Á¤ÀÇ¿¡ ÀÇÇØ ´ÙÀ½ µÎ ¼±¾ð¹®Àº ¿ÏÀüÈ÷ µ¿ÀÏÇÏ´Ù.
CPenT<true> Pen;
CPen Pen;
¾Æ¹«·¡µµ CPenÀ̶ó°í ¾²´Â °ÍÀÌ ´õ Æí¸®ÇÏ´Ù. ´Ù¸¥ GDI ¿ÀºêÁ§Æ®µµ ¶È°°Àº ¹æ½ÄÀ̹ǷΠµµÇ¥·Î °£·«ÇÏ°Ô Á¤¸®ÇØ º¸ÀÚ. À̸§À» ºÙÀÌ´Â ¹æ¹ý¿¡ ÀÏ°ü¼ºÀÌ ÀÖ¾î ¿Ü¿ì±â ½±´Ù. °ü¸®µÇ´Â ŸÀÔÀº MFC¿Í ¸íĪÀÌ °°¾Æ ÀÌ¹Ì Àͼ÷Çϱ⵵ ÇÏ´Ù.
GDI ¿ÀºêÁ§Æ® |
ÅÛÇø´ |
°ü¸® ·¡ÆÛ |
ºñ°ü¸® ·¡ÆÛ |
¼±Åà ÇÔ¼ö |
DC |
CDCT |
CDC |
CDCHandle |
|
Ææ |
CPenT |
CPen |
CPenHandle |
SelectPen |
ºê·¯½Ã |
CBrushT |
CBrush |
CBrushHandle |
SelectBrush |
ÆùÆ® |
CFontT |
CFont |
CFontHandle |
SelectFont |
ºñÆ®¸Ê |
CBitmapT |
CBitmap |
CBitmapHandle |
SelectBitmap |
¸®Àü |
CRgnT |
CRgn |
CRgnHandle |
SelectRgn |
DC¿¡ ¿ÀºêÁ§Æ®¸¦ ¼±ÅÃÇÏ´Â ÇÔ¼öµéµµ µû·Î Á¤ÀǵǾî ÀÖ¾î ¸®ÅÏ°ªÀ» ´ëÀÔ¹ÞÀ» ¶§ ij½ºÆÃÇÒ ÇÊ¿ä°¡ ¾ø´Ù. ½ÉÁö¾î ½ºÅå ¿ÀºêÁ§Æ®¸¦ ¼±ÅÃÇÏ´Â ÇÔ¼öµéµµ ¿ÀºêÁ§Æ® ŸÀÔº°·Î µû·Î Á¤ÀǵǾî ÀÖ´Ù.
SelectStockPen
SelectStockBrush
SelectStockFont
½ºÅå ¿ÀºêÁ§Æ® À̸§¿¡ WHITE_PEN, BLACK_BRUSH µîÀÇ ¿ÀºêÁ§Æ® ŸÀÔÀÌ Æ÷ÇԵǾî Àִµ¥ ÀÌ·¸°Ô±îÁö´Â ÇÒ ÇÊ¿ä°¡ ¾ø¾î º¸ÀδÙ. ŸÀÔ¿¡ µû¶ó ÇÔ¼ö¸¦ ±¸ºÐÇؼ ½á¾ß ÇϹǷΠ¿ÀÈ÷·Á ´õ ºÒÆíÇØ º¸ÀδÙ. ´ÙÀ½ ÄÚµå´Â ÆĶõ»öÀ¸·Î »ç°¢Çü ¿Ü°ûÀ» ±×¸®°í »¡°£»öÀ¸·Î ³»ºÎ¸¦ ä¿î´Ù. Ææ°ú ºê·¯½Ã ¿ÀºêÁ§Æ®¸¦ µ¿½Ã¿¡ »ç¿ëÇØ¾ß ÇÑ´Ù.
LRESULT CGDIObjectView::OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
CPaintDC dc(m_hWnd);
CPen Pen, OldPen;
CBrush Brush, OldBrush;
Pen.CreatePen(PS_SOLID,3,RGB(0,0,255));
Brush.CreateSolidBrush(RGB(255,0,0));
OldPen=dc.SelectPen(Pen);
OldBrush=dc.SelectBrush(Brush);
dc.Rectangle(10,10,100,100);
dc.SelectPen(OldPen);
dc.SelectBrush(OldBrush);
return 0;
}
Ææ, ºê·¯½Ã¸¦ ¼±ÅÃÇÏ´Â ÇÔ¼ö°¡ SelectPen, SelectBrush·Î ±¸ºÐµÇ¾î ÀÖÀ½À» ÁÖÀÇÇÏÀÚ. ½ÇÇà °á°ú´Â ´ÙÀ½°ú °°´Ù.
Ç×»ó °°Àº ŸÀÔÀÇ Old ÇÚµéÀ» ¼±¾ðÇÏ¿© DCÀÇ »óŸ¦ ¿ø·¡´ë·Î µ¹·Á ³õ¾Æ¾ß ÇϹǷΠ»ó´çÈ÷ ¹ø°Å·Ó´Ù. ÀÌ Á¡Àº Win32¿¡¼µµ ¸¶Âù°¡Áö°í MFC¿¡¼µµ µ¿ÀÏÇѵ¥ Æı«ÀÚ´Â ½º½º·Î¸¦ Æı«ÇÒ ¼ö´Â ÀÖÁö¸¸ DCÀÇ »óűîÁö º¹¿øÇØ ÁÖÁö´Â ¸øÇϱ⠶§¹®ÀÌ´Ù. ºÒÆíÇϱ⵵ ÇÏÁö¸¸ º¹±¸¸¦ Á¦´ë·Î ÇÏÁö ¸øÇϸé À§ÇèÇØÁö±âµµ ÇÑ´Ù. Àû¾îµµ ÀÌ ¹®Á¦¿¡ À־¸Å °´Ã¼ ÁöÇâÀÌ º° µµ¿òÀÌ ¾ÈµÈ´Ù. ¹Ý¸é GDI+´Â »óÅ°¡ ¾ø´Â ¶óÀ̺귯¸®À̱⠶§¹®¿¡ ÀÌ·± ¹®Á¦°¡ ¾øÀ¸¸ç ±×·¡¼ ´å³ÝÀÇ ÆíÀǼºÀÌ ´õ ³ô´Ù°í ÇÏ´Â °ÍÀÌ´Ù.
´ÙÀ½Àº DC¿¡ ´ëÇØ Á¤¸®ÇØ º¸ÀÚ. CDC¸¦ ·çÆ®·Î ÇÏ¿© ´ÙÀ½ ÆÄ»ý Ŭ·¡½ºµéÀÌ Á¦°øµÈ´Ù. À̸§À¸·ÎºÎÅÍ ¿ëµµ¸¦ ½±°Ô ÁüÀÛÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
CPaintDC´Â BeginPaint, EndPaint¸¦ ·¡ÇÎÇϸç CClientDC´Â GetDC, ReleaseDC¸¦ ·¡ÇÎÇÑ´Ù°í ±»ÀÌ ¼³¸íÇÏÁö ¾Ê¾Æµµ ÃßÃø °¡´ÉÇÒ °ÍÀÌ´Ù. CMemoryDC´Â ºñÆ®¸ÊÀ» »ý¼º ¹× ¼±ÅÃÇÏ¿© °£´ÜÇÑ ´õºí ¹öÆÛ¸µ ±â´ÉÀ» Á¦°øÇÑ´Ù. °£ÆíÇϱâ´Â ÇÏÁö¸¸ ºñÆ®¸ÊÀ» ¸Å¹ø »ý¼º ¹× Æı«Çϱ⠶§¹®¿¡ È¿À²Àº º°·Î ÁÁÁö ¸øÇÏ´Ù.
CDC¿¡´Â ±×¸®±â¿Í °ü·ÃµÈ ¸â¹ö ÇÔ¼öµéÀÌ ´ë°Å Æ÷ÇԵǾî ÀÖ´Ù. Ellipse, BitBlt, TextOut, DrawText µîÀÇ Ãâ·Â ÇÔ¼ö¿Í SetTextColor, SetBkMode µîÀÇ »óÅ º¯°æ ÇÔ¼ö µî Win32¿¡¼ HDC¸¦ Àμö·Î ÃëÇÏ´Â ¸ðµç ÇÔ¼öµéÀÌ CDCÀÇ ¸â¹ö¶ó°í º¸¸é µÈ´Ù. MFC¿¡ Àͼ÷ÇÑ »ç¶÷Àº MFC¿¡¼ CDC Ŭ·¡½º¸¦ ¾²´Â ¹æ¹ý°ú ¶È°°Àº ¹æ¹ý´ë·Î CDC¸¦ »ç¿ëÇÏ¸é µÈ´Ù.
ºñÆ®¸ÊÀº ´Ù¸¥ µµÇü°ú´Â ´Þ¸® ¸®¼Ò½º·Î Æ÷ÇÔÇØ¾ß ÇÑ´Ù. ¸®¼Ò½º¸¦ ÀÛ¼ºÇÏ°í »ç¿ëÇÏ´Â ¹æ¹ýÀº Win32³ª MFC¿Í ¶È°°Àºµ¥ ¿Ö³ÄÇÏ¸é ¸ðµÎ ºñÁÖ¾ó ½ºÆ©µð¿À¶ó´Â °³¹ß ȯ°æÀ» °øÀ¯ÇÏ°í Àֱ⠶§¹®ÀÌ´Ù. ¸¶¹ý»ç·Î ÇÁ·ÎÁ§Æ®¸¦ ¸¸µé¸é ¸®¼Ò½º ½ºÅ©¸³Æ®°¡ »ý¼ºµÇ°í ¸®¼Ò½º ºä¸¦ ÅëÇØ ¸®¼Ò½º¸¦ ¸¸µé°Å³ª ¿ÜºÎÀÇ ÆÄÀÏÀ» °¡Á®¿Ã ¼ö ÀÖ´Ù.
Àû´çÇÑ ºñÆ®¸Ê À̹ÌÁö¸¦ ÁغñÇÏ¿© ÇÁ·ÎÁ§Æ®ÀÇ res Æú´õ·Î º¹»çÇØ µÐ´Ù. Àß ¾Ë°ÚÁö¸¸ À©µµ¿ìÁî°¡ Á÷Á¢ Áö¿øÇÏ´Â ºñÆ®¸ÊÀº bmp¹Û¿¡ ¾ø´Ù. jpg³ª png´Â bmp·Î ¹Ù²Û ÈÄ »ç¿ëÇØ¾ß ÇÑ´Ù. ¸®¼Ò½º ºä¿¡¼ ¸®¼Ò½º Ãß°¡¸¦ ¼±ÅÃÇÑ ÈÄ °¡Á®¿À±â ¹öÆ°À» ´©¸£°í ¹Ì¸® º¹»çÇØ µÐ ºñÆ®¸Ê ÆÄÀÏÀ» ¼±ÅÃÇÑ´Ù. IDB_BITMAP1À̶ó´Â À̸§À¸·Î ÀÓÆ÷Æ®µÉ °ÍÀÌ´Ù. ÀÌÁ¦ ÀÌ ¸®¼Ò½º¸¦ ·ÎµåÇÏ¿© Ãâ·ÂÇÏ¸é µÈ´Ù.
LRESULT CGDIObjectView::OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
CPaintDC dc(m_hWnd);
CBitmap Bit,OldBit;
BITMAP BitInfo;
Bit.LoadBitmap(IDB_BITMAP1);
CDC MemDC;
MemDC.CreateCompatibleDC();
OldBit=MemDC.SelectBitmap(Bit);
Bit.GetBitmap(BitInfo);
dc.BitBlt(0,0,BitInfo.bmWidth,BitInfo.bmHeight,MemDC,0,0,SRCCOPY);
MemDC.SelectBitmap(OldBit);
return 0;
}
½ÇÇàÇØ º¸¸é ¸ÚÁø »çÁøÀÌ ³ªÅ¸³¯ °ÍÀÌ´Ù. Ã¥ ¾µ ¶§¸¶´Ù ¿Ö ³» »çÁøÀº ¾È³ª¿À³Ä°í Âô¾ó´ë±æ·¹ À̹ø °Á¿¡ ÇÑ ÄÆ ³Ö¾ú´Ù. ÀÌÈ¿¸®³ª ¸ÞÀ̺ñ »çÁøÀ» ¾²°í ½ÍÁö¸¸ »çÁø¿¡µµ ÃÊ»ó±ÇÀÌ ÀÖ¾î ÃÊ»ó±Ç ¹®Á¦°¡ ¾ø´Â »ö½Ã »çÁøÀ» ¾´ °ÍÀÌ´Ù. ¾Æ´Ï! ±×·¸°Ô ¸»ÇÏ¸é »ö½Ã°¡ ¼¿îÇØÇÏÁö ¾Ê´À³Ä°í? °ÆÁ¤ ¸¶½Ã¶ó. ¿ì¸® »ö½Ã´Â ¿Á¼ÇÁúÇÏ´À¶ó ¿ö³« ¹Ù»Ú¼Å¼ ÀÌ·± ±Û Àý´ë·Î ¾È Àд´Ù.
ºñÆ®¸ÊÀ» Ãâ·ÂÇÏ´Â ÀýÂ÷´Â ³ª¸§´ë·Î º¹ÀâÇÏ´Ù. ¸ÕÀú Ãâ·ÂÇÒ ºñÆ®¸ÊÀ» ·ÎµåÇØ¾ß ÇÑ´Ù. LoadBitmap ÇÔ¼ö·Î ¹®ÀÚ¿ ¶Ç´Â Á¤¼öÇüÀÇ ID¸¦ Àü´ÞÇϴµ¥ ¸®¼Ò½º ÆíÁý±â°¡ ¸®¼Ò½º¸¦ Á¤¼ö·Î °ü¸®ÇϹǷΠ¿ì¸®´Â IDB_BITMAP1À̶ó´Â ¸ÅÅ©·Î »ó¼ö¸¦ Àü´ÞÇÏ¸é µÈ´Ù. LoadBitmapÀÇ Àμö ŸÀÔÀº ´ÙÀ½°ú °°ÀÌ Á¤ÀǵǾî ÀÖ´Ù.
class _U_STRINGorID
{
public:
_U_STRINGorID(LPCTSTR lpString) : m_lpstr(lpString)
{ }
_U_STRINGorID(UINT nID) : m_lpstr(MAKEINTRESOURCE(nID))
{ }
LPCTSTR m_lpstr;
};
°³³äÀûÀÎ °ø¿ëü¶ó°í ÇÒ ¼ö Àִµ¥ ¹®ÀÚ¿ ¶Ç´Â Á¤¼ö¸¦ ·¡ÇÎÇ쵂 Á¤¼ö°¡ Àü´ÞµÇ¸é ¹®ÀÚ¿·Î ij½ºÆÃÇÏ¿© ÀúÀåÇÑ´Ù. ÀÌ Å¬·¡½º°¡ Á¤¼ö ID¸¦ ¹®ÀÚ¿·Î ¹Ù²ã ³õÀ¸¹Ç·Î MAKEINTRESOURCE ¸ÅÅ©·Î¸¦ ÀÏÀÏÀÌ ¾²Áö ¾Ê¾Æµµ µÈ´Ù. ªÁö¸¸ ¾ÆÁÖ À¯¿ëÇÑ Å¬·¡½º¶ó°í ÇÒ ¼ö ÀÖ´Ù.
¸Þ¸ð¸® DC ¸¸µé¾î ·ÎµåÇÑ ºñÆ®¸ÊÀ» ¼±ÅÃÇØ ³õ°í ºñÆ®¸ÊÀÇ Å©±â¸¦ Á¶»çÇÑ´Ù. ±×¸®°í BitBlt ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ȸéÀ¸·Î Àü¼ÛÇÑ´Ù. Ãâ·ÂÇÑ ÈÄ¿¡µµ ¸Þ¸ð¸® DC¸¦ ÇØÁ¦ÇÏ°í ºñÆ®¸ÊÀ» Æı«ÇØ¾ß Çϴµ¥ ´ÙÇàÈ÷ ÀÌ µ¿ÀÛÀº Æı«ÀÚ°¡ ¾Ë¾Æ¼ ó¸®ÇÑ´Ù. ¼Óµµ ¹®Á¦·Î ÀÎÇØ ºñÆ®¸Ê Ãâ·Â ÀýÂ÷´Â Win32³ª MFC³ª ¿©ÀüÈ÷ ºÒÆíÇÏ´Ù. Çϵå¿þ¾î ȯ°æÀÌ ÁÁ¾ÆÁø¸¸Å Á» ´õ Æí¸®ÇÏ°Ô ¾µ ¼ö ÀÖ´Â ·¡ÆÛ ÇÔ¼ö¸¦ Á¦°øÇØ ÁÖ¸é ÁÁÀ»ÅÙµ¥ ¾Æ½±´Ù.
¾ÆÀÌÄÜ, Ä¿¼, ¹®ÀÚ¿, ´ëÈ»óÀÚ µîÀÇ ¸®¼Ò½º¸¦ ÀÛ¼º ¹× È°¿ëÇÏ´Â ¹æ¹ýµµ MFC¿Í °ÅÀÇ µ¿ÀÏÇÏ´Ù. ´ëÈ»óÀÚ¿¡ ´ëÇؼ´Â ´ÙÀ½ Àý¿¡¼ µû·Î ½Ç½ÀÀ» ÇØ º¼ °ÍÀÌ´Ù.
Win32´Â ÁÂÇ¥, Å©±â, »ç°¢Çü µîÀ» POINT, SIZE, RECT µîÀÇ ±¸Á¶Ã¼·Î Á¦°øÇÑ´Ù. MFC¿Í WTLÀº ÆíÀǼºÀ» ³ôÀ̱â À§ÇØ ÀÌ ±¸Á¶Ã¼µéÀ» CPoint, CSize, CRect µîÀÇ Å¬·¡½º·Î ·¡ÇÎÇØ ³õ¾Ò´Ù. ÀÌ ¿Ü¿¡ ¹®ÀÚ¿À» °ü¸®ÇÏ´Â CString Ŭ·¡½ºµµ Á¦°øµÇ¾î °¡º¯ ±æÀÌÀÇ ¹®ÀÚ ¹è¿À» Á¦°øÇÑ´Ù. ÀÌ Å¬·¡½ºµéÀ» »ç¿ëÇϸé Äڵ尡 Á¶±Ý ´õ ª¾ÆÁö°í ¾ÈÀü¼ºµµ ³ô¾ÆÁø´Ù. ´ÙÀ½ ÄÚµå´Â »ç°¢ ¿µ¿ª¿¡ ±ä ¹®ÀÚ¿À» ¿öµå·¦ÇÏ¿© Ãâ·ÂÇÑ´Ù.
#include <atlmisc.h>
LRESULT CGDIObjectView::OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
CPaintDC dc(m_hWnd);
CRect rt;
rt.SetRect(10,10,250,100);
CString str=TEXT("û»êÀº ³ª¸¦ º¸°í ¸»¾øÀÌ »ì¶ó ÇÏ°í")
TEXT("â°øÀº ³ª¸¦ Àâ°í Ƽ¾øÀÌ »ì¶ó ÇÏ³× »ç¶ûµµ ¹þ¾î ³õ°í ¹Ì¿òµµ ¹þ¾î ³õ°í")
TEXT("¹°°°ÀÌ ¹Ù¶÷°°ÀÌ »ì´Ù°¡ °¡¶ó Çϳ×");
dc.DrawText(str,-1,&rt,DT_WORDBREAK);
return 0;
}
CRect, CString, CBrush µîÀº ¾ÆÁÖ Ä£¼÷ÇÏÁö¸¸ ¹Ù·Î´Â ¾µ ¼ö ¾ø°í ÀÌ Å¬·¡½ºµéÀÌ Á¤ÀǵǾî ÀÖ´Â atlmisc.h Çì´õ ÆÄÀÏÀ» ÀÎŬ·çµåÇØ¾ß ÇÑ´Ù. ÆíÀÇ»ó OnPaint ¹Ù·Î À§¿¡¼ ÀÎŬ·çµåÇߴµ¥ stdafx.h¿¡ ÀÎŬ·çµåÇÏ´Â °Ô Á¤¼®ÀÌ´Ù. »ç°¢¿µ¿ª¿¡ ¹®ÀÚ¿ÀÌ ÀÚµ¿ °³ÇàµÇ¾î Ãâ·ÂµÉ °ÍÀÌ´Ù.
MFC¿¡µµ µ¿ÀÏÇÑ À̸§ÀÇ À¯Æ¿¸®Æ¼ Ŭ·¡½ºµéÀÌ Àִµ¥ MFC ÇÁ·ÎÁ§Æ®¿¡¼ WTLÀÇ Å¬·¡½º ´ë½Å MFCÀÇ Å¬·¡½º¸¦ ¾²°í ½Í´Ù¸é ´ÙÀ½ ¸ÅÅ©·Î¸¦ Á¤ÀÇÇÏ¸é µÈ´Ù. Ŭ·¡½º ¼±¾ð¹®ÀÌ ÀÌ ¸ÅÅ©·Î¿¡ µû¶ó Á¶°ÇºÎ ÄÄÆÄÀϵȴÙ.
_WTL_NO_WTYPES : CSize, CPoint, CRect¸¦ Á¤ÀÇÇÏÁö ¾ÊÀ½
_WTL_NO_CSTRING : CStringÀ» Á¤ÀÇÇÏÁö ¾ÊÀ½
ÀÌ Å¬·¡½ºµéÀº ¶È°°Àº À̸§À¸·Î MFC¿¡µµ ÀÖ°í WTL¿¡µµ ÀÖÀ¸¹Ç·Î MFC·Î ÇÁ·ÎÁ§Æ®¸¦ ÇÒ ¶§´Â ±»ÀÌ ¾çÂÊÀ» ´Ù »ç¿ëÇÒ ÇÊ¿ä°¡ ¾ø´Ù.