wxWidgets之--wxSizer

news/2024/7/6 0:00:22
当我们需要写自己的dialog的时候,需要布置好控件的位置,界面才美观.可是如果控件比较多的化,难道我们需要对每个都指定坐标么?还有一个重要的问题是,这个过程不是"所见即所得"!(当然现在wxWidgets也有可视的界面编辑器了,这里不考虑这个).这个对于从VC/Delphi转过来的程序员会比较不适应,因为IDE有集成界面编辑器,非常方便调整界面.对于写过AWT(java),GTK,QT的人来说,相信都用过类似layout的东西.wxWidgets中wxSizer就是做这个的.
  我们先说说一些基本的概念.
  1.所有的sizers都是容器.并且是可嵌套的.
  2.item的最小尺寸
  一般的控件最小尺寸就是初试化的时候的默认值.有些控件是可以计算他们的尺寸的(例如Checkbox),但是有些不好计算,例如listbox,宽高都是不确定的,因为可以有滚动条:-).有些则能计算高度,不能计算宽度,比如text control.
  3.item的边框
  包围着控件的周围的空白空间.每个控件都有自己的边框.边框的大小是可以设置的.位置也可以设置的,比如只有左边有边框,或者上下有,左右没有.
  4.item是可对齐的
   可以居中/上/小/左/右等对齐方式.
  5.item是可伸缩的
  一个item一般占用空间包括item的最小尺寸和边框.但是这个是可以伸缩的.
  6.item是可以手工设置为隐藏的
  使用wxSizer::Show函数实现.注意后面接着要调用Layout函数强制更新界面布局.当我们想隐藏部分界面的时候,这个功能非常有用.避免我们做这样的事情:先从sizer中把控件移除,然后需要的时候在加入.但是要注意的,这个只有wxBoxSizer和wxFlexGridSizer支持.
  我们在来看看wxWidgets都提供我们哪些类来完成控件的布局任务.
  wxSizer, wxGridSizer, wxFlexGridSizer, wxBoxSizer, wxStaticBoxSizer
  wxSizer是基类,一般我们都不直接使用.
  wxBoxSizer:
  可以指定是水平还是垂直方向排列item.只能二者选一.如果需要横竖混排,就需要嵌套使用.
  wxStaticBoxSizer:
   和wxBoxSizer一模一样,就是多了一个static box做为边框.
  wxGridSizer:
  就是表格状的排布.注意的是,所有的格子的大小都是一样的.具体的尺寸依赖item中最大的一个.
  wxFlexGridSizer:
  wxGridSizer的升级版本,每行的高度和每列的宽度是独立的.具体的大小依赖行/列中最大个高/宽.
  下面通过对wxBoxSizer的Add函数分析来详细说明wxBoxSizer使用方法.
  原形如下:
  wxSizerItem* Add(wxWindow* window, int proportion = 0,int flag = 0, int
  border = 0, wxObject* userData = NULL)
  wxSizerItem* Add(wxSizer* sizer, int proportion = 0, int flag = 0, int
  border = 0, wxObject* userData = NULL)
  一个是针对wxWindow的,一个是嵌套wxSizer用的,其他的参数都是一致的.
  参数说明:
  proportion:
  这个参数是用在wxBoxSizer的.前面说到每个wxBoxSizer是可以指定一个方向的,这个可以认为是wxBoxSizer的主方向.
  如果该参数是1,表示可以在主方向上伸缩需要加入的item.
  flag:
  指定item边框的位置(可以用"|"操作符号组合上/下/左/右).
  指定item对齐方式(可以用"|"操作符号组合上/下/左/右/垂直居中/水平居中).
  还有一个特别的wxEXPAND.指出item在非主方向是否可以伸缩,主方向的伸缩是由proportion指定.这里还有一个特别说明的(对主方向和非主方向都有效),如果父级的sizer限制了不能伸缩尺寸,子级的sizer是不能更改的,就算设置可以伸缩也是无效的.如果父级的能伸缩,子级的 sizer可以设置为不能伸缩.
  这里就不举具体的例子说明了.确实需要可以参考wxWidgets的帮助中的"Topic
  overviews"中的"Sizer overview"的"Programming with
  wxBoxSizer".本文也是参考"Sizer overview"写的.
 

http://www.niftyadmin.cn/n/3565950.html

相关文章

Metafile

Metafile和位图的关系,就像点阵图和位元映射图形(矢量图形)的关系一样。 点阵图通常来自实际的图像,而metafile则大多是通过电脑程式人为建立的。点阵是通过记录像素点的位置描绘图形,而矢量图形是通过数学公式即时演算画出的图形。Metafile由…

Lucene.Net 3.0.3如何从TokenStream中获取token对象

Lucene.Net最高版本为3.0.3,并且apache已经不再提供Lucene.Net的更新,没仔细研究过Lucene.Net的所有版本,Lucene.Net3.0.3遍历TokenStream获取Token对象,已经和以前的版本有了很大的区别,很多方法都已经删除了或者过时…

【Python】 基于秘钥的对称加密

【Crypto】 关于用python进行信息的加密,类似的解决方案有很多比如用base64编码进行encode,再或者是hashlib来进行hash。但是还缺少一种明明场景很简单的解决方案,就是把利用一个秘钥,把一段明文加密然后用同一个秘钥可以把密文解…

使用wxWidgets编程——第一步

译者注:出于个人对wxWindgets的爱好,翻译了此文,总共计8章。在翻译过程中,力求忠实于原文的表达方法。说真的中西方的表达方式真的有很大不同,单独看一个句子是没错误,可放联系上下文,就根本不是…

位图是位的矩形数组

位图是位的矩形数组

python基础 —— 第一个python程序

第一个python程序 编写: hello.py 执行python程序 $ python3 文件路径名.py 常用的文件后缀: .py python语言后缀 .c C语言 .cpp/.cc/.cxx C语言后缀 .java Java语言后缀 在python交互模式下编写并执行代码 进入交互模式:$ python3 <回车&…

设备内容

当您想在一个图形输出设备&#xff08;诸如屏幕或者打印机&#xff09;上绘图时&#xff0c;您首先必须获得一个设备内容&#xff08;或者DC&#xff09;的句柄。

搭建跨平台编程环境Code::Blocks+wxWidgets

这里以目前最新的Code::Blocks 1.0rc2和wxWidgets 2.6.2为例&#xff0c;分别介绍Windows平台和FreeBSD平台下如何搭建Code::BlockswxWidgets环境&#xff0c;其它平台方法可类推。 Windows下 到Code::Blocks官方网站http://www.codeblocks.org下载Code::BlocksMingGW安装包&am…