Hallo
Sorry, ich hab's ganz vergessen das hier noch was war ;-)
Hmm sieht eigentlich alles unverdächtig(auf den kurzen Blick) aus.
Allerdings fällt mir auf das da StretchBlt verwendet wird was mich sofort stutzig werden lässt da ich es dafür noch nie verwendet habe. Hier mal eine alternative Funktion die getestet ist und funktioniert allerdings setzt sie globale Schnitstellenzeiger für DD voraus, das müsstest Du evtl. noch anpassen. Komplettes Beispielprojekt gibts via E-Mail. Musst nur sagen wohin.
LPDIRECTDRAWSURFACE7 Load_Bitmap_In_Surface(LPCTSTR file_name, RECT*dims=NULL)
{
HDC hdc;
HBITMAP bit;
LPDIRECTDRAWSURFACE7 surf;
bit=(HBITMAP) LoadImage(NULL,file_name,IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);
if(!bit) return NULL;
BITMAP bitmap;
GetObject( bit, sizeof(BITMAP), &bitmap );
int surf_width=bitmap.bmWidth;
int surf_height=bitmap.bmHeight;
HRESULT ddrval;
DDSURFACEDESC2 ddsd;
ZeroMemory(&ddsd,sizeof(ddsd));
ddsd.dwSize = sizeof(DDSURFACEDESC2);
ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT ;
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
ddsd.dwWidth = surf_width;
ddsd.dwHeight = surf_height;
ddrval=lpDD->CreateSurface(&ddsd,&surf,NULL);
if (ddrval!=DD_OK)
{
DeleteObject(bit);
return NULL;
}
else
{
surf->GetDC(&hdc);
HDC bit_dc=CreateCompatibleDC(hdc);
SelectObject(bit_dc,bit);
BitBlt(hdc,0,0,surf_width,surf_height,bit_dc,0,0,SRCCOPY);
surf->ReleaseDC(hdc);
DeleteDC(bit_dc);
if (dims)
{
dims->left=0;
dims->top=0;
dims->right=surf_width;
dims->bottom=surf_height;
}
}
DeleteObject(bit);
return surf;
}
Gruß