如果我们扔掉 20% 的技术和特性,这些被扔掉的部份 80% 的情况下都用不到可能占据了你 80% 的学习时间。无论是制作开发工具,还是使用开发工具,我们都会在苛求完美的同时让原本简单的事变更无比复杂。
界面布局与贴图一直是图形界面开发极为复杂的一部分,我们在技术上不断地改进与追求完美,可是似乎我们把事情搞得越来越复杂。让我们试着换一种思路,有所放弃并勇于放弃,,让我们只留下最简单、最常用、最实用的东西。
遵循上面的思路,我们试着以更简洁的方式重新思考软件界面布局与贴图技术。
桌面软件界面的布局有其特殊性,实际上整个软件的界面通常都可以简化为一个九宫格。所谓九宫格指的是在一个正方形的界面上,在中间划上四条直线写一个井字 - 把正方形切割为九个格子,软件的布局大多是一个简单的九宫格:边上的控件总是保持固定,而中间的控件总是可以自由拉伸。
固定 | 自动拉伸 | 固定 |
---|---|---|
拉伸 | 自动拉伸 | 拉伸 |
固定 | 自动拉伸 | 固定 |
在 aardio 中无论是窗口控件的布局,还是控件贴图都使用九宫格的规则。
窗体上的所有控件都可以指定"固定边距"属性,每个控件都可以选择朝哪个方向固定。
最简单的方法是右键点窗体,然后在弹出菜单中点击"九宫格缩放布局"自动为所有控件设置"固定边距"属性。
"九宫格缩放布局" 的原理参考上面的九宫格,四角的控件固定,中间的控件根据他们所在的位置两端固定、或四端固定。
然后我们可以任意缩放窗口,所有控件就可以自动缩放并适应九宫格布局规则。
使用 plus 控件,可以非常方便地指定背景图像与前景图像,在贴图模式中选择 "expand" 模式就可以支持九宫格贴图,可以自定义九宫格在图像上的切割位置并实时预览效果。
九宫格贴图的规则仍然是四角固定、中间拉伸。例如我们制作一个按钮圆角背景图像,边框与圆角拉伸就会很难看,固定边框和圆角,中间的背景拉伸效果就会非常好。
参考: plus 控件背景与前景贴图
窗体的背景图像同样支持九宫格贴图,规则与用法同上。参考: 窗口背景贴图
专用于窗口背景贴图的 bk, bkplus 控件都支持九宫格贴图,这些控件本身也都支持九宫格布局。相当于我们可以在窗口的任何部分单独划分九宫格然后做背景贴图,或者说可以用 bk,bkplus 控件为其他控件方便地绘制背景。并且避免控件重叠的麻烦。 参考: Z 序:原理与优化
当然,九宫格中的每一个格子,如果加载的不是控件而是子窗口 - 那么任何一个格子又可以再次成为另外一个九宫格( 这在aardio中非常简单,拖一个custom控件到界面上,使用 winform.custome.loadForm 就可以加载一个子窗口到界面上了),所以我们把复杂的问题简单化:只要懂得如何实现一个最简单的九宫格就行了。