View¿¡¼ ±ô¹ÚÀÓ ¹®Á¦ ÇØ°á
VisualC++(MFC ÇÁ·Î±×·¥)¿¡¼ View¸¦ »ý¼ºÇϰí OnDrawÇÔ¼ö¿¡¼ ±×¸²À» ±×¸®´Â ±¸Á¶ÀÇ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ °æ¿ì ÀϹÝÀûÀÎ ¹æ¹ýÀ» »ç¿ëÇϸé À©µµ¿ì Å©±â º¯°æµîÀ» ÇÒ ¶§ ȸéÀÌ ±ô¹ÚÀÌ°í ¼Óµµ ¶ÇÇÑ ´À·Á º¸±â¿¡ ÁÁÁö ¾Ê°í, ¶ÇÇÑ ÀÏÁ¤ ÁÖ±â·Î ȸéÀ» °»½ÅÇØ¾ß ÇÏ´Â °æ¿ì¶ó¸é ±× °»½Å Áֱ⠸¶´Ù Àüü ȸéÀÌ ±ô¹ÚÀδٴ °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. ÀÌ·± ¹®Á¦¸¦ °Ý¾î º» »ç¶÷¸¸ ÀÌ ³»¿ëÀ» º¸±â ¹Ù¶õ´Ù. ±×·¸Áö ¾ÊÀº »ç¶÷ÀÌ º¸¾ÒÀ» °æ¿ì È¥¶õ¸¸ °¡ÁßµÉ ¼ö ÀÖ´Ù. Âü°í·Î Ã¥¿¡¼ ÀÌ·± ³»¿ëÀº ãÀ» ¼ö ¾ø¾î ±¸ÇöÇÑ ³»¿ëÀÌ´Ù.
VisualC++ÀÌ ¾÷±×·¹ÀÌµå µÇ¸é ÀÌ ¹®Á¦´Â View»ý¼º ¿É¼ÇÀ¸·Î 󸮰¡ °¡´ÉÇϵµ·Ï ÇØ°áµÇ¸®¶ó »ý°¢µÇ³ª ºÒÇàÈ÷µµ ÇöÀç´Â ±×·± ¿É¼ÇÀÌ ¾ø´Â °ÍÀ¸·Î ¾Ë°í ÀÖ´Ù. ÀÌ ¹®Á¦¸¦ ÇØ°áÇÏ·Á¸é...
1. ȸé Å©±â¿¡ ÇØ´çÇÏ´Â Bitmap±×¸²À» »ý¼ºÇÑ´Ù.
2. OnDrawÇÔ¼ö¿¡¼ »ý¼ºµÈ BitmapÇÚµé(µð¹ÙÀ̽º ÄÁÅýºÆ® ÇÚµé)À» ¾ò´Â´Ù.
3. pDC´ë½Å »ý¼ºµÈ Bitmap ÇÚµéÀ» »ç¿ëÇÏ¿© ¿øÇÏ´Â ±×¸²À» ±×¸°´Ù(ȸé´ë½Å Bitmap¿¡´Ù ±×¸²À» ±×¸°´Ù).
4. Bitmap ÇÚµéÀ» ReleaseÇØ ÁØ´Ù.
5. BitmapÀÇ ³»¿ëÀ» ȸé»ó¿¡ Ãâ·ÂÇÑ´Ù.
6. WM_ERASEBKGND ¸Þ½ÃÁö¿¡¼ »ý¼ºµÈ ÇÔ¼ö¿¡¼ ¾Æ¹«Àϵµ ÇÏÁö ¾Ê°í return FALSEÇØ ÁØ´Ù.
ÀÌ Àüü °úÁ¤À» ½ÇÇàÇϱâ À§Çؼ´Â CBitmap¿¡ ´ëÇÏ¿© ¾î´À Á¤µµ Áö½ÄÀÌ ÀÖ¾î¾ß ÇÑ´Ù. µû¶ó¼ CBackImage¶ó´Â Class¸¦ ÀÛ¼ºÇÏ¿© CBitmap¿¡ ´ëÇÏ¿© Á¦´ë·Î ¾ËÁö ¸øÇصµ »ç¿ë °¡´ÉÇÏ°Ô Çß´Ù. CBackImage¿¡¼ »ç¿ëÇÏ´Â ÇÔ¼ö¸¦ º¸¸é ´ÙÀ½°ú °°´Ù.
void Create(CDC *pDC,
int nWidth, int nHeight); //Bitmap
»ý¼º, Å©±â°¡ ¹Ù²ð¶§ »èÁ¦ÈÄ »ý¼ºÇÔ
CDC* GetBitmapDC(CDC*
pDC); //Bitmap
ÇÚµéÀ» ¾ò´Â´Ù.
void
ReleaseBitmapDC(); //Bitmap
ÇÚµéÀ» ReleaseÇÑ´Ù.
void
Draw(CDC *pDC); //BitmapÀÇ
±×¸²À» ȸé»ó¿¡ ±×¸°´Ù.
µ¥¸ð ÇÁ·Î±×·¥
void CViewFlickerView::OnDraw(CDC* pDC)
{
CViewFlickerDoc*
pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for
native data here
//1. ȸé Å©±â¿¡ ÇØ´çÇÏ´Â Bitmap±×¸²À»
»ý¼ºÇÑ´Ù.
//CreateÇÔ¼ö´Â
³»ºÎÀûÀ¸·Î ±×¸² Å©±â°¡ º¯°æµÇÁö ¾ÊÀ¸¸é »õ·Î »ý¼ºµÇÁö ¾Êµµ·Ï ±¸¼ºµÇ¾î ÀÖ´Ù.
CRect
rectClient;
GetClientRect(&rectClient);
m_BackImage.Create(pDC,
rectClient.right, rectClient.bottom);
//2. OnDrawÇÔ¼ö¿¡¼ »ý¼ºµÈ BitmapÇÚµé(µð¹ÙÀ̽º ÄÁÅýºÆ®
ÇÚµé)À» ¾ò´Â´Ù.
CDC *pMemDC = m_BackImage.GetBitmapDC(pDC);
pMemDC->BitBlt(0, 0, 1024, 768, NULL, 0, 0, WHITENESS); //¹è°æÀ»
ÇϾá»öÀ¸·Î Ä¥ÇÑ´Ù.
//3. pDC´ë½Å »ý¼ºµÈ Bitmap ÇÚµéÀ» »ç¿ëÇÏ¿© ¿øÇÏ´Â
±×¸²À» ±×¸°´Ù(ȸé´ë½Å Bitmap¿¡´Ù ±×¸²À» ±×¸°´Ù).
pMemDC->Rectangle(100,
100, 200, 200);
pMemDC->TextOut(100, 50, _T("Å×½ºÆ®¿ë ÇÁ·Î±×·¥ÀÔ´Ï´Ù"));
//4. Bitmap ÇÚµéÀ» ReleaseÇØ ÁØ´Ù.
m_BackImage.ReleaseBitmapDC();
//5. BitmapÀÇ ³»¿ëÀ» ȸé»ó¿¡ Ãâ·ÂÇÑ´Ù.
m_BackImage.Draw(pDC);
// pDC->Rectangle(100,
100, 200, 200);
// pDC->TextOut(100,
50, _T("Å×½ºÆ®¿ë ÇÁ·Î±×·¥ÀÔ´Ï´Ù"));
}
//6. WM_ERASEBKGND ¸Þ½ÃÁö¿¡¼ »ý¼ºµÈ ÇÔ¼ö¿¡¼ ¾Æ¹«Àϵµ
ÇÏÁö ¾Ê°í return FALSEÇØ ÁØ´Ù.
BOOL CViewFlickerView::OnEraseBkgnd(CDC* pDC)
{
return FALSE;
// return
CView::OnEraseBkgnd(pDC);
}
´Ù¿î·Îµå