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 -