LPDIRECTDRAWSURFACE lpDDSSprite; ・・・ // オフスクリーンバッファの作成 ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT; ddsd.dwBackBufferCount = 0; ddsd.dwWidth = 128; // 横サイズ ddsd.dwHeight = 128; // 縦サイズ ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; lpDD->CreateSurface(&ddsd,&lpDDSSprite,0); // BMP読み込み LoadBitmap(MAKEINTRESOURCE(IDB_BITMAP),lpDDSSprite); ・・・ // 解放 if(lpDDSSprite ) lpDDSSprite ->Release(); lpDDSSprite =0; if(lpDDSPrimary) lpDDSPrimary->Release(); lpDDSPrimary=0; if(lpDD) lpDD->Release(); lpDD=0;
int CAPPMAIN::LoadBitmap(char *strBmp,LPDIRECTDRAWSURFACE lpDDSdest) { // BMP読み込み HBITMAP hBmp=(HBITMAP)LoadImage(GetModuleHandle(0),strBmp,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION); if(!hBmp) return 1; // BMP情報取得 BITMAP bmp; GetObject(hBmp,sizeof(BITMAP),&bmp); int w=bmp.bmWidth; int h=bmp.bmHeight; // BMP転送 HDC hDCmem=CreateCompatibleDC(0); SelectObject(hDCmem,hBmp); HDC hDC; lpDDSdest->GetDC(&hDC); BitBlt(hDC,0,0,w,h,hDCmem,0,0,SRCCOPY); lpDDSdest->ReleaseDC(hDC); DeleteDC(hDCmem); DeleteObject(hBmp); return 0; }
// 玉 for(int i=0;i<10;i++) { // RECT作成 RECT rcDest,rcSrc={0,0,32,32}; rcDest.left=rand()%(640+32)-32; rcDest.right=rcDest.left+32; rcDest.top =rand()%(480+32)-32; rcDest.bottom=rcDest.top+32; rcSrc.left=(rand()%4)*32; rcSrc.right=rcSrc.left+32; // BMP転送 lpDDSBack->Blt(&rcDest,lpDDSSprite,&rcSrc,DDBLT_WAIT,0); }