我正在阅读Introduction to 3D Game Programming with DirectX 10以学习一些DirectX,并且正在尝试进行建议的练习(对于拥有本书的人,第4章)。

一个练习要求使用 IDXGIFactory::MakeWindowAssociation 禁用Alt + Enter功能(切换全屏模式)。

但是无论如何它会切换全屏模式,我不明白为什么。这是我的代码:

HR(D3D10CreateDevice(
        0,                 //default adapter
        md3dDriverType,
        0,                 // no software device
        createDeviceFlags,
        D3D10_SDK_VERSION,
        &md3dDevice) );

IDXGIFactory *factory;
HR(CreateDXGIFactory(__uuidof(IDXGIFactory), (void **)&factory));
HR(factory->CreateSwapChain(md3dDevice, &sd, &mSwapChain));
factory->MakeWindowAssociation(mhMainWnd, DXGI_MWA_NO_ALT_ENTER);
ReleaseCOM(factory);

最佳答案

我认为问题是这样的。

由于您是自己(而不是通过工厂)创 build 备的,因此对您创建的工厂进行的任何调用都不会更改任何内容。

因此,您要么:

a)较早创建工厂并通过它创 build 备

或者

b)通过以下代码检索实际用于创 build 备的工厂。

IDXGIDevice * pDXGIDevice;
HR( md3dDevice->QueryInterface(__uuidof(IDXGIDevice), (void **)&pDXGIDevice) );

IDXGIAdapter * pDXGIAdapter;
HR( pDXGIDevice->GetParent(__uuidof(IDXGIAdapter), (void **)&pDXGIAdapter) );

IDXGIFactory * pIDXGIFactory;
pDXGIAdapter->GetParent(__uuidof(IDXGIFactory), (void **)&pIDXGIFactory);

并通过该工厂调用该函数(在创建SwapChain之后)
pIDXGIFactory->MakeWindowAssociation(mhMainWnd, DXGI_MWA_NO_ALT_ENTER);

MSDN: IDXGIFactory

关于c++ - 在Direct3D(DirectX)应用程序中禁用替代输入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2353178/

10-13 02:53