博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2013 duilib入门简明教程 -- 自绘标题栏(5)
阅读量:5346 次
发布时间:2019-06-15

本文共 1549 字,大约阅读时间需要 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已经提供了一个基础的类来实现常用的功能,所以这里就略过了。

转载于:https://www.cnblogs.com/Alberl/p/3343667.html

你可能感兴趣的文章
Selenium API 介绍
查看>>
leetcode 153: Majority Element
查看>>
网页响应式媒体查询
查看>>
SQLServer字符操作
查看>>
Bit Twiddling Hacks
查看>>
Instruments Tutorial for iOS: How To Debug Memory Leaks
查看>>
图片播放技术总结
查看>>
git使用常见命令
查看>>
简易滚动选择视图
查看>>
Java for LeetCode 070 Climbing Stairs
查看>>
django1.11 启动错误:Generator expression must be parenthesized
查看>>
[sql server、oracle] 分组取最大值最小值常用sql
查看>>
给VS自动添加注释
查看>>
MongoDb中修改记录的指定字段
查看>>
鼠标移上与移出事件
查看>>
DDD:大牛们关于聚合的理解
查看>>
IDE eclipse PyDev插件安装
查看>>
php里www用户建立的文件ftp用户无法删除的情况
查看>>
实验二+067+冯艳芳
查看>>
史上最全的CSS hack方式一览
查看>>