|
¹è°æ°ú ÇÔ¼ºµÈ ¾Ö´Ï¸ÞÀÌ¼Ç |
|||||||
ÇнÀ¸ñÇ¥ |
||||||||
¹è°æ°ú ÇÕ¼ºµÈ ¾Ö´Ï¸ÞÀÌ¼Ç ÇÁ·Î±×·¥À» ¸¸µç´Ù. |
||||||||
ÇнÀÁÖÁ¦ |
||||||||
|
||||||||
¿¹½À³»¿ë |
||||||||
|
||||||||
½Ç½À¹æ¹ý |
||||||||
¸ñ Â÷ |
||||||||
1. ¹è°æ ±×¸²Àº ¸®¼Ò½º¿¡ Ãß°¡ÇÑ´Ù. [±×¸² ³»·Á¹Þ±â] |
||||||||
|
|
|||||||
±×¸²ÀÇ ID¸¦ ¡°IDB_BACK¡±·Î ÇÑ´Ù.
2. OnDraw ÇÔ¼ö¿¡ ¹è°æÀ» ±×¸®´Â ÇÔ¼ö¸¦ Ãß°¡ÇÑ´Ù. |
||||||||
|
void CBMPView::OnDraw(CDC* pDC) { CBitmap bmpBack; bmpBack.LoadBitmap(IDB_BACK); CDC MemDC; MemDC.CreateCompatibleDC(pDC); CBitmap *pOldBitmap = (CBitmap *)MemDC.SelectObject(&bmpBack); MemDC.SelectObject(&bmpBack); pDC->BitBlt(0, 0, 256, 192, &MemDC, 0, 0, SRCCOPY); MemDC.SelectObject(pOldBitmap); DrawBitmap(); } |
|
||||||
¿©±â±îÁö ÇÁ·Î±×·¥À» ½ÇÇàÇÏ¸é ¾Æ·¡ ±×¸²°ú °°ÀÌ ±×¸²ÀÌ ÀÚ¿¬½º·´Áö¾Ê´Ù. ´ÙÀ½Àº À̸¦ ¼öÁ¤ÇÏ´Â ÇÁ·Î±×·¥À» ¸¸µç´Ù.
3. ¸¶½ºÅ© ºñÆ®¸ÊÀ» ¸¸µç´Ù. |
||||||||
|
|
|||||||
¸¶½ºÅ©´Â ±×¸² ºÎºÐ¸¸ °ËÁ¤»ö(ºñÆ®0)ÀÌ´Ù. ÀÌ´Â ´Ù¸¥ ±×¸²°ú AND ¿¬»êÀ» ÇÏ¿©µµ 0ÀÌ µÇ¾î °ËÁ¤»öÀÌ µÇ°í ÇÏ¾á ºÎºÐ(ºñÆ®1)Àº AND ¿¬»êÀ» Çصµ ±×´ë·Î Ãâ·ÂµÈ´Ù. ±×·¯¹Ç·Î ¹è°æÀº AND ¿¬»êÀ» ÇÏ°í ¾ÆÀÌÄÜÀº OR ¿¬»êÀ» ÇÏ¸é ¹è°æ°ú ¾ÆÀÌÄÜÀ» ±×´ë·Î »ì¸± ¼ö ÀÖ´Ù. DrawBitmap ÇÔ¼ö¸¦ ¾Æ·¡¿Í °°ÀÌ ¼öÁ¤ÇÑ´Ù. |
||||||||
|
void CBMPView::DrawBitmap() { static int nAnimate; CClientDC dc(this); // ȣȯ¼º ÀÖ´Â ¸Þ¸ð¸® DC¸¦ »ý¼º CDC MemDC; MemDC.CreateCompatibleDC(&dc); // ¸®¼Ò½º¿¡¼ ºñÆ®¸Ê Àбâ CBitmap bmpMask, bmpMan, bmpBack; bmpMask.LoadBitmap(IDB_MASK); bmpMan.LoadBitmap(IDB_MAN); bmpBack.LoadBitmap(IDB_BACK); // ¹è°æ ´Ù½Ã ±×¸®±â CBitmap *pOldBitmap = (CBitmap *)MemDC.SelectObject(&bmpBack); dc.BitBlt(50, 50, 32, 32, &MemDC, 50, 50, SRCCOPY); // ¸¶½ºÅ© ±×¸®±â MemDC.SelectObject(&bmpMask); dc.BitBlt(50, 50, 32, 32, &MemDC, 32*nAnimate, 0, SRCAND); // ¾ÆÀÌÄÜ ±×¸² ±×¸®±â MemDC.SelectObject(&bmpMan); dc.BitBlt(50, 50, 32, 32, &MemDC, 32*nAnimate, 0, SRCPAINT); // ¾Ö´Ï¸ÞÀÌ¼Ç Ä«¿îÅ͸¦ Áõ°¡½ÃÅ´ if(++nAnimate > 3) nAnimate = 0; MemDC.SelectObject(pOldBitmap); } |
|
||||||
|
||||||||
°ú Á¦ |
||||||||
1. À§ ÇÁ·Î±×·¥¿¡¼ µ¿¿µ»óÀÇ ÁÂÇ¥¸¦ º¯È½ÃÄÑ µ¿ÀÛ½ÃÄÑ º¸ÀÚ |
||||||||
Çì´õ ÆÄÀÏ¿¡ ´ÙÀ½ µÎ º¯¼ö¸¦ Ãß°¡ ½ÃŲ´Ù. |
||||||||
|
public: int xLoc,yLoc; void DrawBitmap(); virtual ~CBMPView(); |
|
||||||
´ÙÀ½ÀÇ ÇÔ¼ö¸¦ ¼öÁ¤ÇÑ´Ù. |
||||||||
|
void CBMPView::DrawBitmap() { static int nAnimate; CClientDC dc(this); // ȣȯ¼º ÀÖ´Â ¸Þ¸ð¸® DC¸¦ »ý¼º CDC MemDC; MemDC.CreateCompatibleDC(&dc); // ¸®¼Ò½º¿¡¼ ºñÆ®¸Ê Àбâ CBitmap bmpMask, bmpMan, bmpBack; bmpMask.LoadBitmap(IDB_MASK); bmpMan.LoadBitmap(IDB_MAN); bmpBack.LoadBitmap(IDB_BACK); // ±×¸²ÀÇ ÁÂÇ¥°ªÀ» xLoc,yLoc ·Î
ÇÏ°í ÀÌ °ªÀ» º¯È ½ÃŲ´Ù. xLoc--;
yLoc--; if(xLoc<=0) xLoc=150; if(yLoc<=0) yLoc=150; // ¹è°æ ´Ù½Ã ±×¸®±â CBitmap *pOldBitmap = (CBitmap *)MemDC.SelectObject(&bmpBack); //dc.BitBlt(xLoc, yLoc, 32, 32, &MemDC, 50, 50, SRCCOPY); dc.BitBlt(0, 0, 256, 192, &MemDC, 0, 0, SRCCOPY); // ¸¶½ºÅ© ±×¸®±â MemDC.SelectObject(&bmpMask); dc.BitBlt(xLoc, yLoc, 32, 32, &MemDC, 32*nAnimate, 0, SRCAND); // ¾ÆÀÌÄÜ ±×¸² ±×¸®±â MemDC.SelectObject(&bmpMan); dc.BitBlt(xLoc, yLoc, 32, 32, &MemDC, 32*nAnimate, 0, SRCPAINT); // ¾Ö´Ï¸ÞÀÌ¼Ç Ä«¿îÅ͸¦ Áõ°¡½ÃÅ´ if(++nAnimate > 3) nAnimate = 0; MemDC.SelectObject(pOldBitmap); } void CBMPView::OnInitialUpdate() { CView::OnInitialUpdate();
// TODO: Add your specialized code here and/or call the base class SetTimer(0,200,NULL); xLoc=150; yLoc=150; } |
|
||||||
2.
°úÁ¦1ÀÇ µ¿ÀÛÀº ÁÂÃøÀ¸·Î ¿òÁ÷À̳ª À̹ø¿¡´Â ¿ìÃøÀ¸·Î À̵¿ÇÏ´Â ÇÁ·Î±×·¥À» ¸¸µé¾î º»´Ù. ÀÌ´Â ¡°StretchBlt¡± ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ±×¸²À» xÃàÀ¸·Î ȸÀü ½ÃÄÑ ±×¸²À» À̵¿ ½ÃŲ´Ù. °úÁ¦1 ÇÁ·Î±×·¥¿¡¼ ¾Æ·¡ ÇÔ¼ö¿Í ÁÂÇ¥¸¦ º¯È½ÃÅ°¸é µÈ´Ù. |
||||||||
|
void
CBMPView::DrawBitmap() { static
int nAnimate; CClientDC
dc(this); //
ȣȯ¼º ÀÖ´Â ¸Þ¸ð¸® DC¸¦ »ý¼º CDC
MemDC; MemDC.CreateCompatibleDC(&dc); //
¸®¼Ò½º¿¡¼ ºñÆ®¸Ê Àбâ CBitmap
bmpMask, bmpMan, bmpBack; bmpMask.LoadBitmap(IDB_MASK); bmpMan.LoadBitmap(IDB_MAN); bmpBack.LoadBitmap(IDB_BACK); //
±×¸²ÀÇ ÁÂÇ¥°ªÀ» xLoc,yLoc ·Î ÇÏ°í ÀÌ
°ªÀ» º¯È ½ÃŲ´Ù. xLoc++; yLoc--; if(xLoc>=150) xLoc=0; if(yLoc<=0) yLoc=150; //
¹è°æ ´Ù½Ã ±×¸®±â CBitmap
*pOldBitmap = (CBitmap *)MemDC.SelectObject(&bmpBack); dc.BitBlt(0,
0, 256, 192, &MemDC, 0, 0, SRCCOPY); //
¸¶½ºÅ© ±×¸®±â MemDC.SelectObject(&bmpMask); dc.StretchBlt(xLoc, yLoc, 32, 32, &MemDC,
32*(1+nAnimate), 0, -32, 32, SRCAND); //
¾ÆÀÌÄÜ ±×¸² ±×¸®±â MemDC.SelectObject(&bmpMan); dc.StretchBlt(xLoc, yLoc, 32, 32, &MemDC,
32*(1+nAnimate), 0, -32, 32, SRCPAINT); //
¾Ö´Ï¸ÞÀÌ¼Ç Ä«¿îÅ͸¦ Áõ°¡½ÃÅ´ if(++nAnimate
> 3) nAnimate = 0; MemDC.SelectObject(pOldBitmap); } void
CBMPView::OnInitialUpdate() { CView::OnInitialUpdate(); //
TODO: Add your specialized code here and/or call the base class SetTimer(0,100,NULL); xLoc=0; yLoc=150; } |
|
||||||
|
||||||||
3.
°úÁ¦1°ú °úÁ¦2¸¦ ÇÕ¼ºÇÏ¿© Á¿ì·Î ¿òÁ÷ÀÌ´Â ¿¡´Ï¸ÞÀ̼ÇÀ» ¸¸µå½Ã¿À |
||||||||
4.
¡°°úÁ¦1¡±À» WorkLeft() ¡°°úÁ¦2¡±¸¦ WorkRight() ÇÔ¼ö·Î ¸¸µé°í ¸¶¿ì½º ¿À¸¥ÂÊ ¹öÆ°À» ´©¸£¸é Á·ÎÀ̵¿ÇÏ°í, ¿ÞÂÊ ¹öÆ°À» ´©¸£¸é ¿ì·Î À̵¿ÇÏ´Â ÇÁ·Î±×·¥À» ¸¸µå½Ã¿À. ¾Æ·¡ ±×¸²°ú °°ÀÌ ¼±ÅÃÇÏ¿© ¡°OnLButtonDown¡± ¡°OnRButtonDown¡± µÎ°³ÀÇ ÇÔ¼ö¸¦ ¸¸µç´Ù. int nModeWork; ¸¦ ¼±¾ðÇÏ°í OnInitialUpdate() ÇÔ¼ö¿¡ ÃʱâÄ¡¸¦ ¡°0¡±À¸·Î ÇÑ´Ù. ¡°OnLButtonDown¡±ÇÔ¼ö¿¡ nModeWork=1, ¡°OnRButtonDown¡±ÇÔ¼ö¿¡ nModeWork=2 ÇÑ´Ù. ¡°1¡±ÀÏ ¶§ ¡± WorkLeft() ÇÁ·Î±×·¥À» ¡°2¡±ÀÏ ¶§ ¡± WorkRight() ÇÁ·Î±×·¥ÀÌ Å¸ÀÌ¸Ó ÇÔ¼ö¿¡¼ µ¿ÀÛ Çϵµ·Ï ÇÑ´Ù. |
||||||||
|
||||||||