zoukankan      html  css  js  c++  java
  • DFB系列 之 SetCooperativeLevel协作级别

    1. 函数原型解析

    函数声明

        function SetCooperativeLevel(hWnd: HWND; dwFlags: DWORD): HResult; stdcall;

        设置指定的IDirectFB对象与其它IDirectFB对象的协作级别

    参数介绍

        hWnd: DirectDraw具体指向的窗体,在所有的情况下,只需使用主窗体句柄。

        dwFlags:控制标志参数,直接影响DirectDrawWindows协同工作的方式。下面为说明:

        DFSCL_ALLOWMODEX:允许使用Mode X显示模式。只有当DFSCL_EXCLUSIVE DFSCL_FULLSCREEN标志存在的时候才能使用 。

        DFSCL_ALLOWREBOOT:当处于独占(全屏)模式时,允许Ctrl+Alt+Del被检测到。

        DFSCL_EXCLUSIVE:请求独占级别,该标志必须和DFSCL_FULLSCREEN 一起使用。

        DFSCL_FULLSCREEN:表示需要全屏模式。其他程序中的GDI将不允许在屏幕上画图。这个标志必须和DDSCL_EXCLUSIVE一起使用。

        DFSCL_NORMAL:表示应用程序将是一个标准的Windows应用程序。该标志不能和DFSCL_ALLOWMODEXDDSCL_EXCLUSIVE,DDSCL_FULLSCREEN 一起使用。

        DFSCL_NOWINDOWCHANGES:表示在激活状态下,不允许DirectDraw最小化或恢复窗体。

    返回值

    如果执行成功,返回DD_OK,否则返回错误代码。

    2. 实例

    static void* sample_func(IDirectFB *dfb)
    {
        ...
        //dfb->SetCooperativeLevel(dfb, DFSCL_FULLSCREEN);
        dfb->SetCooperativeLevel(dfb, DFSCL_NORMAL);
        ...

    3. 注意事项

        SetCooperativeLevel()设置指定的IDirectFB对象与其它IDirectFB对象的协作级别。

        DFSCL_FULLSCREEN和DFSCL_EXCLUSIVE的处理方式是一样的,与DFSCL_NORMAL的差别是它们有自己独立的Context,也就是说设置为DFSCL_FULLSCREEN的DirectFB对象自成一个体系,不会与其它DirectFB对象干扰。在多进程情况下,一般是设置为DFSCL_NORMAL的,它保证所有窗口由同一个窗口器管理。

        (题外话,这个函数里调用了drop_window函数,drop_window的实现是有点问题的,它始终调用dfb_windowstack_cursor_enable去打开光标,这是不对的,应该根据据情况而定,在IDirectFB_Destruct里调用时就不应该打开光标,因为这可能会造成程序不正常退出。) 


  • 相关阅读:
    Sitecore安全:访问权限
    Sitecore 8.2 防火墙规则的权威指南
    Sitecore 8.2 安全性第2部分:安全性编辑器和Access Viewer
    Sitecore安全性第1部分:自定义角色和权限
    Sitecore 8.2 Admin用户帐户解锁
    Sitecore 8.2 数据库权限设置
    cesium 结合 geoserver 实现地图属性查询(附源码下载)
    Vue&Cesium&Ribbon界面: 将桌面GIS搬进浏览器
    leaflet图斑历史时空播放(附源码下载)
    openlayers6结合geoserver实现地图属性查询(附源码下载)
  • 原文地址:https://www.cnblogs.com/youngerchina/p/5624510.html
Copyright © 2011-2022 走看看