我们要实现一个带标题栏和状态栏的程序,同时要支持拉伸,即包括最小化、最大化,图如下:

XML:

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>

<Window size="695,542">

    <VerticalLayout width="657" height="517" bkcolor="#FFA0A0A4">

        <HorizontalLayout name="title" height="32" bkcolor="#FF63A6F1">

            <Button text="X" bordersize="1" float="true" pos="608,0,0,0" width="60" height="30" bkcolor="#FF008067" bkcolor2="#0000C020" bordercolor="#00FFFF00" textcolor="#FF000000" disabledtextcolor="#FFA7A6AA" align="center" />

        </HorizontalLayout>

        <HorizontalLayout name="mid" bkcolor="#FFBABABA" />

        <HorizontalLayout name="status" height="30" bkcolor="#FF808080" />

    </VerticalLayout>

</Window>

在DUIDesigner中,拖动窗口边框,即可看到效果,标题栏和状态栏的位置都不变,即随窗口大小而改变。

看属性,发现,status和title都有属性 height,而中间的,什么属性都没有。在窗口设置如下:

title:

mid:

可以知道,pos即可以设置float属性为false的拉伸操作,所以不只是LAYOUT可以随窗口(准确的说应该是拥有它的LAYOUT)自由拉伸,普通的控件也可以,只要float为false。

Float意思为浮动,当它为TRUE时,它就浮动在窗口上面,位置永远不会变(相对于拥有它的LAYOUT)。

当它为FALSE时,它浮不起来,停在水上,随波逐流,所以能够被流水(LAYOUT)改变它的大小。

注意,只有right和bottom才有效。如果不为0,那么它就是该高度,即不随父LAYOUT改变大小(位置不能更改)。为0就是跟父LAYOUT更改大小。

在上面这个示例中,关闭按钮并不随着窗口改变位置,因为我们看到了,它的float为TRUE。如果我们想要它永远停在最右边呢?

看下面的XML:

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>

<Window size="695,542">

    <VerticalLayout width="657" height="517" bkcolor="#FFA0A0A4">

        <HorizontalLayout name="title" height="32" bkcolor="#FF63A6F1">

                            <Control />

            <Button text="X" bordersize="1" maxwidth="60" pos="608,0,0,0" width="60" height="30" bkcolor="#FF008067" bkcolor2="#0000C020" bordercolor="#00FFFF00" textcolor="#FF000000" disabledtextcolor="#FFA7A6AA" align="center" />

        </HorizontalLayout>

        <HorizontalLayout name="mid" bkcolor="#FFBABABA" />

        <HorizontalLayout name="status" height="30" bkcolor="#FF808080" />

    </VerticalLayout>

</Window>

我们加了一个 float 的 Control,以及将关闭按钮的 maxwidth设置为60,同时FLOAT设置为FALSE(float属性默认为false)。

这样设置的意思是:关闭按钮最大宽度为60,所以它不能被拉得更宽。

在它的左边有一个FLOAT,它可以被任意拉伸。所以当窗口被拉伸时,关闭按钮为60,左边的control就被拉伸到 窗口宽 - 60

如果最右边要加最大化、最小化按钮,实现原理也是一样的。当然,你可以在最右边加一个LAYOUT,在这个LAYOUT上加上最小化、最大化、关闭按钮,这样层次感更强,也更容易管理和修改。

Duilib教程-自动布局1的更多相关文章

  1. Duilib教程-自动布局3-分隔条

    先看一个常用的图,如下: 左边是导航栏,右边是信息区. 中间可以自由拉伸. XML如下: <?xml version="1.0" encoding="utf-8&q ...

  2. Duilib教程-自动布局2

    在上一节中,我简单介绍了控件随父LAYOUT自由移动的设置.在这一节,我将介绍一种常见的情况:嵌入窗口. 在项目中,我们很少会100%的编写一个软件,特别是界面相关的,我们会使用以前已经编写好的窗口, ...

  3. Duilib教程-控件练习

    一.控件消息的响应. 在HelloDuilib例子中,程序不能退出,在这里,我将添加一个关闭按钮,当点击它时,调用PostQuitMessage进行退出. 首先在界面的右上角添加一个关闭按钮,并取名为 ...

  4. Duilib教程-HelloDuilib及DuiDesigner的简单使用

    一.HelloDuilib 1. 首先理解DUILIB显示的一个基本流程,如下图: 在Duilib中,WindowImplBase 这个类代表了图中 “CWndClass”. 所以我们需要做的是: 1 ...

  5. Duilib教程-非DUI控件

    DUILIB并不是真正的DUI,至少有部分控件不是完全DUI的.其实包括: 1.EDIT. 它的实现原理是,CEditUI包含一个窗口CEditWnd,流程如下: 1)鼠标单击,创建窗口见 EditU ...

  6. Duilib教程-简单介绍

    在读这篇博客的时候,可能您已经对duilib有一定的了解.所以,我并不打算对duilib进行过多的介绍.它的内核首先由外国人编写,后来由国人一个小组接过来继续编写,于是就有了现在的Duilib. 1. ...

  7. 2013 duilib入门简明教程 -- 界面布局(9)

        上一个教程实现的标题栏代码中,并没有看到处理自适应窗口大小的代码,但是窗口大小变化后,按钮的位置会跟着变化,这是因为我们将按钮放到了HorizontalLayout.VerticalLayou ...

  8. duilib入门简明教程 -- 界面布局(9)

        上一个教程实现的标题栏代码中,并没有看到处理自适应窗口大小的代码,但是窗口大小变化后,按钮的位置会跟着变化,这是因为我们将按钮放到了HorizontalLayout.VerticalLayou ...

  9. duilib入门简明教程 -- 界面布局(9) (转)

    原文转自:http://www.cnblogs.com/Alberl/p/3343806.html     上一个教程实现的标题栏代码中,并没有看到处理自适应窗口大小的代码,但是窗口大小变化后,按钮的 ...

随机推荐

  1. C++从零实现简单深度神经网络(基于OpenCV)

    代码地址如下:http://www.demodashi.com/demo/11138.html 一.准备工作 需要准备什么环境 需要安装有Visual Studio并且配置了OpenCV.能够使用Op ...

  2. HTML-HTML5+CSS3权威指南阅读(三、CSS3)

    不同的浏览器(包括-moz-代表的Mozilla Firefox, -ms-代表的Microsoft Internet Explorer等)厂商在发布正式版本之前之前, 试验各自对CSS3新特性的实现 ...

  3. java基础讲解13-----集合

    一:集合介绍 import java.util.ArrayList;import java.util.Collection;import java.util.Iterator; public clas ...

  4. 自定义asp.net mvc Filter 过滤器

    1新建一个mvc项目:如图 2.主要创建下面一些类文件 1.utility目录 放置自定义的过滤器 using System; using System.Collections.Generic; us ...

  5. html5-表单常见操作

    <form  autocompelate="on" id="from1"><!--常用属性-->邮件:<input type=&q ...

  6. Top 10 Project Management Software

  7. spring和hibernate整合,事务管理

    一.spring和hibernate整合开发步骤 1 引入jar文件,用户libarary列表如下 //spring_core spring3..9core\commons-logging-1.2.j ...

  8. Atitit.遍历图像像素点rgb java attilax总结

    Atitit.遍历图像像素点rgb java attilax总结 1. 遍历像素点 1 2. 提取一行 1 3. Rgb分量提取 2 4. 其他读取像素 3 5. --code 5 6. 参考 6 1 ...

  9. jsp的页面包含——静态包含、动态包含

    一.静态包含:包含的文件可以是jsp文件.html文件.文本文件或者一段java代码.<%@ include file="要包含的文件路径"%> 实质是先将所包含的文件 ...

  10. 使用Lua的扩展库LuaSocket用例

    目录结构 LuaSocket 是 Lua 的网络模块库,它可以很方便地提供 TCP.UDP.DNS.FTP.HTTP.SMTP.MIME 等多种网络协议的访问操作. 它由两部分组成:一部分是用 C 写 ...