|
|
以下是我想写一个将指定的BMP位图加载到Surface中去的函数:
函数第一个参数lpSurface 是欲创建的LPDIRECTDRAWSURFACE7 对象。
第二个参数是指定某个BMP位图的路径,如 "C:\\aaa.bmp"
HRESULT CreateSurfaceFormBitmap(LPDIRECTDRAWSURFACE7 lpSurface,TCHAR *Path)
{
HDC hdc_surf;
HDC hdc_image;
HBITMAP hbmp1;
BITMAP bmp1;
DDSURFACEDESC2 ddsd_t;
hbmp1 = (HBITMAP)LoadImage(0,Path,IMAGE_BITMAP,0,0,LR_LOADFROMFILE | LR_DEFAULTSIZE);
hdc_image = CreateCompatibleDC(NULL);
SelectObject(hdc_image,hbmp1);
GetObject(hbmp1,sizeof(bmp1),&bmp1);
ZeroMemory(&ddsd_t,sizeof(ddsd_t));
ddsd_t.dwSize = sizeof(ddsd_t);
ddsd_t.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
ddsd_t.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
ddsd_t.dwHeight = bmp1.bmHeight;
ddsd_t.dwWidth = bmp1.bmWidth;
rsl = lpdraw->CreateSurface(&ddsd_t,&lpSurface,NULL);
if (FAILED(rsl))
MessageBox(hWnd,"error1","error1",0);
rsl = lpSurface->GetDC(&hdc_surf);
if (FAILED(rsl))
MessageBox(hWnd,"error3","error3",0);
StretchBlt(hdc_surf,0,0,bmp1.bmWidth,bmp1.bmHeight,hdc_image,0,0,bmp1.bmWidth,bmp1.bmHeight,SRCCOPY);
lpSurface->ReleaseDC(hdc_surf);
DeleteDC(hdc_image);
DeleteObject(hbmp1);
return DD_OK;
}
如果执行这段函数后,然后在调用 GetSurfaceDesc来获得刚才建立的Surface的描述结构,就回整个程序退出了,如果没有调用GetSurfaceDesc就没有事。主要是什么提示都没有的就退出了。不知道我这个函数里还有什么不足的。
还有想问一下,哪个版本的Directx SDK 安装的时候有Debug 模式的提示。我系统里装的是
Directx9.0c 发布版。也装了Directx7.0 SDK 和 Directx8.1b SDK 但我运行dxdiag程序的时候
查看"Directx 文件"标签里的属性都是“最终 零售"的属性。如果是调试版的话应该就会有些提示出来吧。多谢!
[em4] |
|