ÇнÀ¸ñÇ¥    1

ÇнÀÁÖÁ¦    1

¿¹½À³»¿ë    1

½Ç½À¹æ¹ý    1

°ú    Á¦    1

Áß¿äÇÔ¼ö    1

¹è°æ°ú ÇÔ¼ºµÈ ¾Ö´Ï¸ÞÀ̼Ç

ÇнÀ¸ñÇ¥

¹è°æ°ú ÇÕ¼ºµÈ ¾Ö´Ï¸ÞÀÌ¼Ç ÇÁ·Î±×·¥À» ¸¸µç´Ù.

ÇнÀÁÖÁ¦

 

¿¹½À³»¿ë

 

½Ç½À¹æ¹ý

¸ñ    Â÷

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();

}

 

 

Áß¿äÇÔ¼ö