在c++中createwindow,需要一个一个计算控件的左边顶边,非常麻烦
如果后面,需要在某个控件前加一个控件,就要崩溃了,后面算过的位置,都要重新改
所以想着干脆布局交给运行时
所以弄了一个布局管理类,同时弄了一个易语言的版本
易语言,主要应该就是需要外部窗口调节尺寸后,动态的修改里面控件的位置和大小。
尝试简单介绍一下,
1:里面管理的内容都叫布局盒子
盒子,可以包含子盒子,这是布局管理的关键,垂直盒子就是里面的子盒子是垂直排列的,水平盒子就是水平排列的
没有直接的方法指定盒子的左边和顶边,因为盒子的左边和顶边,都是靠着前面一个盒子。
就像写字一样,水平盒子布局完一个子盒子,第二个盒子左边增加,顶边不变。同理垂直盒子,左边不变,顶边增加。所以还有一种堆叠盒子图中没有画出,左边顶边都不会增加,全部相对父盒子,这种盒子是给选择夹专用的,因为选择夹每页的控件,就是像这样堆叠起来的。
水平,垂直,堆叠,xyz方向
没有子盒子的盒子,这一般就是控件了(并不是说控件不能包含子盒子,分组框,选择夹等容器都大概率包含子盒子)
或者不需要下一个盒子紧挨着,需要留一些空白,可以放一个没有子盒子的盒子,占位达到留白的效果。
盒子可以绑定一个窗口,这一般就是控件了,当布局到该盒子,简单的调用movewindow
2:留白
盒子与盒子之间不是仅仅挨着的,有一个分隔间距,默认为8个像素,
父盒子与子盒子之间,也可以有空白,叫内边距,默认是0,设置通过
[JavaScript] 纯文本查看 复制代码 l.设置内边距 (盒子ID, 8, 8, 8, 8)
每个盒子的分隔间距和上、下、左、右内边距都可以分别设置不同值。
不可见盒子上,一般不设置内边距。带窗口盒子:分组框,选择夹,一般需要设置内边距
3:盒子尺寸,指定盒子尺寸有4种类型
1.最简单的像素 24px
2.父盒子间隔单位,3u(UNIT)
这里的3u表示3个父盒子的分隔间距(默认8),就是24px,一般按钮,64px*24px,可以设置为8u*3u
3.剩余空间的百分比,50%
先分配完px和u,和留白,最后才分配百分比,百分比也是相对剩余这点空间的百分比
一个特殊的特性是:当所有子盒子的百分比分子,超过100,新的分母不是100,而不是所有百分比分子和,等同于变成权重了。
比如,200%,300%的两个盒子,200+300>100,这里的200%就表示200/(200+300),所以2个盒子会按2:3分割父盒子剩下的空间。
当需要,不管父盒子多大,还不太确定需要多少个子控件,子控件总是按比例分割全部空间时,这个特性有用。
3.自动盒子大小,auto
子盒子的大小可以由父盒子决定(百分比),这种尺寸类型下反过来了,父盒子的尺寸由子盒子决定。
指定auto后,具体尺寸为刚好容纳所有子盒子的尺寸。
如果父盒子尺寸类型为auto,有的子盒子尺寸类型为百分比,这取决于盒子是水平盒子还是垂直盒子,宽度auto还是高度auto,和子盒子宽度还是高度设置的100%
高度auto的垂直盒子,高度100%的子盒子,布局计算为0,不能推测到底需要多少
宽度auto的垂直盒子,宽度100%的子盒子,计算为最宽的其他能确定具体大小的子盒子的宽度。
也就是,计算auto的具体尺寸,遇到子盒子百分比尺寸时,会先假定为0,当确定之后父盒子之后,再去确定
总之不会有bug,不会有反人类正常逻辑。
如果有,那就是比较晦涩的特性,比如(当垂直盒子下宽度 或 水平盒子下高度 100%,和200%没有区别,分母总是100,分子超出100部分无效)
子盒子的尺寸永远不会超过父盒子,超出部分会被裁剪
代码:
布局管理器类,默认包含一个顶层盒子,添加窗口、添加水平布局、添加水平窗口布局、添加垂直布局、添加垂直窗口布局、添加堆叠窗口布局,都是添加盒子的,包装函数。
带窗口的可以附带一个窗口句柄,布局到该盒子时同时调节窗口位置。
布局盒子后会同时布局所有的子盒子。
所以只需要窗口尺寸改变后,调用管理器类的布局方法,管理器调用默认顶层盒子的布局,顶层盒子链式布局子盒子。
添加盒子后返回盒子ID。
尺寸用字符串描述,逗号分开的两个表达式(10px、10u、10%,auto,四种格式)
默认包含一个顶层盒子,水平,分隔间距8,内边距全为0
可以通过:[JavaScript] 纯文本查看 复制代码 .版本 2
l.根初始化 (#Layout_VERTICAL, 8)
l.设置内边距 (, 8, 8, 8, 8)
改变默认
百分比
auto
其他:
右对齐:
中间对齐:
两边对齐:
啥对齐也不知道,反正是另外一种对齐了:
组合例子:
堆叠布局:
其他:
Desktop.rar
(7.84 KB, 下载次数: 293)
|