|
|
发表于 2007-3-17 18:50:00
|
显示全部楼层
Re:Direct不能显示图片到屏幕
extern "C" LPDIRECTDRAWSURFACE dxLoadImageLPDIRECTDRAW pdd, LPCSTR szBitmap)
{
HBITMAP hbm;
BITMAP bm;
DDSURFACEDESC ddsd;
LPDIRECTDRAWSURFACE pdds;
hbm = (HBITMAP)LoadImage(NULL, TEXT(szBitmap), IMAGE_BITMAP, 0, 0,
LR_LOADFROMFILE | LR_DEFAULTSIZE);
GetObject(hbm, sizeof(BITMAP), (PTSTR)& bm);
ZeroMemory(&ddsd, sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY;
ddsd.dwWidth = bm.bmWidth;
ddsd.dwHeight = bm.bmHeight;
if (pdd->CreateSurface(&ddsd, &pdds, NULL) != DD_OK)
{
return NULL;
}
dxCopyImage(pdds, hbm, 0, 0, 0, 0);
DeleteObject(hbm);
return pdds;
}
extern "C" int dxCopyImage(LPDIRECTDRAWSURFACE pdds, HBITMAP hbm, INT32 x,INT32 y,INT32
dx,INT32 dy)
{
HDC hdcImage;
HDC hdc;
BITMAP bm;
DDSURFACEDESC ddsd;
if (hbm == NULL || pdds == NULL)
{
return DX_FALSE;
}
pdds->Restore();
hdcImage = CreateCompatibleDC(NULL);
if (!hdcImage)
{
return 0;
}
SelectObject(hdcImage, hbm);
GetObject(hbm, sizeof(bm), &bm);
dx = (dx == 0 ? bm.bmWidth : dx);
dy = (dy == 0 ? bm.bmHeight : dy);
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_HEIGHT | DDSD_WIDTH;
pdds->GetSurfaceDesc(&ddsd);
if ((pdds->GetDC(&hdc)) == DD_OK)
{
StretchBlt(hdc, 0, 0, ddsd.dwWidth, ddsd.dwHeight, hdcImage, x, y, dx, dy,
SRCCOPY);
pdds->ReleaseDC(hdc);
}
DeleteDC(hdcImage);
return 1;
}
发代码
先读到离屏页面,再BLT到主页面 |
|