如果我怀疑是愚蠢或愚蠢,请原谅我。我是DirectX编程的新手。拥有C ++知识(非常基本的COM知识)。
以下代码示例来自MSDN Creating D3D device,其中介绍了如何从头开始创建D3D设备。
MyDoubt :
此处函数“ pD3D-> CreateDeviceEx()”接受参数 HWND hwnd。如果我尝试从a创建D3D设备怎么办? commadline C ++ win32 app我需要使用D3D设备接口中的一些功能。我如何获得HWND字段。在这种情况下 我该如何创建D3D设备。请详细解释。
HRESULT InitD3D9Ex( /* IN */ HWND hWnd, /* OUT */ IDirect3DDevice9Ex ** ppD3DDevice )
{
HRESULT hr = E_FAIL;
IDirect3D9Ex * pD3D = NULL;
IDirect3DDevice9Ex * pDevice = NULL;
if(ppD3DDevice == NULL)
{
return hr;
}
// Create the D3D object, which is needed to create the D3DDevice.
if(FAILED(hr = Direct3DCreate9Ex( D3D_SDK_VERSION, &pD3D )))
{
*ppD3DDevice = NULL;
return hr;
}
// Set up the structure used to create the D3DDevice.
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
// Create the Direct3D device.
if( FAILED( hr = pD3D->CreateDeviceEx( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp, NULL, &pDevice ) ) )
{
*ppD3DDevice = NULL;
return hr;
}
// Device state would normally be set here
*ppD3DDevice = pDevice;
return hr;
}
答案 0 :(得分:3)
在Windows中,所有可视内容都由窗口句柄控制。您无法创建D3D“设备”并将其附加到“无”。您必须将“D3D设备”与某个窗口(您自己的一个或桌面)相关联。
您的控制台窗口是由系统创建的,并且您不控制其创建标志,因此即使您使用GetConsoleWindow功能,也不能在Direct3D设备创建功能中使用此HWND(这可能已更改为介绍Aero)。
您无法避免在控制台应用程序中创建另一个窗口句柄。使用RegisterWindowClass
和CreateWindow
函数创建一个新窗口或找到桌面的句柄(我怀疑你会想要这样)。