2012-10-30 96 views
1

请原谅我,如果我的怀疑是愚蠢的或愚蠢的。我对DirectX编程完全陌生。只需拥有C++知识(非常基础的COM知识)。创建一个没有HWND输入参数的D3D设备到MSFT CreateDevice()函数

下面的代码示例来自MSDN Creating D3D device,它解释了如何从头开始创建D3D设备。

MyDoubt是

在这里,函数 “pD3D-> CreateDeviceEx()” 发生在一个参数 HWND HWND。如果我正尝试从 commadline C++ win32应用程序创建D3D设备,那么我需要使用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

我发现非常有用[此网页](http://www.directxtutorial.com/)了解配置和使用DirectX的第一步。 –

回答

3

在Windows中所有的视觉事情都是由窗口句柄控制。您无法创建D3D“设备”并将其附加到“无”。您必须将“D3D设备”与某个窗口(您自己的或桌面)相关联。

您的控制台窗口是由系统创建的,并且您不控制其创建标志,因此即使您使用GetConsoleWindow函数,也不能在Direct3D设备创建函数中使用此HWND(这可能随着Aero的引入而改变)。

您无法避免在控制台应用程序中创建另一个窗口句柄。使用RegisterWindowClassCreateWindow函数来创建一个新窗口或找到桌面的句柄(我怀疑你会想要这样做)。

相关问题