wx網羅系列之細節: wxWidgets之--wxSizer

wxSizer是一個可嵌套的容器,用於對控件的位置進行排布。本文對它作了介紹。

 

        當我們需要寫自己的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"寫的.  

發佈了37 篇原創文章 · 獲贊 2 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章