cha*_*aos 38 windows directx alt-tab task-switching
在编写DirectX应用程序时,显然需要支持用户暂停应用程序Alt- Tab以一种快速且无错误的方式.确保这一点的最佳做法是什么?需要解决的问题包括:
有趣的技巧和陷阱也很好听.
jjx*_*tra 43
我将假设您使用C++来达到我的答案目的,但如果您能够负担得起C#,XNA(http://creators.xna.com/)是一个出色的游戏平台,可以为您处理所有这些问题.
1]
本文有助于窗口过程中的窗口事件检测窗口何时丢失或获得焦点,您可以在主窗口上处理:http://www.functionx.com/win32/Lesson05.htm.此外,请在此处查看WM_ACTIVATEAPP消息:http://msdn.microsoft.com/en-us/library/ms632614( VS.85).aspx
2]
当应用程序从全屏模式失去焦点时,图形设备将丢失.Microsoft提供了一篇关于如何处理此问题的文章:http://msdn.microsoft.com/en-us/library/bb174717(VS.85).aspx本文还有一个丢失的设备教程:http://www.codesampler的.com/dx9src/dx9src_6.htm
DirectInput也可能有设备丢失错误状态,这里有一个链接:http://www.toymaker.info/Games/html/directinput.html
DirectSound也可能有设备丢失错误状态,本文的代码处理:http://www.eastcoastgames.com/directx/chapter2.html
3]
我会确保永远不会禁用Alt-Tab.当应用程序处于非活动状态时,您可能希望获得最小的CPU负载,因为用户可能是Alt-Tabbed,因为他们想要执行其他操作,因此您可以完全暂停应用程序,或减少每秒渲染的帧数.如果应用程序被最小化,您当然也不需要渲染任何东西.在考虑网络游戏之后,我最好的解决方案是你仍然应该减少每秒渲染的帧数以及处理的网络数据包的数量,甚至可能丢掉许多进入的数据包,直到重新激活游戏.
4]
老实说,如果你想将目标操作系统限制在Vista和更新版本,我会坚持使用DirectX 9.0c(或者DirectX 10),如果可能的话:)
最后,DirectX sdk有许多教程和示例:http://www.microsoft.com/downloads/details.aspx? FamilyID = 24a541d6-0486-4453-8641-1eee9e21b282&displaylang = en