|
¹è°æ°ú ÇÔ¼ºµÈ ¾Ö´Ï¸ÞÀÌ¼Ç |
||||||||
ÇнÀ¸ñÇ¥ |
|||||||||
¹è°æ°ú ÇÕ¼ºµÈ ¾Ö´Ï¸ÞÀÌ¼Ç ÇÁ·Î±×·¥À» ¸¸µç´Ù. |
|||||||||
ÇнÀÁÖÁ¦ |
|||||||||
|
|||||||||
¿¹½À³»¿ë |
|||||||||
|
|||||||||
½Ç½À¹æ¹ý |
|||||||||
¸ñ Â÷ |
|||||||||
1. ¹è°æ ±×¸²Àº ¸®¼Ò½º¿¡ Ãß°¡ÇÑ´Ù. [±×¸² ³»·Á¹Þ±â] |
|||||||||
±×¸²°ú °°ÀÌ ¡°res¡± µð·ºÅ丮¿¡ ±×¸²ÀÌ º¹»çµÈ °ÍÀ» È®ÀÎ ÇÑ´Ù.
|
|||||||||
|
|
||||||||
|
|||||||||
ÇÏ´Ã ±×¸²Àº ID¸¦ ¡°IDB_BACK¡±À¸·Î ¹Ù²Û´Ù.
|
|||||||||
±×¸²ÀÚÀÇ ID¸¦ ¡°IDB_MASK¡±·Î ÇÑ´Ù.
|
|||||||||
¾Æ·¡ ±×¸²°ú °°ÀÌ ¹è°æÀ» ±×¸®´Â ÇÔ¼ö ¡°DrawBack¡± À» ¸¸µç´Ù. |
|||||||||
|
|
||||||||
DrawBack() ÇÔ¼ö¿¡ ¾Æ·¡¿Í °°ÀÌ ÇÁ·Î±×·¥ ÇÏ°í À̸¦ OnPaint() ÇÔ¼ö¿¡¼¼ ½ÇÇàÇÏ°Ô ÇÁ·Î±×·¥ ÇÑ´Ù. |
|||||||||
|
¿¹Á¦1 |
|
|||||||
|
void CBmpDlg::OnPaint() { if (IsIconic()) { CPaintDC
dc(this); // ±×¸®±â¸¦À§Çѵð¹ÙÀ̽ºÄÁÅؽºÆ® SendMessage(WM_ICONERASEBKGND,
reinterpret_cast<WPARAM>(dc.GetSafeHdc()),
0); // Ŭ¶óÀ̾ðÆ®»ç°¢Çü¿¡¼¾ÆÀÌÄÜÀ»°¡¿îµ¥¿¡¸ÂÃä´Ï´Ù. int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect
rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // ¾ÆÀÌÄÜÀ»±×¸³´Ï´Ù. dc.DrawIcon(x,
y, m_hIcon); } else { DrawBack(); CDialog::OnPaint(); } } void CBmpDlg::DrawBack(void) { CClientDC dc(this); // ȣȯ¼ºÀִ¸޸ð¸®DC¸¦»ý¼º CDC MemDC; MemDC.CreateCompatibleDC(&dc); // ¸®¼Ò½º¿¡¼ºñÆ®¸ÊÀ»Àоîµé¿©DC¿¡¼±Åà CBitmap bitmap; bitmap.
LoadBitmap(IDB_BACK); CBitmap
*pOldBitmap = (CBitmap *)MemDC.SelectObject(&bitmap); // ºñÆ®¸Êºí·ÏÀü¼Û dc.BitBlt(0, 0, 256, 192, &MemDC, 0, 0, SRCCOPY); MemDC.SelectObject(pOldBitmap); } |
|
|||||||
|
|
|
|||||||
¿©±â±îÁö ÇÁ·Î±×·¥À» ½ÇÇàÇÏ¸é ¾Æ·¡ ±×¸²°ú °°ÀÌ ±×¸²ÀÌ ÀÚ¿¬½º·´Áö¾Ê´Ù. ´ÙÀ½Àº À̸¦ ¼öÁ¤ÇÏ´Â ÇÁ·Î±×·¥À» ¸¸µç´Ù.
|
|||||||||
|
|
||||||||
¸¶½ºÅ©´Â ±×¸² ºÎºÐ¸¸ °ËÁ¤»ö(ºñÆ®0)ÀÌ´Ù. ÀÌ´Â ´Ù¸¥ ±×¸²°ú AND ¿¬»êÀ» ÇÏ¿©µµ 0ÀÌ µÇ¾î °ËÁ¤»öÀÌ µÇ°í ÇÏ¾á ºÎºÐ(ºñÆ®1)Àº AND ¿¬»êÀ» Çصµ ±×´ë·Î Ãâ·ÂµÈ´Ù. ±×·¯¹Ç·Î ¹è°æÀº AND ¿¬»êÀ» ÇÏ°í ¾ÆÀÌÄÜÀº OR ¿¬»êÀ» ÇÏ¸é ¹è°æ°ú ¾ÆÀÌÄÜÀ» ±×´ë·Î »ì¸± ¼ö ÀÖ´Ù. DrawBitmap ÇÔ¼ö¸¦ ¾Æ·¡¿Í °°ÀÌ ¼öÁ¤ÇÑ´Ù. |
|||||||||
|
void CBmpDlg::DrawBitmap(void) { 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(0,
0, 256, 192, &MemDC, 0, 0, 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(); |
|
|||||||
´ÙÀ½ÀÇ ÇÔ¼ö¸¦ ¼öÁ¤ÇÑ´Ù. |
|||||||||
|
BOOL CBmpDlg::OnInitDialog() { CDialog::OnInitDialog(); // ½Ã½ºÅÛ¸Þ´º¿¡"Á¤º¸..." ¸Þ´ºÇ׸ñÀ»Ãß°¡ÇÕ´Ï´Ù. // IDM_ABOUTBOX´Â½Ã½ºÅÛ¸í·É¹üÀ§¿¡ÀÖ¾î¾ßÇÕ´Ï´Ù. ASSERT((IDM_ABOUTBOX
& 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX
< 0xF000); CMenu*
pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString
strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING,
IDM_ABOUTBOX, strAboutMenu); } } // ÀÌ´ëÈ»óÀÚÀǾÆÀÌÄÜÀ»¼³Á¤ÇÕ´Ï´Ù. ÀÀ¿ëÇÁ·Î±×·¥ÀÇÁÖâÀÌ´ëÈ»óÀÚ°¡¾Æ´Ò°æ¿ì¿¡´Â // ÇÁ·¹ÀÓ¿öÅ©°¡ÀÌÀÛ¾÷À»ÀÚµ¿À¸·Î¼öÇàÇÕ´Ï´Ù. SetIcon(m_hIcon,
TRUE); // Å«¾ÆÀÌÄÜÀ»¼³Á¤ÇÕ´Ï´Ù. SetIcon(m_hIcon,
FALSE); // ÀÛÀº¾ÆÀÌÄÜÀ»¼³Á¤ÇÕ´Ï´Ù. // TODO: ¿©±â¿¡Ãß°¡ÃʱâÈÀÛ¾÷À»Ãß°¡ÇÕ´Ï´Ù. xLoc=150;
yLoc=150; SetTimer(0,200,NULL); return TRUE;
// Æ÷Ä¿½º¸¦ÄÁÆ®·Ñ¿¡¼³Á¤ÇÏÁö¾ÊÀ¸¸éTRUE¸¦¹ÝȯÇÕ´Ï´Ù. } void CBmpDlg::DrawBitmap(void) { 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(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 CBmpDlg::OnTimer(UINT_PTR nIDEvent) { // TODO: ¿©±â¿¡¸Þ½ÃÁö󸮱âÄڵ带Ãß°¡¹×/¶Ç´Â±âº»°ªÀ»È£ÃâÇÕ´Ï´Ù. // ±×¸²ÀÇÁÂÇ¥°ªÀ»xLoc,yLoc ·ÎÇÏ°íÀÌ°ªÀ»º¯È½ÃŲ´Ù. xLoc--; yLoc--; if(xLoc<=0) xLoc=150; if(yLoc<=0) yLoc=150; DrawBitmap(); CDialog::OnTimer(nIDEvent); } |
|
|||||||
|
|||||||||
2.
°úÁ¦1ÀÇ µ¿ÀÛÀº ÁÂÃøÀ¸·Î ¿òÁ÷À̳ª À̹ø¿¡´Â ¿ìÃøÀ¸·Î À̵¿ÇÏ´Â ÇÁ·Î±×·¥À» ¸¸µé¾î º»´Ù. ÀÌ´Â ¡°StretchBlt¡± ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ±×¸²À» xÃàÀ¸·Î ȸÀü ½ÃÄÑ ±×¸²À» À̵¿ ½ÃŲ´Ù. °úÁ¦1 ÇÁ·Î±×·¥¿¡¼ ¾Æ·¡ ÇÔ¼ö¿Í ÁÂÇ¥¸¦ º¯È½ÃÅ°¸é µÈ´Ù. WalkRight() ÇÔ¼ö¸¦ ¸¸µç´Ù. |
|||||||||
|
void CBmpDlg::OnTimer(UINT_PTR nIDEvent) { // TODO: ¿©±â¿¡¸Þ½ÃÁö󸮱âÄڵ带Ãß°¡¹×/¶Ç´Â±âº»°ªÀ»È£ÃâÇÕ´Ï´Ù. // ±×¸²ÀÇÁÂÇ¥°ªÀ»xLoc,yLoc ·ÎÇÏ°íÀÌ°ªÀ»º¯È½ÃŲ´Ù. xLoc++; yLoc--; if(xLoc>=150) xLoc=0; if(yLoc<=0) yLoc=150; //DrawBitmap(); WalkRight(); CDialog::OnTimer(nIDEvent); } void CBmpDlg::WalkRight(void) { 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(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); } BOOL CBmpDlg::OnInitDialog() { //
==============ÇÁ·Î±×·¥»ý·«============================== // TODO: ¿©±â¿¡Ãß°¡ÃʱâÈÀÛ¾÷À»Ãß°¡ÇÕ´Ï´Ù. xLoc=0; yLoc=150; SetTimer(0,200,NULL); return TRUE;
// Æ÷Ä¿½º¸¦ÄÁÆ®·Ñ¿¡¼³Á¤ÇÏÁö¾ÊÀ¸¸éTRUE¸¦¹ÝȯÇÕ´Ï´Ù. } |
|
|||||||
|
|||||||||
3.
°úÁ¦1°ú °úÁ¦2¸¦ ÇÕ¼ºÇÏ¿© Á¿ì·Î ¿òÁ÷ÀÌ´Â ¿¡´Ï¸ÞÀ̼ÇÀ» ¸¸µå½Ã¿À |
|||||||||
int nModeWalk; ¸¦ ¼±¾ðÇÏ°í OnInitDialog () ÇÔ¼ö¿¡ ÃʱâÄ¡¸¦ ¡°0¡±À¸·Î ÇÑ´Ù. ¡°0¡±ÀÏ
¶§ ¡± WalkRight() ÇÁ·Î±×·¥À» ¡°1¡±ÀÏ ¶§
¡± WalkLeft()
ÇÁ·Î±×·¥ÀÌ Å¸ÀÌ¸Ó ÇÔ¼ö¿¡¼ µ¿ÀÛ Çϵµ·Ï ÇÑ´Ù. |
|||||||||
|
BOOL CBmpDlg::OnInitDialog() { CDialog::OnInitDialog(); // ½Ã½ºÅÛ¸Þ´º¿¡"Á¤º¸..." ¸Þ´ºÇ׸ñÀ»Ãß°¡ÇÕ´Ï´Ù. // IDM_ABOUTBOX´Â½Ã½ºÅÛ¸í·É¹üÀ§¿¡ÀÖ¾î¾ßÇÕ´Ï´Ù. ASSERT((IDM_ABOUTBOX
& 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX
< 0xF000); CMenu*
pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString
strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING,
IDM_ABOUTBOX, strAboutMenu); } } // ÀÌ´ëÈ»óÀÚÀǾÆÀÌÄÜÀ»¼³Á¤ÇÕ´Ï´Ù. ÀÀ¿ëÇÁ·Î±×·¥ÀÇÁÖâÀÌ´ëÈ»óÀÚ°¡¾Æ´Ò°æ¿ì¿¡´Â // ÇÁ·¹ÀÓ¿öÅ©°¡ÀÌÀÛ¾÷À»ÀÚµ¿À¸·Î¼öÇàÇÕ´Ï´Ù. SetIcon(m_hIcon,
TRUE); // Å«¾ÆÀÌÄÜÀ»¼³Á¤ÇÕ´Ï´Ù. SetIcon(m_hIcon,
FALSE); // ÀÛÀº¾ÆÀÌÄÜÀ»¼³Á¤ÇÕ´Ï´Ù. // TODO: ¿©±â¿¡Ãß°¡ÃʱâÈÀÛ¾÷À»Ãß°¡ÇÕ´Ï´Ù. nModeWalk=0; xLoc=0; yLoc=10; SetTimer(0,200,NULL); return TRUE;
// Æ÷Ä¿½º¸¦ÄÁÆ®·Ñ¿¡¼³Á¤ÇÏÁö¾ÊÀ¸¸éTRUE¸¦¹ÝȯÇÕ´Ï´Ù. } void CBmpDlg::OnTimer(UINT_PTR nIDEvent) { // TODO: ¿©±â¿¡¸Þ½ÃÁö󸮱âÄڵ带Ãß°¡¹×/¶Ç´Â±âº»°ªÀ»È£ÃâÇÕ´Ï´Ù. // ±×¸²ÀÇÁÂÇ¥°ªÀ»xLoc,yLoc ·ÎÇÏ°íÀÌ°ªÀ»º¯È½ÃŲ´Ù. if(xLoc>=220) nModeWalk
= 1; else
if(xLoc<=0) nModeWalk
= 0; if(nModeWalk==0){ xLoc+=10; WalkRight(); } else
{ xLoc-=10; WalkLeft(); } CDialog::OnTimer(nIDEvent); } void CBmpDlg::WalkLeft(void) { DrawBitmap(); } |
|
|||||||
|
|||||||||
|
|||||||||