-2013 duilib入门简明教程 -- 自绘标题栏(5)

    如果大家有做过标题栏的自绘,肯定会感慨各种不容易,并且现有的一些资料虽然完美的实现了功能,但是代码比较乱,需要自行整理。如果用duilib,就是小case啦。
    duilib其实并没有区分标题栏和客户区,它的实现方法是屏蔽了系统自带的标题栏,用客户区来模拟标题栏,所以想怎么画就怎么画,非常方便。
    1、我们首先屏蔽一下系统自带的标题栏,
         在HandleMessage函数里屏蔽以下三个消息即可 WM_NCACTIVATE、WM_NCCALCSIZE、WM_NCPAINT
代码如下:    
    virtual LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
        LRESULT lRes = 0;

        if( uMsg == WM_CREATE ) 
        {
            CControlUI *pWnd = new CButtonUI;
            pWnd->SetName(_T("btnHello"));      // 设置控件的名称,这个名称用于标识每一个控件,必须唯一,相当于MFC里面的控件ID
            pWnd->SetText(_T("Hello World"));   // 设置文字
            pWnd->SetBkColor(0xFF00FF00);       // 设置背景色

            m_PaintManager.Init(m_hWnd);
            m_PaintManager.AttachDialog(pWnd);
            m_PaintManager.AddNotifier(this);   // 添加控件等消息响应,这样消息就会传达到duilib的消息循环,我们可以在Notify函数里做消息处理
            return lRes;
        }
        // 以下3个消息WM_NCACTIVATE、WM_NCCALCSIZE、WM_NCPAINT用于屏蔽系统标题栏
        else if( uMsg == WM_NCACTIVATE ) 
        {
            if( !::IsIconic(m_hWnd) ) 
            {
                return (wParam == 0) ? TRUE : FALSE;
            }
        }
        else if( uMsg == WM_NCCALCSIZE ) 
        {
            return 0;
        }
        else if( uMsg == WM_NCPAINT ) 
        {
            return 0;
        }

        if( m_PaintManager.MessageHandler(uMsg, wParam, lParam, lRes) ) 
        {
            return lRes;
        }

        return __super::HandleMessage(uMsg, wParam, lParam);
    }

即可看到如下效果

    2、对于加入最小化最大化按钮等操作会在后面的教程里讲到,因为duilib已经提供了一个基础的类来实现常用的功能,所以这里就略过了。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
duilib是一个基于C++的轻量级GUI库,它提供了丰富的控件和界面开发工具,方便开发者快速构建界面。其中,duilib提供了自绘标题栏的功能,使得开发者可以自定义标题栏的样式和交互行为。 要实现duilib自绘标题栏,首先需要在XML布局文件中定义标题栏控件。通过设置标题栏的位置、大小和属性等,将其嵌入到主窗口的布局中。 然后,需要在代码中继承duilib提供的类,并重写标题栏的绘制函数。在绘制函数中,可以使用GDI+或者其他绘图工具进行自定义的绘制。例如,可以根据设计需求绘制背景图案、按钮、文本等。 同时,还可以为标题栏添加交互行为。通过重写相应的事件处理函数,实现对标题栏的拖拽、最小化、最大化、关闭等操作。可以根据需要添加点击、移动、释放等事件的处理逻辑,实现标题栏的交互功能。 最后,在主窗口的代码中,通过调用duilib提供的API将标题栏控件与相应的绘制类和事件处理类进行关联。这样,当主窗口加载时,duilib会自动调用对应的绘制函数和事件处理函数,完成自绘标题栏的效果。 总之,使用duilib自绘标题栏可以灵活定制应用程序的界面风格,提升用户体验。开发者可以根据需要自定义标题栏的样式和交互行为,以满足不同项目的需求。同时,通过duilib提供的API和工具,实现自绘标题栏也是相对简单和高效的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值