之前发过这类似的帖子没人回呀,又是DX6 古老没什么太多资料,自己也不懂DX编程
下面是我的步骤
HOOK IDirectDraw(全部) ::CreateSurface主要是获取主表面HRESULT __stdcall proxyIDirectDraw::CreateSurface( LPDDSURFACEDESC2 lpDDSurfaceDesc2,LPDIRECTDRAWSURFACE4 FAR* lplpDDSurface,IUnknown FAR* pUnkOuter )
{
HRESULT hResult = origIDirectDraw->CreateSurface(lpDDSurfaceDesc2,lplpDDSurface,pUnkOuter);
if(lpDDSurfaceDesc2->ddsCaps.dwCaps == 0x200)//主表面
{
my_lpDDSPrimary = *lplpDDSurface;
}
//这里是第二次经过获取,然后用这个绘图,自己创建过,但是失败告终
if( dwoff == 1)
{
my_lpDDSBack = *lplpDDSurface;
dwoff=2;
}
return hResult;
}
HOOK IDirect3D(全部) 为了获取IDirect3D::CreateDevice 得到IDirect3DDevice::EndSceneHRESULT __stdcall proxyIDirect3D::CreateDevice(REFCLSID rclsid,LPDIRECTDRAWSURFACE4 lpDDS,LPDIRECT3DDEVICE3 * lplpD3DDevice,LPUNKNOWN pUnkOuter)
{
HRESULT hRes;
hRes = origIDirect3D->CreateDevice(rclsid,lpDDS,lplpD3DDevice,pUnkOuter);
if ( hRes == D3D_OK )
{
*lplpD3DDevice = new proxyIDirect3DDevice(*lplpD3DDevice);
*g_pDirect3DDevice = *lplpD3DDevice;
}
return hRes;
}HRESULT __stdcall proxyIDirect3DDevice::EndScene()
{
//绘图,代码完全DX7 SDK samples DDex1里面改的。
DDSURFACEDESC2 ddsdDest,ddsdSour;
RECT rect;
DDBLTFX ddBltFx;
ddBltFx.dwSize=sizeof(DDBLTFX);
ddBltFx.dwFillColor=0;
::SetRect(&rect,0,0,300,200);
ZeroMemory(&ddsdDest,sizeof(ddsdDest));
ZeroMemory(&ddsdSour,sizeof(ddsdSour));
ddsdDest.dwSize=sizeof(ddsdDest);
ddsdSour.dwSize=sizeof(ddsdSour);
LPDIRECTDRAWSURFACE4 lpDDSPic1;
lpDDSPic1=DDLoadBitmap(g_pDirectDraw,"1.bmp",300,200);
g_pDirectDraw->my_lpDDSBack->Blt(NULL,NULL,NULL,DDBLT_WAIT|DDBLT_COLORFILL,&ddBltFx);
g_pDirectDraw->my_lpDDSBack->BltFast(0,0,lpDDSPic1,&rect,DDBLTFAST_WAIT);


HRESULT hResult = origIDirect3DDevice->EndScene();

return hResult;
}
以上就是步骤....启动游戏后黑屏的,但图片能显示出来,全屏模式下不黑屏 但图片显示不了。这是几个月前的帖子http://topic.csdn.net/u/20110724/06/9b05bf12-6add-4f7f-bfc3-1b3851d4dea5.html