从没接触过directX,搞了两天了,还没搞明白。
硬着头皮,
研究了两天写了两个小程序测试了一下
Direct3D9App是一个D3D模式粒子放射循环动画窗口,
DirectXTest用Direct3D9App的窗口名,找到它的句柄,想给它截图可截出来的图是花的,如下图
这是为什么呀,我实在是搞不明白了,求前辈指点,感激不尽啊
代码在这里
void CDirectXTestDlg::OnBnClickedButton() //点击截图的按钮的函数
{
UpdateData(TRUE);
if(m_windowname==L"") //m_windowname是CDirectXTest中的编辑框变量
return;
IDirect3DDevice9* directDevice = 0;
HWND hwnd=::FindWindow(NULL,m_windowname.AllocSysString());
if(hwnd==NULL)
return;
CRect rect;
::GetClientRect(hwnd,&rect);
D3DDISPLAYMODE d3dDipMode;
if(FALSE==CreateDirectDevice(hwnd,rect.Width(),rect.Height(), true, D3DDEVTYPE_HAL, &directDevice,&d3dDipMode))
return;
CopyBmp(L"E:\\1.bmp", directDevice);
directDevice->Release();
directDevice=NULL;
}
HRESULT CopyBmp(TCHAR* filename,IDirect3DDevice9* pDev)
{
HRESULT hr;
D3DDISPLAYMODE mode;
IDirect3DSurface9* surf;
if (FAILED(hr=pDev-> GetDisplayMode(0,&mode)))
return hr;
if (FAILED(hr=pDev->CreateOffscreenPlainSurface(mode.Width,mode.Height,D3DFMT_A8R8G8B8,D3DPOOL_SYSTEMMEM,&surf,NULL)))
return hr;
if (FAILED(hr=pDev->GetBackBuffer(0,0,D3DBACKBUFFER_TYPE_FORCE_DWORD,&surf)))
{
surf-> Release();
return hr;
}
hr=D3DXSaveSurfaceToFile(filename,D3DXIFF_BMP,surf,NULL,NULL);
surf-> Release();
return hr;
}
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课