看了前面那么多教程,相信对duilib已有基本映像了,我们就快马加鞭,做出一个完整的自绘标题栏吧~
    看到下面这个效果图,小伙伴们是不是有点惊呆了呢~O(∩_∩)O~
 
    duilib实现以上效果非常简单,
  1、将按钮图片的文件夹放到exe目录,点此下载
  2、main.cpp的代码无需改动,只需改动XML,XML内容如下(受网页宽度限制,以下XML格式有点乱,请复制到本地的XML编辑器上,以方便查看):
<?xml version="1.0" encoding="UTF-8"?>
<Window size="800,600" mininfo="600,400" caption="0,0,0,32" sizebox="4,4,4,4"> <!-- 窗口的初始尺寸(宽800,高600)、窗口的最小尺寸(宽600,高400)、标题栏拖拽区域(高32)、可拖拽边框大小(这里添加sizebox后就可以拖拽边框调整大小了) -->
<VerticalLayout bkcolor="#FFF0F0F0" bkcolor2="#FFAAAAA0"> <!-- 整个窗口的背景色 -->
<!-- 标题栏区 -->
<HorizontalLayout height="32" bkcolor="#FFE6E6DC" bkcolor2="#FFAAAAA0"> <!-- 标题栏背景色 bkcolor、bkcolor2、bkcolor3分别是渐变色的三个值-->
<VerticalLayout /> <!-- 占空位,占据左边所有的空位-->
<VerticalLayout width="77"> <!-- 右边三个控件所占的宽度-->
<Button name="minbtn" tooltip="最小化" float="true" pos="0,5,22,24" width="23" normalimage=" file='SysBtn\MinNormal.bmp' " hotimage=" file='SysBtn\MinFocus.bmp' " pushedimage=" file='SysBtn\MinFocus.bmp' "/>
<Button name="maxbtn" tooltip="最大化" float="true" pos="22,5,44,24" width="23" normalimage=" file='SysBtn\MaxNormal.bmp' " hotimage=" file='SysBtn\MaxFocus.bmp' " pushedimage=" file='SysBtn\MaxFocus.bmp' " />
<Button name="restorebtn" visible="false" tooltip="还原" float="true" pos="22,5,44,24" width="23" normalimage=" file='SysBtn\StoreNormal.bmp' " hotimage=" file='SysBtn\StoreFocus.bmp' " pushedimage=" file='SysBtn\StoreFocus.bmp' " />
<Button name="closebtn" tooltip="关闭" float="true" pos="44,5,74,24" width="28" normalimage=" file='SysBtn\CloseNormal.bmp' " hotimage=" file='SysBtn\CloseFocus.bmp' " pushedimage=" file='SysBtn\CloseFocus.bmp' "/>
</VerticalLayout>
</HorizontalLayout> <!-- 客户区 -->
<HorizontalLayout>
<Button name="btnHello" text="Hello World"/>
</HorizontalLayout>
</VerticalLayout>
</Window>

仅仅在XML里面加了20行代码,一个完整的标题栏居然就完成了!

    试试标题栏可以拖动不,试试可以最大化不,试试有提示条不,试试按钮外观会变化不,试试可以拖拽边框调整窗口大小不?
    必须都可以!
    虽然我们并没有处理以上消息,但是很多功能都已实现,因为WindowImplBase帮我们都做好了。
    小伙伴们,继承了WindowImplBase之后,妈妈再也不用担心我的界面啦~O(∩_∩)O哈哈~
 
    虽然XML里面已经有很详细的注释了,鉴于以下问题在群里多次出现,所以还是重复提醒一遍:
    以下问题都在XML第二行的 <Window>节点里添加。
1、为什么标题栏不能拖动?
    需要在<Window>节点添加 caption="0,0,0,32",这里的32是指标题栏的高度
2、怎么让窗口大小可以通过拖拽来调整?
    需要在<Window>节点添加 sizebox="4,4,4,4", 这里的4是指鼠标移动到边框4个像素的范围内,鼠标就会显示拖拽样式,这时就可以调整窗口大小了
 
    下面Alberl来一一解释下XML代码的意思。大部分地方都有明显注释了,重点要解释的就是HorizontalLayout、VerticalLayout以及Button的样式了。
    这一节先介绍Button的样式,大家可以看到关闭按钮除了鼠标移上去有不同外观,还有一个提示条。这些都是在这一行代码里指定的:
<Button name="closebtn" tooltip="关闭"   float="true" pos="44,5,74,24" width="28" normalimage=" file='SysBtn\CloseNormal.bmp' " hotimage=" file='SysBtn\CloseFocus.bmp' " pushedimage=" file='SysBtn\CloseFocus.bmp' "/>

其中:

name="closebtn"    唯一标识按钮,其他按钮的name不能与其重复
tooltip="关闭"         就是那个提示条的文字
float="true"            代表按钮的位置是绝对定位,其位置由pos属性指定
pos="44,5,74,24"    代表按钮的位置矩阵,分别为矩阵左、上、右、下四个点
width="28"             代表按钮图片显示的宽度(这个可以不填,但是由于按钮图片没有做好,如果不填的话,图片会被拉伸有点失真)
normalimage           代表正常状态下按钮显示的图片路径
hotimage                代表鼠标移上去时,按钮显示的图片路径     
pushedimage          代表鼠标点击按钮时,按钮显示的图片路径     
        
下一节将会介绍HorizontalLayout、VerticalLayout。

2013 duilib入门简明教程 -- 完整的自绘标题栏(8)的更多相关文章

  1. duilib入门简明教程 -- 完整的自绘标题栏(8)

       看了前面那么多教程,相信对duilib已有基本映像了,我们就快马加鞭,做出一个完整的自绘标题栏吧~     看到下面这个效果图,小伙伴们是不是有点惊呆了呢~O(∩_∩)O~       duil ...

  2. duilib入门简明教程 -- 完整的自绘标题栏(8) (转)

    原文转自:http://www.cnblogs.com/Alberl/p/3343763.html     看了前面那么多教程,相信对duilib已有基本映像了,我们就快马加鞭,做出一个完整的自绘标题 ...

  3. 2013 duilib入门简明教程 -- 部分bug (11)

     一.WindowImplBase的bug     在第8个教程[2013 duilib入门简明教程 -- 完整的自绘标题栏(8)]中,可以发现窗口最大化之后有两个问题,     1.最大化按钮的样式 ...

  4. 2013 duilib入门简明教程 -- FAQ (19)

        虽然前面的教程几乎把所有的知识点都罗列了,但是有很多问题经常在群里出现,所以这里再次整理一下.     需要注意的是,在下面的问题中,除了加上XML属性外,主窗口必须继承自WindowImpl ...

  5. 2013 duilib入门简明教程 -- 总结 (20)

        duilib的入门系列就到尾声了,再次提醒下,Alberl用的duilib版本是SVN上第个版本,时间是2013.08.15~       这里给出Alberl最后汇总的一个工程,戳我下载,效 ...

  6. 2013 duilib入门简明教程 -- 自绘控件 (15)

        在[2013 duilib入门简明教程 -- 复杂控件介绍 (13)]中虽然介绍了界面设计器上的所有控件,但是还有一些控件并没有被放到界面设计器上,还有一些常用控件duilib并没有提供(比如 ...

  7. 2013 duilib入门简明教程 -- 第一个程序 Hello World(3)

    小伙伴们有点迫不及待了么,来看一看Hello World吧: 新建一个空的win32项目,新建一个main.cpp文件,将以下代码复制进去: #include <windows.h> #i ...

  8. 2013 duilib入门简明教程 -- 部分bug 2 (14)

        上一个教程中提到了ActiveX的Bug,即如果主窗口直接用变量生成,则关闭窗口时会产生崩溃            如果用new的方式生成,则不会崩溃,所以给出一个临时的快速解决方案,即主窗口 ...

  9. 2013 duilib入门简明教程 -- 事件处理和消息响应 (17)

        界面的显示方面就都讲完啦,下面来介绍下控件的响应.     前面的教程只讲了按钮和Tab的响应,即在Notify函数里处理.其实duilib还提供了另外一种响应的方法,即消息映射DUI_BEG ...

随机推荐

  1. z-stack协议uart分析(DMA)

    1.从ZMain里面的main函数开始分析 2.进入int main( void ); HalDriverInit();   //硬件相关初始化,有DMA初始化和UART初始化 3.进入HalDriv ...

  2. Spring MVC --->>>No mapping found for HTTP request with URI

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> < ...

  3. 添加ssh key

    我现在根据<github入门和实践>来去摸索github 其实,我发现自己在看github时,感觉不适应,是因为自己太久没有碰到英文了.可以联想到以前当看到一个网页,根据汉字的标题或描述, ...

  4. 深入探索RB-tree数据结构

    引子 部门在各个团队推广软件通用技能矩阵工具,希望通过度量找到能力薄弱点,引导团队进行改进.从我们团队的数据上看,团队在数据结构和算法上的短板明显,需要加强,这也是写这篇文章的背后的初衷. 数据结构和 ...

  5. Object-C 1.0 第三章:面向对象编程基础知识(OOP)

    1. 间接(indirection)        1.1 变量和间接(使用变量来代替一些数字)        1.2 使用文件名的间接                const  表示一个变量不允许 ...

  6. tornado 学习笔记16 HTTP1Connection

    HTTP/1.x协议的具体实现.实现HTTPConnection接口. 16.1 构造函数 定义: def __init__(self, stream, is_client, params=None, ...

  7. 谈谈rem

    用rem已久但是对于它的理解似乎一直都有偏差,使用的时候多采用的是html的font-size:62.5%;然后按照1rem=10px这样来使用.所以我一直不明白,这个rem到底哪里是相对单位了,也不 ...

  8. CentOS 7 学习笔记(二)systemd

    sysVinit启动原理在我们打开Linux电脑的电源后第一个启动的进程就是init.分配给init进程的PID是1.它是系统其他所有进程的父进程.当一台Linux电脑启动后,处理器会先在系统存储中查 ...

  9. ASIHTTPRequest取消异步请求

    今天碰到一个问题 异步请求等待中 cancel后会发生什么,网上找了下资料说取消的请求默认都会按请求失败处理,并调用请求失败delegate 查找到的资料具体解释了下ASIHTTPRequest取消异 ...

  10. 爬虫笔记(四)------关于BeautifulSoup4解析器与编码

    前言:本机环境配置:ubuntu 14.10,python 2.7,BeautifulSoup4 一.解析器概述 如同前几章笔记,当我们输入: soup=BeautifulSoup(response. ...