带有DirectX 9.0的多个全屏窗口

acr*_*ron 6 c++ directx winapi

这是一个边缘情况,但我正在开发一个使用多个监视器的游戏.出于这个问题范围之外的原因,我使用的是"多设备方法"而不是交换链.我的代码类似于以下示例:

http://www.codesampler.com/dx9src/dx9src_1.htm#dx9_multiple_devices

我正在努力的是什么,我找不到任何文档,是否可以在真正的全屏幕(即d3dpp.Windowed = FALSE;)中运行两个窗口.目前我CreateDevice在第二次打电话时遇到了'无效的params'ERSEULT .如果其中一个窗口是全屏的,它可以正常工作,但不是两个.我希望有一个设置让这项工作尽管......

提前干杯

Not*_*yon 8

根据Direct3D 9文档(使用多个监视器系统):"实际意义是多监视器应用程序可以将多个设备置于全屏模式,但只有当所有这些设备都用于不同的适配器时,才能创建相同的设备. Direct3D9对象,并且都共享相同的焦点窗口."

您会注意到每个设备初始化有两个窗口句柄; 演示窗口和焦点窗口.焦点窗口(传入IDirect3D9 :: CreateDevice)用于处理事件,例如从前景切换到背景或Alt + Tab.演示窗口传递到D3DPRESENT_PARAMETERS结构,仅用作Direct3D的画布.

您应该将您创建的一个窗口(可能是第一个窗口)标记为焦点窗口.在设备之间共享焦点窗口,但保持"画布"(演示)窗口分开.

编辑: 也可能对你有所帮助.

为两个设备创建焦点窗口.

(可选)为第一个适配器创建设备窗口.

为第二个适配器创建一个设备窗口.

创建direct3d9上下文.

用它来创建两个设备.

使用共享焦点窗口和(可选)第一个设备窗口创建第一个全屏设备.

使用共享焦点窗口和第二个设备窗口创建第二个全屏设备.

重置第一个设备.

共享焦点窗口作为参数直接传递给CreateDevice.

设备窗口在表示参数结构中传递.