|
|

楼主 |
发表于 2004-11-25 11:33:00
|
显示全部楼层
Re:[请教]关于LPDIRECTDRAWSURFACE7
多谢了,可是我在使用的时候就是遇到了这样的问题啊??
把LPIDRECTDDRAWSURFACE7 &lpsurf 换成LPIDRECTDDRAWSURFACE7 lpsurf
就会出错,程序会无故退出???这让我很是郁闷啊??
我的函数:
BOOL CDDraw::CreateSurface (LPDIRECTDRAWSURFACE7 &lpSurf,int Width,int Height,DWORD MemoryFlag)
{
DDSURFACEDESC2 ddsd;
HRESULT ddrval;
ZeroMemory(&ddsd,sizeof(ddsd));
ddsd.dwSize=sizeof(ddsd);
ddsd.dwFlags=DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH;
ddsd.ddsCaps.dwCaps=DDSCAPS_OFFSCREENPLAIN|MemoryFlag;
ddsd.dwWidth=Width;
ddsd.dwHeight=Height;
ddrval=lpDD->CreateSurface(&ddsd,&lpSurf,NULL);
if(FAILED(ddrval))
{
MessageBox(hWnd,"创建offscreen失败","ERROR",MB_OK);
return FALSE;
}
return TRUE;
}
BOOL CDDraw: oadBMPSurface (LPDIRECTDRAWSURFACE7 &lpSurf,int Width,int Height,LPCSTR BitmapFile,DWORD MemoryFlag)
{
HDC hdc;
HDC hdcImage;
HBITMAP hbm;
BITMAP bm;
BOOL bResult;
HRESULT ddrval;
DDSURFACEDESC2 ddsd;
hbm=(HBITMAP)LoadImage(NULL,BitmapFile,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
if(hbm==NULL)
{
MessageBox(hWnd,"装载位图到hbm失败","ERROR",MB_OK);
return FALSE;
}
hdcImage=CreateCompatibleDC(NULL);
if(hdcImage==NULL)
{
MessageBox(hWnd,"创建hdcImage失败","ERROR",MB_OK);
return FALSE;
}
SelectObject(hdcImage,hbm);
GetObject(hbm,sizeof(bm),&bm);
Width=(Width==0?bm.bmWidth :Width);
Height=(Height==0?bm.bmHeight :Height);
bResult=CreateSurface(lpSurf,Width,Height,MemoryFlag);
if(!bResult)
{
MessageBox(hWnd,"创建页面...失败","ERROR",MB_OK);
return FALSE;
}
ddsd.dwSize=sizeof(ddsd);
lpSurf->GetSurfaceDesc(&ddsd);
ddrval=lpSurf->GetDC(&hdc);
if(BitmapFile!=NULL)
{
if(ddrval==DD_OK)
{
StretchBlt(hdc,0,0,ddsd.dwWidth,ddsd.dwHeight,hdcImage,0,0,bm.bmWidth ,bm.bmHeight ,SRCCOPY);
lpSurf->ReleaseDC(hdc);
}
}
DeleteDC(hdcImage);
if(ddrval!=DD_OK)
{
MessageBox(hWnd,"得到lpSurf设备失败","ERROR",MB_OK);
return FALSE;
}
return TRUE;
}
是装载一个位图到lpsurf, &lpsurf运行正确,lpsurf调试无错,运行则无故跳出了 |
|