3.Ãâ·Â

°¡.GDI ¿ÀºêÁ§Æ®

À©µµ¿ìÁî´Â È­¸éÀ̳ª ÇÁ¸°ÅÍ·Î Ãâ·ÂÇÒ ¶§ 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·Î ÇÁ·ÎÁ§Æ®¸¦ ÇÒ ¶§´Â ±»ÀÌ ¾çÂÊÀ» ´Ù »ç¿ëÇÒ ÇÊ¿ä°¡ ¾ø´Ù.