acr*_*ron 6 c++ directx winapi
这是一个边缘情况,但我正在开发一个使用多个监视器的游戏.出于这个问题范围之外的原因,我使用的是"多设备方法"而不是交换链.我的代码类似于以下示例:
http://www.codesampler.com/dx9src/dx9src_1.htm#dx9_multiple_devices
我正在努力的是什么,我找不到任何文档,是否可以在真正的全屏幕(即d3dpp.Windowed = FALSE;)中运行两个窗口.目前我CreateDevice在第二次打电话时遇到了'无效的params'ERSEULT .如果其中一个窗口是全屏的,它可以正常工作,但不是两个.我希望有一个设置让这项工作尽管......
提前干杯
根据Direct3D 9文档(使用多个监视器系统):"实际意义是多监视器应用程序可以将多个设备置于全屏模式,但只有当所有这些设备都用于不同的适配器时,才能创建相同的设备. Direct3D9对象,并且都共享相同的焦点窗口."
您会注意到每个设备初始化有两个窗口句柄; 演示窗口和焦点窗口.焦点窗口(传入IDirect3D9 :: CreateDevice)用于处理事件,例如从前景切换到背景或Alt + Tab.演示窗口传递到D3DPRESENT_PARAMETERS结构,仅用作Direct3D的画布.
您应该将您创建的一个窗口(可能是第一个窗口)标记为焦点窗口.在设备之间共享焦点窗口,但保持"画布"(演示)窗口分开.
编辑: 这也可能对你有所帮助.
为两个设备创建焦点窗口.
(可选)为第一个适配器创建设备窗口.
为第二个适配器创建一个设备窗口.
创建direct3d9上下文.
用它来创建两个设备.
使用共享焦点窗口和(可选)第一个设备窗口创建第一个全屏设备.
使用共享焦点窗口和第二个设备窗口创建第二个全屏设备.
重置第一个设备.
共享焦点窗口作为参数直接传递给CreateDevice.
设备窗口在表示参数结构中传递.