如何从DXGI SwapChain或D3D11 Device获取HWND?
获取D3D11中DXGISwapChain关联的HWND
D3D11里无法直接从D3D11Device获取HWND——因为单个D3D11Device可以对应多个DXGISwapChain(绑定不同窗口),但你可以直接通过DXGISwapChain的GetDesc方法获取绑定的窗口句柄,具体实现如下:
void OnPresent(IDXGISwapChain *swapChain) { DXGI_SWAP_CHAIN_DESC swapChainDesc = {}; HRESULT hr = swapChain->GetDesc(&swapChainDesc); if (SUCCEEDED(hr)) { HWND targetHwnd = swapChainDesc.OutputWindow; // 拿到HWND后可执行后续逻辑 } }
关键说明:
DXGI_SWAP_CHAIN_DESC结构体的OutputWindow字段,就是创建该SwapChain时传入的窗口句柄。- 调用
GetDesc必须检查返回值,确保操作成功(比如SwapChain已失效的情况会返回失败)。 - D3D11Device本身不维护窗口关联信息,因此只能从与窗口直接绑定的SwapChain入手获取HWND。
内容的提问来源于stack exchange,提问作者Bork
相关产品推荐
相关产品推荐

