zoukankan      html  css  js  c++  java
  • duilib教程之duilib入门简明教程5.自绘标题栏

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

    1. virtual LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
    2.     {
    3.         LRESULT lRes = 0;
    4.         if( uMsg == WM_CREATE ) 
    5.         {
    6.             CControlUI *pWnd = new CButtonUI;
    7.             pWnd->SetName(_T("btnHello"));      // 设置控件的名称,这个名称用于标识每一个控件,必须唯一,相当于MFC里面的控件ID
    8.             pWnd->SetText(_T("Hello World"));   // 设置文字
    9.             pWnd->SetBkColor(0xFF00FF00);       // 设置背景色
    10.             m_PaintManager.Init(m_hWnd);
    11.             m_PaintManager.AttachDialog(pWnd);
    12.             m_PaintManager.AddNotifier(this);   // 添加控件等消息响应,这样消息就会传达到duilib的消息循环,我们可以在Notify函数里做消息处理
    13.             return lRes;
    14.         }
    15.         // 以下3个消息WM_NCACTIVATE、WM_NCCALCSIZE、WM_NCPAINT用于屏蔽系统标题栏
    16.         else if( uMsg == WM_NCACTIVATE ) 
    17.         {
    18.             if( !::IsIconic(m_hWnd) ) 
    19.             {
    20.                 return (wParam == 0) ? TRUE : FALSE;
    21.             }
    22.         }
    23.         else if( uMsg == WM_NCCALCSIZE ) 
    24.         {
    25.             return 0;
    26.         }
    27.         else if( uMsg == WM_NCPAINT ) 
    28.         {
    29.             return 0;
    30.         }
    31.         if( m_PaintManager.MessageHandler(uMsg, wParam, lParam, lRes) ) 
    32.         {
    33.             return lRes;
    34.         }
    35.         return __super::HandleMessage(uMsg, wParam, lParam);
    36.     }
    复制代码



    即可看到如下效果
     

        2、对于加入最小化最大化按钮等操作会在后面的教程里讲到,因为duilib已经提供了一个基础的类来实现常用的功能,所以这里就略过了。

  • 相关阅读:
    PHP中的数据库一、MySQL优化策略综述
    LINUX下的PHP
    JS实现别踩白块小游戏
    网页实时聊天之js和jQuery实现ajax长轮询
    PHP用mb_string函数库处理与windows相关中文字符
    PHP正则中的捕获组与非捕获组
    PHP递归创建多级目录(一道面试题的解题过程)
    PHP模拟发送POST请求之五curl基本使用和多线程优化
    PHP模拟发送POST请求之四、加强file_get_contents()发送POST请求
    PHP模拟发送POST请求之三、用Telnet和fsockopen()模拟发送POST信息
  • 原文地址:https://www.cnblogs.com/blogpro/p/11427044.html
Copyright © 2011-2022 走看看