控制级
控制级(Cooperative Levels)
返回上级
控制级描述了DirectDraw是怎样与显示设备相互作用的,它如何对系统事件产生反应。使用IDirectDraw2::SetCooperativeLevel函数可以设置DirectDraw的控制级。在很大程度上,开发者使用DirectDraw控制级来决定其应用程序是运行于全屏模式(具有独占的访问视频RAM的特性),还是运行于窗口模式。不管怎样,DirectDraw的控制级具有以下作用。
- 允许DirectDraw使用Mode X分辨率。要得到更多的信息,请参阅“Mode X 和Mode 13显示模式”。
- 阻止DirectDraw释放对显示设备的独占控制,或按Ctrl + Alt + Del以重新启动计算机。(仅用于独占模式)
- 允许DirectDraw对应用程序进行最小化或最大化控制,作为对系统事件的反应。
普通的控制级表明你的DirectDraw应用程序将以窗口的形式运行。在这种控制级下,你将不能改变显示器分辨率,主页面的调色板,或进行换页操作。除此之外,你也不能够调用那些会使视频RAM或视频RAM产生激烈反应的函数,例如:IDirectDraw2::Compact等。
当应用程序为全屏并且独占的控制级时,你就可以充分的利用硬件资源了。在这种控制级下,你可以设置自定义和动态的调色板,改变显示器分辨率,紧凑内存,和实现换页操作等。独占模式(也可称为全屏模式)不会妨碍其它的应用程序分配页面内存,也不会阻止它们使用DirectDraw或GDI的函数性。然而,它的确会阻止除了它自己(为活跃状态时)以外的应用程序改变显示模式或调色板。
因为DirectDraw应用程序可以具有多窗口,所以,在调用IDirectDraw2::SetCooperativeLevel设置控制级时,如果应用程序请求了DDSCL_NORMAL模式(表明应用程序以普通窗口的形式运行),则不需要提供一个指定窗口的句柄。给窗口句柄参数为NULL,所有的窗口的消息进程都可以同时被使用。
IDirectDraw2::SetCooperativeLevel函数在内部捆绑了消息进程和一个窗口句柄。如果IDirectDraw2::SetCooperativeLevel函数在一个进程中被调用了一次,那么,这个进程就会和一个窗口句柄捆绑起来。如果该函数在同一进程中再次被调用,并且指定了另一个合法的窗口句柄,那么会返回一个DDERR_HWNDALREADYSET错误。当DirectSound在设置控制级时指定了与DirectDraw不同的窗口时,有些应用程序也可能会返回这个错误值棗它们必须被设为同一个、顶层的窗口句柄。