Прошу прощения, если мои сомнения глупы или глупы. Я совершенно новичок в программировании DirectX. Просто имейте знания C ++ (очень базовые знания COM).
Ниже приведен пример кода из MSDN Создание устройства D3D который объясняет, как создать устройство D3D с нуля.
MyDoubt это :
Здесь функция «pD3D-> CreateDeviceEx ()«принимает параметр
HWND HWND. Что делать, если я пытаюсь создать устройство D3D из
Commadline C ++ Win32 приложение, где мне нужно использовать некоторые функции в интерфейсах устройства 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;
}
В Windows все визуальные элементы управляются дескрипторами окна. Вы не можете создать D3D «устройство» и прикрепить его к «ничто». Вы должны связать «устройство D3D» с некоторым окном (вашим собственным или рабочим столом).
Окно консоли создается системой, и вы не контролируете его флаги создания, поэтому даже если вы используете GetConsoleWindow функция, вы не можете использовать этот HWND в функциях создания устройства Direct3D (это могло измениться с появлением Aero).
Вы не можете избежать создания еще одного дескриптора окна в своем консольном приложении. Использовать RegisterWindowClass
а также CreateWindow
функции, чтобы создать новое окно или найти дескриптор для вашего рабочего стола (я сомневаюсь, что вы этого захотите).
Других решений пока нет …