DirectDraw的协作层

来源:百度知道 编辑:UC知道 时间:2024/05/27 09:55:41
DirectDraw的协作层是什么意思?

协作层(Cooperative Levels)

关于协作层
协作层描述了 DirectDraw 如何与显示相互作用及一些影响显示的因素. 使用IDirectDraw4::SetCooperativeLevel宏来设置DirectDraw的协作层. 在多数情况下, 你使用 DirectDraw 协作层来决定你的程序运行于专有排它的全屏模式或运行于窗口. 不管怎样, DirectDraw协作层还有以下功能:

允许DirectDraw 使用 Mode X 解析度. 详见 Mode X 及 Mode 13 显示模式. 进行排它性显示及防止使用者用CTRL+ALT+DEL重新启动(仅在排它模式) 允许DirectDraw响应最大及最小化事件.
普通协作层指出你的程序将运行于窗口模式. 在这种协作层你无法改变主平面调色板或进行页交换. 因为程序可以使用多窗口, IDirectDraw4::SetCooperativeLevel 无须指定窗口句柄如果程序使用DDSCL_NORMAL模式. 通过传递一个NULL窗口句柄, 所有的窗口都可被设置为普通窗口模式.
在全屏排它协作层, 你可以完全使用硬件的一切. 在这个模式, 你可以设置使用定义及动态调色板, 改变显示分辨率及进行页交换. 在排它模式(全屏模式)并不保护其他已分配的平面, 也不会阻止其他程序使用DirectDraw及GDI. 不管如何, 它可以保护不使其他运行程序访问及改变调色板及分辨率. DirectDraw会控制全屏下的窗口事件, 排它模式程序, 发送 WM_ACTIVATEAPP 消息到通过 SetCooperativeLevel 注册的窗口句柄. DirectDraw 仅仅发送消息到顶层窗口. 如果你的程序创建的子窗口也需要接受事件信息, 你就需要进行相对的设置.
SetCooperativeLevel 保持一个进程与一个窗口句柄之间的联系. 如果一个进程调用 SetCooperativeLevel, 就会在窗口与进程之间建立联系. 如果同一进程再次使用一个非 NULL的窗口句柄调用SetCooperativeLevel, 就会返回一个DDERR_HWNDALREADYSET的错误值. 有时程序会在使用Direc