当我们需要写自己的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"写的.
分享到:
相关推荐
总的来说,"wxWidgets-3.0.3-docs-chm.zip"提供的CHM文档是wxWidgets开发者的重要资源,它不仅提供了全面的技术细节,还包含了丰富的实践指导,是学习和使用wxWidgets进行跨平台GUI开发的宝贵资料。无论你是初学者...
wxWidgets v3.1.3的官方chm文档,原始发布地址为 https://github.com/wxWidgets/wxWidgets/releases/download/v3.1.3/wxWidgets-3.1.3-docs-chm.zip。国内下载实在太慢,搬到这里,分享给有需要的朋友们。
wxWidgets-3.1.0-docs-chm.zip 帮助文档 wxWidgets-3.1.0-docs-chm.zip wxWidgets-3.1.0-docs-chm.zip wxWidgets-3.1.0-docs-chm.zip
在"wxWidgets-2.8.7-CHM"压缩包中,包含的两个主要部分是“utils”和“docs”。这两个部分对于理解和使用 wxWidgets 至关重要。 1. **utils 文件夹** "utils" 文件夹包含了 wxWidgets 的实用工具程序,这些是与库...
wxWidgets-2.8.12-gcc-4.7.1-mono-static.zip wxWidgets 2.8.12静态编译库 CSDN发布地址:<http://blog.csdn.net/WinsenJiansbomber/article/details/50616754> 编译工具:TDM-GCC 4.7.1 DEBUG编译命令: set ...
"wxWidgets-2.8.10-PDF" 是针对 wxWidgets 2.8.10 版本的一系列英文文档,包含了对这个版本的详尽说明和指南。 在提供的压缩包文件中,我们可以看到以下几个 PDF 文档: 1. **fl.pdf**: 这可能是指富文本格式...
在这个"wxWidgets-3.1.3.7z"压缩包中,包含的是wxWidgets 3.1.3稳定版本的源代码和其他相关构建文件。这个版本被广泛推荐,因为它比3.2及以上版本更加成熟,减少了潜在的bug和不稳定因素。 描述中提到,这个版本是...
WIN版本的wxWidgets-3.1.3.zip wxWidgets源码 来自官网 下载链接 https://github.com/wxWidgets/wxWidgets/releases/download/v3.1.3/wxWidgets-3.1.3.zip 不想花积分的可以直接下载。
When installing wxWidgets on Windows or OS X, we always recommend building the library from source yourself, and only provide the source package for most platforms. On some platforms, we have provided...
wxWidgets-2.8.8源代码 wxWidgets-2.8.8源代码 wxWidgets-2.8.8源代码 wxWidgets-2.8.8源代码 wxWidgets-2.8.8源代码 wxWidgets-2.8.8源代码
【wxWidgets-3.1.5-headers.7z】是一个包含wxWidgets库3.1.5版本头文件的压缩包。wxWidgets是一个开源的C++库,它允许开发人员创建原生跨平台的GUI应用程序。这个压缩包主要用于开发环境,帮助程序员在不同操作系统...
这是Github上下载的wxWidgets 3.1.3 版本的源代码,原始链接为:https://github.com/wxWidgets/wxWidgets/releases/download/v3.1.3/wxMSW-3.1.3-Setup.exe
wxWidgets(/wɪksˈwɪdʒɪts/,原名wxWindows[1])是一個開放原始碼且跨平台的物件工具集(widget toolkit),其函式庫可用來建立基本的圖形使用者介面(GUI)。wxWidgets由Julian Smart於1992年首先開發。 ...
wxWidgets-2.7.0-1-CHM
wxWidgets-2.8.9 界面开发库源代码,可在windows 和 linux下应用,跨平台的,此代码是windwos平台的库代码
wxWidgets-2.8.12-vc6-unicode-static.zip wxWidgets 2.8.12 Visual Studio C++ 6.0静态编译库 CSDN发布地址:<http://blog.csdn.net/WinsenJiansbomber/article/details/50616754>
wxWidgets-2.8.10版本的源码
`wxWidgets-3.1.0.tar.bz2` 是一个包含 `wxWidgets` 框架版本 3.1.0 的压缩文件,该框架是一个跨平台的 C++ 库,用于开发图形用户界面(GUI)应用程序。它支持多种操作系统,包括 Windows、Linux、macOS 等,让...
这个压缩包文件“wxWidgets-3.0.4 mingw32-gcc codeblocks可用版本 自编译”是为Windows平台设计的,特别是为那些使用MinGW32编译器和Code::Blocks集成开发环境(IDE)的开发者准备的。 wxWidgets库包含了丰富的...
**wxWidgets 2.8.12:跨平台的C++ GUI库** wxWidgets是一个备受推崇的开源项目,它提供了一个强大的C++类库,允许开发者构建原生的图形用户界面(GUI)应用程序,而无需关注底层操作系统。这个库的名字来源于它的...