DFB系列 之 SetCooperativeLevel协作级别

本文详细解析了DirectFB库中的SetCooperativeLevel函数,包括其函数声明、参数介绍及注意事项,帮助开发者正确理解并应用此函数进行DirectFB对象间的协作级别设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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里调用时就不应该打开光标,因为这可能会造成程序不正常退出。) 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YoungerChina

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值