首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Direct3D (DirectX)应用程序中禁用alt-enter

在Direct3D (DirectX)应用程序中禁用alt-enter
EN

Stack Overflow用户
提问于 2010-03-01 07:50:44
回答 2查看 6.7K关注 0票数 8

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

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

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

代码语言:javascript
复制
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);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-06 02:17:31

我认为问题是这样的。

因为设备是您自己创建的(而不是通过工厂),所以对您创建的工厂的任何调用都不会改变任何东西。

所以要么你:

a)之前创建工厂并通过它创建设备

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

代码语言:javascript
复制
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之后)

代码语言:javascript
复制
pIDXGIFactory->MakeWindowAssociation(mhMainWnd, DXGI_MWA_NO_ALT_ENTER);

MSDN: IDXGIFactory

票数 11
EN

Stack Overflow用户

发布于 2010-04-02 01:02:48

我也有同样的问题

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

对我也没有帮助,可能是因为我有很多Direct3D10窗口,但IDXGIFactory::MakeWindowAssociation只记住了一个。但是,由于未知的原因,在WM_SETFOCUS或WM_ACTIVATE上调用该函数也没有什么帮助。

因此,我发现的一种方法是使用低级键盘钩子:请参阅带有WH_KEYBOARD_LL参数的SetWindowsHookEx。稍后,您可以在(VK_LMENU|VK_RMENU|VK_MENU)已经被按下的条件下,通过VK_RETURN虚拟代码来捕获Alt+Enter。在认识到这种情况后,只需返回1,而不是调用CallNextHookEx函数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2353178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档