DirectX Programming (4)

===============================================================

¸®½ºÆ® 4 : DXLoadBitmap ÇÔ¼ö

---------------------------------------------------------------

// -------------------------------------------------
// DXLoadBitmap : ÁöÁ¤µÈ ºñÆ®¸Ê ÆÄÀÏÀ» ·ÎµåÇÏ¿© ¿ÀÇÁ½ºÅ©¸°
// ¸éÀ» »ý¼ºÇÑ´Ù.
// -------------------------------------------------

IDirectDrawSurface *DXLoadBitmap(LPCSTR lpBitmapFilename)
{
     HBITMAP hbm;
     BITMAP bm;
     IDirectDrawSurface *pdds;

     hbm = (HBITMAP)LoadImage(NULL, lpBitmapFilename,
          IMAGE_BITMAP, 0, 0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
     if (hbm == NULL)
          return NULL;
     GetObject(hbm, sizeof(bm), &bm);
     pdds = CreateOffScreenSurface(bm.bmWidth, bm.bmHeight);
     
     if (pdds)
          DXCopyBitmap(pdds, hbm, bm.bmWidth, bm.bmHeight);
     DeleteObject(hbm);

     return pdds;
}

===============================================================

 

===============================================================

¸®½ºÆ® 5 : CreateOffScreenSurface ÇÔ¼ö

---------------------------------------------------------------

// ----------------------------------------------
// CreateOffScreenSurface : ÁÖ¾îÁø Å©±â¸¦ °®´Â ¿ÀÇÁ½ºÅ©¸°
// ¸éÀ» »ý¼ºÇÑ´Ù.
// ----------------------------------------------

IDirectDrawSurface *CreateOffScreenSurface(int dx, int dy)
{
     DDSURFACEDESC ddsd;
     IDirectDrawSurface *pdds;

     ZeroMemory(&ddsd, sizeof(ddsd));
     ddsd.dwSize = sizeof(ddsd);
     ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
     ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
     ddsd.dwWidth = dx;
     ddsd.dwHeight = dy;

     if (pDirectDrawObj->CreateSurface(&ddsd, &pdds, NULL) != DD_OK){
          return NULL;
     } else {

          // Ä÷¯Å°¸¦ ¼³Á¤ÇÑ´Ù.
          // ¿©±â¼­ Ä÷¯Å°´Â Èò »öÀ¸·Î ÇÑ´Ù.
          DDCOLORKEY ddck;
          ddck.dwColorSpaceLowValue = 0xff;
          ddck.dwColorSpaceHighValue = 0xff;
          pdds->SetColorKey(DDCKEY_SRCBLT, &ddck);

          return pdds;
     }
}

===============================================================

DXCopyBitmap ÇÔ¼ö´Â ù ¹øÂ° ÀÎÀÚ·Î ÁÖ¾îÁø ¸é °´Ã¼ÀÇ ³»¿ëÀ», µÎ ¹øÂ°

ÀÎÀÚ°¡ °¡¸®Å°´Â ºñÆ®¸Ê ÇÚµéÀÇ ³»¿ëÀ¸·Î º¯°æÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù. ¼¼ ¹øÂ°

ÀÎÀÚ¿Í ³× ¹øÂ° ÀÎÀڷδ ºñÆ®¸ÊÀÇ Æø°ú ³ôÀ̸¦ ¹Þ´Â´Ù. ½ÇÁ¦ ÀýÂ÷´Â API

³ª MFC¿¡¼­ ºñÆ®¸Ê ÇÚµéÀÇ ³»¿ëÀ» È­¸éÀ¸·Î º¹»çÇÏ´Â ÀýÂ÷¿Í µ¿ÀÏÇÏ´Ù. ¸Õ

Àú ºñÆ®¸Ê ÇÚµéÀ» ³»¿ëÀ¸·Î °®´Â µð¹ÙÀ̽º ÄÁÅØ½ºÆ®¸¦ ¸Þ¸ð

¸®¿¡ ¸¸µé¾îµÐ´Ù(CreateCompatibleDC¿Í SelectObject ÇÔ¼ö È£ÃâºÎ).

±× ´ÙÀ½ ¸é °´Ã¼ÀÇ µð¹ÙÀ̽º ÄÁÅØ½ºÆ® ÇÚµéÀ» ¾ò¾î³»°í(pdds->GetDC)

BitBlt ÇÔ¼ö(ÀÌ ÇÔ¼ö´Â ´ÙÀÌ·ºÆ® µå·Î¿ìÀÇ ÇÔ¼ö°¡ ¾Æ´Ñ GDI ÇÔ¼öÀÌ´Ù)ÀÇ È£

ÃâÀ» ÅëÇØ ºñÆ®¸ÊÀÇ ³»¿ëÀ» ¸é °´Ã¼·Î º¹»çÇÑ´Ù.

 

===============================================================

¸®½ºÆ® 6 : DXCopyBitmap ÇÔ¼ö

---------------------------------------------------------------

// ----------------------------------------------

// DXCopyBitmap : ÁöÁ¤µÈ ¸éÀ¸·Î ÁöÁ¤µÈ ºñÆ®¸Ê ¸®¼Ò½ºÀÇ

// ³»¿ëÀ» º¹»çÇÑ´Ù.

// ----------------------------------------------

HRESULT DXCopyBitmap(IDirectDrawSurface *pdds,

HBITMAP hbm, int dx, int dy)

{

HDC hdcImage;

HDC hdc;

HRESULT hr;

HBITMAP hbmOld;

hdcImage = CreateCompatibleDC(NULL);

hbmOld = (HBITMAP)SelectObject(hdcImage, hbm);

if ((hr = pdds->GetDC(&hdc)) == DD_OK)

{

BitBlt(hdc, 0, 0, dx, dy, hdcImage, 0, 0,

SRCCOPY);

pdds->ReleaseDC(hdc);

}

SelectObject(hdcImage, hbmOld);

DeleteDC(hdcImage);

return hr;

}

===============================================================

 

===============================================================

¸®½ºÆ® 7 : UpdateFrame ÇÔ¼ö

---------------------------------------------------------------

// ----------------------------------------------

// UpdateFrame : ÁÖ±âÀûÀ¸·Î È£ÃâµÇ¾î ÈÄÀ§¸é°ú ÀüÀ§¸éÀÇ

// ³»¿ëÀ» ±³Ã¼ÇÑ´Ù.

// ----------------------------------------------

void UpdateFrame(void)

{

RECT rcRect = { 0, 0, 26, 32 };

HRESULT ddrval;

static int xpos=(640-26)/2, ypos=440;

// ¹è°æ ¸éÀ» ±×¸°´Ù.

if (DrawBackground() == DDERR_SURFACELOST)

RestoreSurface();

// Ű´­¸²À» üũÇÏ¿© ¸ÞÀΠij¸¯Å͸¦ ¿òÁ÷ÀδÙ.

if (GetAsyncKeyState(VK_LEFT) < 0) // ¿ÞÂÊÀ¸·Î

xpos -= 5;

else if (GetAsyncKeyState(VK_RIGHT) < 0)

// ¿À¸¥ÂÊÀ¸·Î

xpos += 5;

else if (GetAsyncKeyState(VK_UP) < 0) // À§·Î

ypos -= 5;

else if (GetAsyncKeyState(VK_DOWN) < 0)

// ¾Æ·¡·Î

ypos += 5;

// ÁÂÇ¥°¡ °æ°è¸¦ ¹þ¾î³µ´ÂÁö °Ë»çÇÑ´Ù.

if (xpos < 0)

xpos = 0;

else if (xpos > 640-26)

xpos = 640-26;

if (ypos < 0)

ypos = 0;

else if (ypos > 480-32)

ypos = 480-32;

// ¸ÞÀΠij¸¯Å͸¦ ±×¸°´Ù.

ddrval = pBackSurface->BltFast

(xpos, ypos, pMainCharacter, &rcRect,

DDBLTFAST_SRCCOLORKEY | DDBLTFAST_WAIT);

// ÀüÀ§ ¸é°ú ÈÄÀ§ ¸éÀ» ±³Ã¼ÇÑ´Ù.

ddrval = pPrimarySurface->Flip(NULL,

DDFLIP_WAIT);

}

===============================================================

 

UpdateFrame ÇÔ¼ö

ÀÌÁ¦ºÎÅÍ ÇÒ ÀÏÀº ¹Ù·Î ¾Õ¼­ Á¦ÀÏ Ã³À½ WinMain¿¡¼­ º¸¾Ò´ø °¡Àå Áß¿äÇÑ

ÇÔ¼ö UpdateframeÀÇ ³»¿ëÀ» »ìÆìº¸´Â ÀÏÀÌ´Ù. UpdateFrameÀº °ÔÀÓÀÇ Àå¸é

À» Çϳª Çϳª¾¿ ±¸¼ºÇÏ¿© À̸¦ ÆäÀÌÁö Çø³ÇÎÀ» ÅëÇØ È­¸éÀ¸·Î ³»º¸³»´Â ÀÏ

À» ´ã´çÇÑ´Ù. ÀÌ ÇÔ¼öÀÇ ³»¿ëÀº ¸®½ºÆ® 7°ú °°´Ù.

»õ·Î¿î Àå¸éÀ» ±¸¼ºÇÏ´Â ¹æ¹ýÀº °£´ÜÇÏ´Ù. ¸ÕÀú ¹è°æ ºñÆ®¸ÊÀÇ ³»¿ëÀ» ÈÄ

À§ ¸é¿¡ º¹»çÇÑ´Ù. ´ÙÀ½À¸·Î ½ºÇÁ¶óÀÌÆ®ÀÇ ³»¿ëÀ» ÈÄÀ§ ¸é¿¡ µ¤¾î½áÁÖ´Â

µ¥ Ű ÀÔ·ÂÀ̳ª »óȲ º¯È­ µîÀ» °í·ÁÇØ ½ºÇÁ¶óÀÌÆ®ÀÇ Ãâ·Â À§Ä¡¸¦ º¸Á¤ÇØÁØ

´Ù. ¹è°æÀ» ±×·ÁÁÖ±â À§ÇÑ ¿ëµµ·Î DrawBackground¶ó´Â ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù(¸®

½ºÆ® 8 ÂüÁ¶).

DrawBackground ÇÔ¼ö´Â ´Ü¼øÈ÷ ¹è°æÀ» ±×·ÁÁÖ´Â °ÍÀÌ ¾Æ´Ï´Ù. ºñÇà±â°¡ °¡

¸¸È÷ À־ ¾ÕÀ¸·Î ÁøÇàµÇ´Â µíÇÑ È¿°ú¸¦ ÁÖ±â À§ÇØ ¹è°æ ºñÆ®¸ÊÀ» Á¶±Ý

¾¿ ȸÀü½ÃÄѰ¡¸ç »Ñ·ÁÁØ´Ù. nStartRow¶ó´Â º¯¼ö¸¦ µÎ¾î ¹è°æ ºñÆ®¸Ê Ãâ·Â

½Ã ÀÌ ÁÙºÎÅÍ ¸¶Áö¸· ÁÙ±îÁö¸¦ ÈÄÀ§ ¸éÀÇ ¾Õ¿¡ Ãâ·ÂÇϰí ù ¹øÂ° ÁÙºÎÅÍ

nStartRowÀÇ ¾Õ ÁÙ±îÁö¸¦ ÈÄÀ§ ¸éÀÇ ±× µÚ¿¡ À̾ Ãâ·ÂÇÑ´Ù. Ãâ·ÂÀÌ ³¡³ª

¸é nStartRowÀÇ °ªÀ» 5¾¿ Áõ°¡½ÃÄÑ ¸¶Ä¡ ¹è°æ ¸éÀÌ ¾ÕÀ¸·Î ÁøÇàÇÏ´Â µí

ÇÑ È¿°ú¸¦ ÁØ´Ù. Ãâ·ÂÀÌ ÈÄÀ§ ¸éÀ¸·Î ³ª°¡´Â °ÍÀ̱⠶§¹®¿¡ ÈÄÀ§ ¸é °´Ã¼

ÀÇ BltFast ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù.

ù ¹øÂ° ÀÎÀÚ¿Í µÎ ¹øÂ° ÀÎÀڷδ Ãâ·ÂÀÌ ¾îµð·Î ³ª°¥ °ÍÀÎÁö ±× ½ÃÀÛ À§Ä¡

¸¦ ³ªÅ¸³½´Ù. ¼¼ ¹øÂ° ÀÎÀڷδ ¼Ò½º ¸é °´Ã¼ÀÇ Æ÷ÀÎÅ͸¦ ÁöÁ¤ÇÏ´Â ºÎºÐÀÌ

´Ù. ³× ¹øÂ° ÀÎÀÚ·Î ¼Ò½º ¸é °´Ã¼ÀÇ ¾î´À ¿µ¿ªÀ» º¹»çÇÒ °ÍÀÎÁö¸¦ ÁöÁ¤ÇÑ

´Ù. BltFast ÇÔ¼ö¿Í ºñ½ÁÇÑ ±â´ÉÀ» ÇÏ´Â °ÍÀ¸·Î Blt ÇÔ¼ö°¡ Àִµ¥ ÀÌ´Â

º¹»ç½Ã È®´ë³ª Ãà¼Ò±îÁö °¡´ÉÇÏ´Ù. BltFast´Â 1:1 º¹»ç¸¸ °¡´ÉÇÏ´Ù. ¹è°æ

¸éÀÇ º¹»ç½Ã¿¡´Â Ä÷¯Å°°¡ ÇÊ¿ä¾ø´Ù(óÀ½ »Ñ·ÁÁö´Â °ÍÀ̱⠶§¹®¿¡ º¸Á¸ÇØ

¾ßÇÒ ¹è°æÀÌ ¾ø±â ¶§¹®ÀÌ´Ù). ±×·¸±â ¶§¹®¿¡ BltFast ÇÔ¼öÀÇ ¸¶Áö¸· ÀÎÀÚ

¸¦ º¸¸é DDBLTFAST_SRCCOLORKEY¶ó´Â °ªÀ» ÁöÁ¤Çϰí ÀÖ´Ù. ´Ù½Ã

UpdateFrame ÇÔ¼ö·Î µ¹¾Æ°¡¼­ ¹è°æ ¸éÀÇ Ãâ·ÂÀÌ ³¡³ª¸é Ű ÀÔ·ÂÀ» °Ë»çÇÑ

´Ù. »ç½Ç Ű ÀÔ·ÂÀÇ Ã¼Å©´Â Update FrameÀÌ ¾Æ´Ñ WM_KEY* ¸Þ½ÃÁö¿¡¼­ ¼öÇà

ÇØµµ °ü°è¾øÁö¸¸ º¸´Ù ´õ ½Ç½Ã°£À¸·Î üũÇÏ·Á¸é ¿©±â¼­ ¼öÇàÇØÁÖ´Â °ÍÀÌ

´õ ÁÁ´Ù. ¹æÇâ۸¦ üũÇÏ¿© ºñÇà±â ½ºÇÁ¶óÀÌÆ®ÀÇ Ãâ·Â À§Ä¡¸¦ º¸Á¤ÇØ ÁØ

´Ù. Ãâ·Â À§Ä¡´Â xpos¿Í ypos º¯¼ö¿¡ µé¾î°£´Ù. ½ºÇÁ¶óÀÌÆ®ÀÇ Ãâ·Â ÁÂÇ¥°¡

°áÁ¤³ª¸é ÈÄÀ§ ¸é¿¡ ±× ³»¿ëÀ» Ãâ·ÂÇϰí ÁÖ ¸é °´Ã¼ÀÇ Flip ÇÔ¼ö¸¦ ÀÌ¿ë

ÇØ ÁÖ ¸é°ú ÈÄÀ§ ¸éÀÇ ³»¿ëÀ» ±³Ã¼ÇÏ¿© ÈÄÀ§ ¸éÀÇ ³»¿ëÀÌ »ç¿ëÀÚ ´«¿¡ º¸ÀÌ

µµ·Ï ÇÑ´Ù.

 

// ¸ÞÀΠij¸¯Å͸¦ ±×¸°´Ù.

ddrval = pBackSurface->BltFast

(xpos, ypos, pMainCharacter, &rcRect,

DDBLTFAST_SRCCOLORKEY | DDBLTFAST_WAIT);

// ÀüÀ§ ¸é°ú ÈÄÀ§ ¸éÀ» ±³Ã¼ÇÑ´Ù.

ddrval = pPrimarySurface->Flip(NULL, DDFLIP_WAIT);

 

¸®½ºÆ® 8 : DrawBackground ÇÔ¼ö

// ----------------------------------------------

// DrawBackground : ¹è°æ ¸éÀÇ ³»¿ëÀ» ½ºÅ©·Ñ½ÃÄѰ¡¸ç

// ÈÄÀ§ ¸éÀ¸·Î ±×·ÁÁØ´Ù.

// ----------------------------------------------

HRESULT DrawBackground()

{

RECT rcRect;

HRESULT ddrval;

static int nStartRow = 0;

// ¹è°æ ºñÆ®¸ÊÀÇ ¾î´À ÁÙºÎÅÍ Ãâ·ÂÀÌ ½ÃÀÛµÉÁö¸¦ ³ªÅ¸³½´Ù.

rcRect.left = 0;

rcRect.top = nStartRow;

rcRect.right = 640;

rcRect.bottom = 480;

ddrval = pBackSurface->BltFast

(0, 0, pBackground, &rcRect,

DDBLTFAST_NOCOLORKEY | DDBLTFAST_WAIT);

if (ddrval != DD_OK)

{

return ddrval;

}

 

if (nStartRow)

{

rcRect.top = 0;

rcRect.bottom = nStartRow-1;

ddrval = pBackSurface->BltFast

(0, 480-nStartRow, pBackground, &rcRect,

DDBLTFAST_NOCOLORKEY | DDBLTFAST_WAIT);

if (ddrval != DD_OK)

{

return ddrval;

}

}

nStartRow += 5;

nStartRow = nStartRow % 480;

return DD_OK;

}

 

¸éÀÇ À¯½Ç ó¸®

 

¾ÕÀÇ ¿ë¾î Á¤¸®¿¡¼­ ¼³¸íÇß´ø °Íó·³ ´ÙÀÌ·ºÆ® µå·Î¿ì¸¦ »ç¿ëÇÏ´Ù º¸¸é

¸é °´Ã¼ÀÇ ³»¿ëÀÌ »ç¶óÁ® ¹ö¸®´Â °æ¿ì°¡ ¹ß»ýÇÑ´Ù. ÀÌ´Â ´ÙÀÌ·ºÆ® µå·Î¿ì

°¡ µ¿ÀÛÇÏ´Â À©µµ ȯ°æÀÌ È¥ÀÚ¼­¸¸ »ç´Â °ø°£ÀÌ ¾Æ´Ï¶ó ´Ù¸¥ À©µµ ÇÁ·Î±×·¥

µé°ú °°ÀÌ °øÁ¸ÇÏ´Â °ø°£ÀÌ¸ç ¶ÇÇÑ ´Ù¸¥ À©µµ ÇÁ·Î±×·¥¿¡¼­ »ç¿ëÇÏ´Â GDI

°¡ ´ÙÀÌ·ºÆ® µå·Î¿ìÀÇ Á¸À縦 ¸ð¸£±â ¶§¹®¿¡ ¹ß»ýÇÏ´Â ¹®Á¦ÀÌ´Ù.

´ÙÀÌ·ºÆ® ÇÁ·Î±×·¥À» ½ÇÇà ÁßÀÎ »óÅ¿¡¼­ ´Ù¸¥ À©µµ ÇÁ·Î±×·¥ÀÇ ÀüÀÌ´Â ¾ó

¸¶µçÁö °¡´ÉÇÏ´Ù. ÀÌ °æ¿ì ´Ù¸¥ ÇÁ·Î±×·¥¿¡¼­ Ãâ·Â ¸ðµâ·Î GDI¸¦ »ç¿ëÇÒ

°ÍÀ̰í ÀÌ ¶§ GDI´Â Ãâ·Â °ü·Ã ÀÚ¿øÀ» µ¶Á¡Çعö¸°´Ù. Áï, ´ÙÀÌ·ºÆ® µå·Î¿ì

¿¡¼­ ¼³Á¤Çسù´ø ³»¿ëÀÌ ¸ðµÎ ±úÁ®¹ö¸®°Ô µÈ´Ù.

ÀÌ Çö»óÀ» ¸éÀÌ À¯½ÇµÇ¾ú´Ù°í ÇÑ´Ù. ¸éÀÇ À¯½Ç ¿©ºÎ´Â ¸é °´Ã¼ÀÇ IsLost

ÇÔ¼ö¸¦ ºÒ·¯º¸°Å³ª ¸é Ãâ·Â °ü·Ã ÇÔ¼öÀÇ ¸®ÅϰªÀÌ DDERR_SURFACELOSTÀÎÁö

¸¦ »ìÆìº¸¸é µÈ´Ù. UpdateFrame ÇÔ¼ö¾È¿¡¼­ ¹è°æ ¸éÀÇ Ãâ·Â½Ã¿¡ ¸éÀÇ À¯

½Ç ¿©ºÎ¸¦ °Ë»çÇÏ¿© À¯½ÇµÇ¾úÀ¸¸é º¹±¸ÇÏ´Â ºÎºÐÀÌ ³ª¿Â´Ù.

 

// ¹è°æ ¸éÀ» ±×¸°´Ù.

if (DrawBackground() == DDERR_SURFACELOST)

RestoreSurface();

 

¸éÀÌ À¯½ÇµÇ¾úÀ¸¸é RestoreSurface¸¦ È£ÃâÇÏ¿© ¸éÀ» º¹±¸ÇÑ´Ù. ÀÌ ÇÔ¼öÀÇ

³»¿ëÀº ¸®½ºÆ® 9¿Í °°´Ù.

¸é ÀÚüÀÇ º¹±¸´Â ¸é °´Ã¼ÀÇ Restore ÇÔ¼ö¸¦ È£ÃâÇÏ¸é µÈ´Ù. ÇÏÁö¸¸ ¿ÀÇÁ

½ºÅ©¸° ¸é °´Ã¼ÀÇ °æ¿ì ±× ³»¿ëÀº Restore¿¡¼­ º¹±¸ÇÒ ¼ö°¡ ¾ø±â ¶§¹®¿¡ ´Ù

½Ã ·ÎµåÇØÁÖ¾î¾ß ÇÑ´Ù. ±× ¿ëµµ·Î »ç¿ëÇÏ´Â ÇÔ¼ö°¡ ¹Ù·Î DXReLoadBitmap

ÇÔ¼öÀÌ´Ù(¸®½ºÆ® 10 ÂüÁ¶). ¾Õ¼­ º¸¾Ò´ø DXLoadBitmap ÇÔ¼ö¿Í ±× ³»¿ëÀº

ºñ½ÁÇÏÁö¸¸ ¸é °´Ã¼¸¦ Á÷Á¢ »ý¼ºÇÏÁö´Â ¾Ê°í ³»¿ë¸¸ ´Ù½Ã ·ÎµåÇÏ´Â ¿ªÇÒÀ»

ÇÑ´Ù.

 

´ÙÀÌ·ºÆ® µå·Î¿ì °´Ã¼ Á¦°Å

 

´ÙÀÌ·ºÆ® µå·Î¿ì °´Ã¼ÀÇ Á¦°Å´Â UpdateFrame ÇÔ¼öÀÇ µÚ¿¡¼­ ¼öÇàÇÑ´Ù.

....

}

// DirectDraw °´Ã¼¸¦ Á¦°ÅÇÑ´Ù.

if (pBackground)

pBackground->Release();

if (pMainCharacter)

pMainCharacter->Release();

if (pPrimarySurface)

pPrimarySurface->Release();

if (pBackSurface)

pBackSurface->Release();

if (pDirectDrawPal)

pDirectDrawPal->Release();

if (pDirectDrawObj)

pDirectDrawObj->Release();

 

===============================================================

¸®½ºÆ® 9 : RestoreSurface ÇÔ¼ö

---------------------------------------------------------------

// -----------------------------------------------
// RestoreSurface : ¸é À¯½Ç½Ã ¸éÀÇ ³»¿ëÀ» º¹±¸ÇØÁØ´Ù.
// -----------------------------------------------
BOOL RestoreSurface()
{
     if (pPrimarySurface && pPrimarySurface->IsLost() != DD_OK) {
          pPrimarySurface->Restore();
          if (pDirectDrawPal)
               pPrimarySurface->SetPalette(pDirectDrawPal);
     }

     // ¹è°æ ºñÆ®¸ÊÀ» º¹±¸ÇÑ´Ù.

     if (pBackground && pBackground->IsLost()!= DD_OK) {
          pBackground->Restore();

          DXReLoadBitmap(pBackground, "MEDIA\\BACK0000.BMP");
     }

     // ºñÇà±â ºñÆ®¸ÊÀ» º¹±¸ÇÑ´Ù.
     if (pMainCharacter && pMainCharacter->IsLost()!= DD_OK) {

          pMainCharacter->Restore();
          DXReLoadBitmap(pMainCharacter, "MEDIA\\SHIP0000.BMP");
     }
     return TRUE;
}

===============================================================

 

===============================================================

¸®½ºÆ® 10 : DXReLoadBitmap ÇÔ¼ö

---------------------------------------------------------------

// ---------------------------------------------

// DXReLoadBitmap : ¸é À¯½ÇÀÇ °æ¿ì ¿ÀÇÁ½ºÅ©¸° ¸éÀÇ

// ³»¿ëÀ» ´Ù½Ã ·ÎµåÇϴµ¥ »ç¿ëµÈ´Ù.

// ----------------------------------------------

BOOL DXReLoadBitmap(IDirectDrawSurface *pdds,LPCSTR lpBitmapFilename)
{
     HBITMAP hbm;
     BITMAP bm;
     BOOL bSuccess = FALSE;
     hbm = (HBITMAP)LoadImage(NULL, lpBitmapFilename, IMAGE_BITMAP, 0, 0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);

     if (hbm == NULL)
          return NULL;

     GetObject(hbm, sizeof(bm), &bm);
     if (pdds) {
          bSuccess = (DXCopyBitmap(pdds, hbm, bm.bmWidth, bm.bmHeight) == DD_OK) ? TRUE : FALSE;
     }

     DeleteObject(hbm);

     return bSuccess;

}

===============================================================

 

 

- °è¼Ó -

 

- the end of this article -