zoukankan      html  css  js  c++  java
  • 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已经提供了一个基础的类来实现常用的功能,所以这里就略过了。
  • 相关阅读:
    判断用户没有点击页面几秒后强制返回
    sql中sum()函数与case()函数的使用
    footer高度任意+js实现footer在底部
    让footer固定在底部(转自阮一峰老师博客)
    quartz不实现job接口的demo
    mybatis参数类型为map
    告诉你一个将 footer 保持在底部的最好方法
    多维数组介绍和使用
    数组
    数据类型
  • 原文地址:https://www.cnblogs.com/happykoukou/p/7389478.html
Copyright © 2011-2022 走看看