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

    virtual LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
LRESULT lRes = ; 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 == ) ? TRUE : FALSE;
}
}
else if( uMsg == WM_NCCALCSIZE )
{
return ;
}
else if( uMsg == WM_NCPAINT )
{
return ;
} if( m_PaintManager.MessageHandler(uMsg, wParam, lParam, lRes) )
{
return lRes;
} return __super::HandleMessage(uMsg, wParam, lParam);
}

即可看到如下效果

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

最新文章

  1. 在Android中Intent的概念及应用(二)——Intent过滤器相关选项
  2. Spring——集成JPA
  3. CSS魔法堂:Position定位详解
  4. ural 1993 This cheeseburger you don't need
  5. 应用程序入口 WSGIHandler
  6. 笨方法学python--第一个程序
  7. nginx源码分析——configure脚本
  8. JAVA 中数组的几种排序方法
  9. web基础系列(五)---https是如何实现安全通信的
  10. shell中read使用
  11. Axios发送AJAX请求
  12. 并发编程之CountDownLatch
  13. swoole 简介
  14. 仿win10环境变量助手
  15. http://www.cnblogs.com/hanshuhe/archive/2012/08/30/vss.html
  16. kubernetes(k8s) 的常用命令
  17. Django(三)url和返回
  18. 128. Longest Consecutive Sequence最长连续序列
  19. 为某金融企业的IT技术部人员提供基于TFS的软件研发流程介绍
  20. 关于正则表达式 C#

热门文章

  1. 5款强大的Java Web开发工具
  2. 2016多校联合训练4 F - Substring 后缀数组
  3. hdu3068马拉车
  4. 软件工程:vs单元测试
  5. 浅谈SQL Transaction在请求中断后的行锁表锁
  6. Linux Shell 重定向与管道【转帖】
  7. XCode设置自己windows习惯的快捷键(比如Home、End键)
  8. asp.net mvc添加多条数据到数据库
  9. jsfl脚本设置导出AS链接名遇到的奇怪问题
  10. Spring的三种通过XML实现DataSource注入方式