界面布局动态调整

      早在2007年我就写过一篇博客叫可适配控件对话框那个时候一方面是工作需要研究了这个问题,另一方面是发现论坛里有很多人问相关的问题,于是就把自己的研究成果做了一个小例子发了上来,还写了那篇博客。

      说来惭愧,首先那时那个例子其实是我照着网上一个例子改的,而且基本框架也差不多,我简单加了些自己的东西改了改名就发出来了,唉......如今原作者以无法考正了,在此对其表示感谢吧。然后那个例子其实不是很好用,当时并没有发现什么问题,但是随着工作中使用的增多我发现了不少缺陷,也在工作中不断的改进,终于做出了一个自己用的很舒服的版本。如今三年过去了,再看CSDN界面版仍然有很多网友问及此类问题,VisualEleven力推codeproject上的easysize。easysize当初我也简单看过,不过那时我并没看懂,估计我现在也看不懂,呵呵。不过我觉得我用的这个方法也蛮好的,所以决定再写一篇博客把现在的方法介绍一下,同时整理了一个例子供大家研究。

      处理过这个问题的朋友们就应该知道,所谓的控件动态调整就是在主窗口的OnSize消息里处理一下,根据窗口的大小重新布置控件的位置。而解决这个问题的关键在于如何管理界面中的控件信息,从而可以比较方便的实现对控件的重新布局。我的处理方式是这样的,我定义了一个结构tagCONTROL,其内容如下

从这个定义中我们可以看出tagCONTROL里保存了丰富的对于控件布局的控制信息,这里m_pWnd是指向被控控件的指针,他可以是一个控件也可以是一个窗口,这样就把界面布局的控制元素全都囊括进来了。而移动、缩放的百分比控制使界面布局的控制更加灵活,更加方便。每一个需要调整布局的界面元素都会通过这个结构来保存其信息,而在界面主窗口中维护一个这种结构的列表即可在OnSize函数中方便的实现控件布局的自动调整。

      所谓界面动态调整布局实际上应该有一个参照,也就是说我们应该记录初始显示时界面的大小和此时界面中控件的位置。以后的调整都是基于这些信息的,也就是说tagCONTROL中保存的信息都是通过初始的基本数据起作用的。按着这个思路,在OnSize函数中我是这样实现的

      同时,一个设计良好的界面的一般会有一个最小大小,在这个范围内安排界面布局。通常情况下我们不希望界面小于这个最小大小,这个需求可以通过重载WM_GETMINMAXINFO消息来实现

      这样一来,只要我们设计好控制信息,我们设计的界面即使被用户缩放和拖拽也可以体现出良好的布局。这个方案是我这些年来一直在项目中采用的,我不敢说它是完美的,但是却是能够满足一般的需求。如果大家在对这个方案的研究和使用中发现什么问题或是可以改进的地方还希望可以告诉我,我会加以改进再和朋友们分享。

  • 8
    点赞
  • 85
    收藏
    觉得还不错? 一键收藏
  • 176
    评论
Unity引擎的基础界面布局方式主要有两种:绝对布局和自动布局。 绝对布局是指通过在屏幕上设置组件的具体位置和尺寸来布局界面。在Unity编辑器中,可以通过鼠标拖拽的方式将组件放置到场景中,并设置其精确的位置和尺寸。这种布局方式简单直观,适用于一些简单的界面设计,但对于复杂的界面可能不够灵活,需要手动调整每个组件的位置和尺寸。 自动布局是指通过使用布局组件或脚本来自动排列和调整界面中的组件。Unity提供了一些布局组件,如水平布局组件(Horizontal Layout Group)和垂直布局组件(Vertical Layout Group),它们可以自动将子组件排列在水平或垂直方向上,并自动调整它们的位置和尺寸。此外,还可以通过编写脚本来实现自定义的自动布局。自动布局方式相对灵活,适用于需要动态排列和调整组件的界面设计。 除了绝对布局和自动布局,Unity还提供了一些其他的界面布局方式,如网格布局(Grid Layout)、网格系统(Grid System)和锚点布局(Anchor Layout)等。这些布局方式可以更好地适应不同的界面需求。同时,Unity编辑器的可视化界面设计工具也使得界面布局更加简单直观,开发者可以通过拖拽和调整组件来快速设计和调整界面布局。 综上所述,Unity引擎的基础界面布局方式简单易懂,开发者可以选择适合自己需求的布局方式来设计界面

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 176
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值