精易论坛

标题: 完美的窗口布局模块,动态布局控件 [打印本页]

作者: 神女软件定制    时间: 2021-11-21 18:38
标题: 完美的窗口布局模块,动态布局控件
在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

其他:
右对齐:
中间对齐:
两边对齐:
啥对齐也不知道,反正是另外一种对齐了:

组合例子:


堆叠布局:


其他:
[hide=d999] Desktop.rar (7.84 KB, 下载次数: 304) [/hide]
实现代码很少,介绍了这么多……




作者: 深爱者    时间: 2021-11-21 19:09
看不懂,牛逼
作者: coolfire1983    时间: 2021-11-21 19:12
感谢楼主分享!
作者: xh1020    时间: 2021-11-21 19:19
看不懂,牛逼
作者: winxsj    时间: 2021-11-21 19:21
看起来很牛批啊
作者: 2672765678    时间: 2021-11-21 22:40
挺牛逼的看起来来
作者: 794229345    时间: 2021-11-21 23:44
看下隐藏内容~~
作者: tmoyy    时间: 2021-11-22 10:27
别的先不说  光这介绍就花了不少时间  感谢
作者: zifeiyu    时间: 2021-11-22 11:06
3333333333333333333333333
作者: zidoo    时间: 2021-11-22 13:42
感谢楼主分享!
作者: 北极星光    时间: 2021-11-22 16:37
感谢楼主分享!
作者: zuoyang    时间: 2021-11-22 16:44
看一下   
作者: fjgh    时间: 2021-11-23 10:10
支持开源~!感谢分享
作者: a214603164    时间: 2021-11-23 13:46
感谢分享,好东西

作者: gzsam    时间: 2021-11-23 15:10
谢谢分享
作者: 皮卡秋    时间: 2021-11-23 16:04
看着好复杂的样子
作者: 7ian    时间: 2021-11-23 18:06
似曾相识,来看看
作者: xeixei    时间: 2021-11-23 22:12
看着好复杂的样子
作者: 人生VS征途    时间: 2021-11-24 17:54
谢谢楼主给大家分享
作者: longsui48    时间: 2021-11-25 12:56
这个有点厉害了 盒子模型
作者: fcpfuf    时间: 2021-11-26 11:12
完美的窗口布局模块,动态布局控件
作者: fcpfuf    时间: 2021-11-26 15:12
支持开源~!感谢分享
作者: 李泽勇2    时间: 2021-11-26 20:53
看起来很棒。感谢分享。
作者: shicui    时间: 2021-11-28 00:11
漂亮的窗口控件分布处理,感谢给我的思路。
作者: 神女软件定制    时间: 2021-11-28 18:41
shicui 发表于 2021-11-28 00:11
漂亮的窗口控件分布处理,感谢给我的思路。


作者: lq850815    时间: 2021-11-29 09:01
感谢分享
作者: gg867594531    时间: 2021-11-29 20:50
666666666666
作者: wjswzj0    时间: 2021-11-30 09:53
感谢分享,很给力!~
作者: 10479244    时间: 2021-12-2 15:38
厉害了  感谢大佬
作者: tlwg    时间: 2021-12-2 18:39
赞!!!
作者: abpyu    时间: 2021-12-3 09:42
大佬大佬
作者: Mento    时间: 2021-12-5 13:53
楼主 目前我这遇到一个问题,,就是本身我是1366*768的分辨率,打开的时候分辨率就是显示不全的,,缩放的时候也是显示不全的,请问这个问题有得解决吗
作者: 神女软件定制    时间: 2021-12-5 15:52
Mento 发表于 2021-12-5 13:53
楼主 目前我这遇到一个问题,,就是本身我是1366*768的分辨率,打开的时候分辨率就是显示不全的,,缩放的 ...

例子显示不全?把里面像素改小
作者: yxl2008    时间: 2021-12-13 19:32
感谢分享,下载学习!!
作者: sunyu4506    时间: 2021-12-19 20:12
谢谢分享,支持个。
作者: xzhslim    时间: 2021-12-20 16:32
感谢分享
作者: a521qaz    时间: 2021-12-20 22:27
66666666下载看看
作者: 676923148qq    时间: 2021-12-24 21:40
wow  6666666666
作者: 676923148qq    时间: 2021-12-24 21:42
wow  6666666666
作者: 676923148qq    时间: 2021-12-24 21:45
wow  6666666666
作者: 676923148qq    时间: 2021-12-24 21:45
wow  6666666666
作者: 676923148qq    时间: 2021-12-24 21:45
wow  6666666666
作者: 676923148qq    时间: 2021-12-24 21:47
wow  6666666666
作者: 676923148qq    时间: 2021-12-24 21:48
wow  6666666666
作者: 神女软件定制    时间: 2021-12-24 21:52
676923148qq 发表于 2021-12-24 21:48
wow  6666666666

?????
作者: 耳东言己    时间: 2022-1-5 12:25
wow  6666666666
作者: ctry78985    时间: 2022-1-6 14:28
感谢楼主分享
作者: 515667395    时间: 2022-1-24 17:43
多谢分享,很不错的
作者: qbpgxzieh2    时间: 2022-1-26 11:23
感谢楼主分享

有个问题请教,有分隔条的情况怎么处理?
作者: 神女软件定制    时间: 2022-1-26 16:57
qbpgxzieh2 发表于 2022-1-26 11:23
感谢楼主分享

有个问题请教,有分隔条的情况怎么处理?

没有考虑这个情况
作者: superxuanfeng    时间: 2022-1-26 18:23
感谢大佬分享
作者: lchhome    时间: 2022-2-16 19:00
强烈支持楼主一下!!!!!!!!!!!!!!1
作者: colinxia    时间: 2022-2-23 16:45
这个挺厉害啊
作者: 阿龙    时间: 2022-3-5 09:40
牛逼牛逼
作者: shuaier    时间: 2022-3-6 20:04
支持开源~!感谢分享
作者: 实惠电脑    时间: 2022-3-25 21:32
谢谢分享!!!!!!!!
作者: ferrisy    时间: 2022-3-29 21:48
支持开源~!感谢分享
作者: ferrisy    时间: 2022-3-30 12:10
#在这里快速回复#支持开源~!感谢分享
作者: ferrisy    时间: 2022-3-31 18:19
支持开源~!感谢分享
作者: ferrisy    时间: 2022-4-5 17:08
感谢感谢,辛苦啦
作者: yqx520    时间: 2022-4-11 10:59
怎么可能全是按键,平时做的时候 , 这个意义是什么呢?,不过还是谢谢分享, 学习一下,
作者: 神女软件定制    时间: 2022-4-11 14:56
yqx520 发表于 2022-4-11 10:59
怎么可能全是按键,平时做的时候 , 这个意义是什么呢?,不过还是谢谢分享, 学习一下, ...

你说按钮?只是演示用的
作者: 1013356744    时间: 2022-4-12 21:37

支持开源~!感谢分享
作者: shiguang2018    时间: 2022-4-23 11:14
实现代码很少,介绍了这么多……
作者: xkxazl    时间: 2022-6-4 16:56
支持开源~!感谢分享
作者: wjswzj0    时间: 2022-6-10 15:43
支持开源~!感谢分享
作者: pjm123    时间: 2022-6-10 15:48
谢谢分享
作者: abpyu    时间: 2022-6-11 08:40

超级列表框依然是恒久不变的



作者: paulz2022    时间: 2022-8-7 08:24
谢谢分享
作者: 不苦小和尚    时间: 2022-8-30 06:02
看到有人在用,有没有可以实现标签动态拖拽,动态修改内容的
作者: udp    时间: 2022-9-9 08:56


支持开源~!感谢分享
作者: weihua2018    时间: 2023-3-9 23:07
怎么复杂 效果怎么样?
作者: a44347562    时间: 2023-3-10 11:57
支持开源~!感谢分享
作者: 换行符    时间: 2023-3-12 02:42
支持开源~!感谢分享
作者: 换行符    时间: 2023-3-12 02:44
支持开源~!感谢分享
作者: 云韵    时间: 2023-3-12 11:29
        支持开源~!感谢分享
作者: lzptts    时间: 2023-3-13 12:16

支持开源~!感谢分享
作者: dulang    时间: 2023-3-14 20:29
分享精神,是最值得尊敬的!
作者: boy2001    时间: 2023-5-8 11:15

        支持开源~!感谢分享
作者: wwq200130    时间: 2023-5-12 01:42
支持开源~!感谢分享
作者: sn123zyc    时间: 2023-5-27 10:39
感谢分享,很给力!~
作者: djhaoge    时间: 2023-6-16 20:12
6666
作者: q120629070    时间: 2023-6-18 10:35
很给力~~不错~~
作者: xiaochang    时间: 2023-7-4 17:51
大神模块能开源吗,想学习下原理
作者: gdhong    时间: 2023-8-9 07:29
谢谢分享
作者: pengbo3010    时间: 2023-9-8 12:22
感谢分享

作者: zzh233    时间: 2023-9-8 12:33
厉害 厉害 但是 手动调节控件也是个乐趣
作者: 淘宝2009    时间: 2023-10-20 19:39
几次了您仔细
作者: taoxian    时间: 2023-10-24 21:04
实现代码很少
作者: tj5523    时间: 2023-11-29 13:41
厉害啊,这个必须得试试
作者: biody    时间: 2024-1-15 09:21
类似其它编辑器中的布局模式 不错!
作者: 寂寞流狼    时间: 2024-5-11 08:46
女神你好,非常感谢您分享布局方法,我用了您的方法后发现超级列表框在数据重新读取后,大小位置保持在最后一次的状态,不知道是不是我操作有问题,望回复为盼。

补充内容 (2024-5-12 16:15):
该问题已解决。
作者: 寂寞流狼    时间: 2024-5-12 16:14
布局后,窗口首次载入正常缩放,但是关闭后,重新载入,所有组件都会往下移动,再关闭再载入会更加往下走,不知道是什么原因?能否帮忙解答一下?
作者: gao110108    时间: 2024-6-2 18:35

厉害啊,这个必须得试试
作者: 互斥体    时间: 2024-9-24 13:00
        感谢分享,很给力!~
作者: 互斥体    时间: 2024-9-24 13:01
YYDS~!支持开源~!感谢分享
作者: guipux    时间: 2024-10-3 21:39
好东西啊,感谢分享
作者: g5g5    时间: 2024-11-19 12:21
非常给力,谢谢!!!!!!!!!!!!!!!!!!
作者: dingdadas    时间: 2025-3-10 22:27
非常给力,谢谢!!!!!!!!!!!!!!!!!!
作者: lixiugang    时间: 18 小时前
支持开源~!感谢分享




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4