檢視原始碼 wxLayoutAlgorithm (wx v2.4.3)

wxLayoutAlgorithm 實作 MDI 或 SDI 框架中子視窗的佈局。

它會向框架的子元件發送一個 wxCalculateLayoutEvent (wx 中未實作) 事件,要求它們提供關於其大小的資訊。對於 MDI 父框架,此演算法會將剩餘空間分配給 MDI 用戶端視窗(其中包含 MDI 子框架)。

對於 SDI (一般) 框架,會指定一個「主要」視窗佔據剩餘空間。

由於使用事件系統,此技術可以應用於任何視窗,這些視窗不一定「知道」佈局類別(wxWindow 中沒有虛擬函式參考 wxLayoutAlgorithm 或其事件)。但是,您可能希望為子視窗使用 wxSashLayoutWindow,因為此類別為所需的事件提供處理程式,並提供用於指定視窗所需大小的存取器。您可以選擇使用基底類別中的 sash 行為,使視窗可讓使用者調整大小。

wxLayoutAlgorithm 通常用於 IDE(整合開發環境)應用程式,其中除了 MDI 用戶端視窗或其他主要編輯視窗之外,還有數個可調整大小的視窗。可調整大小的視窗可能包括工具列、專案視窗和用於顯示錯誤和警告訊息的視窗。

當視窗接收到 OnCalculateLayout 事件時,它應該在給定的事件物件中呼叫 SetRect,使其為舊的提供矩形減去視窗佔用的任何空間。它也應相應地設定其自身大小。wxSashLayoutWindow::OnCalculateLayout (wx 中未實作) 會產生一個 OnQueryLayoutInfo 事件,並將其發送到自身以確定視窗的方向、對齊方式和大小,這些資訊會從應用程式設定的內部成員變數中取得。

此演算法的工作方式是從等於整個框架用戶端區域的矩形開始。它會迭代框架子元件,產生 wxLayoutAlgorithm::OnCalculateLayout 事件,這些事件會減去視窗大小,並傳回剩餘的矩形供下一個視窗處理。假設(由 wxSashLayoutWindow::OnCalculateLayout(wx 中未實作)) 視窗根據其指定的方向,延伸框架用戶端的完整維度。例如,水平視窗會延伸框架用戶端區域剩餘部分的完整寬度。在另一個方向上,視窗將固定為 wxLayoutAlgorithm::OnQueryLayoutInfo 指定的任何大小。對齊設定會使視窗「黏附」到剩餘用戶端區域的左側、頂部、右側或底部。此方案表示視窗建立的順序很重要。假設您希望在框架頂部有一個額外的工具列、在 MDI 用戶端視窗左側有一個專案視窗,以及在狀態列上方有一個輸出視窗。因此,您應該依此順序建立視窗:工具列、輸出視窗、專案視窗。這可確保工具列和輸出視窗佔用頂部和底部空間,然後中間剩餘的高度用於專案視窗。

wxLayoutAlgorithm 完全獨立於 wxLayoutAlgorithm::OnCalculateLayout 選擇如何解釋視窗的大小和對齊方式。因此,您可以實作一個具有新的 wxLayoutAlgorithm::OnCalculateLayout 事件處理程式的不同視窗類別,該處理程式具有更複雜的視窗佈局方式。例如,它可以允許指定是否在指定的方向上發生延伸,而不是總是假設延伸。(這可以,而且可能應該新增到現有的實作中)。

注意:wxLayoutAlgorithmwxLayoutConstraints(wx 中未實作)無關。它是指定佈局的替代方法,對於這種佈局,一般約束系統並不適用。

參見

wxWidgets 文件:wxLayoutAlgorithm

摘要

函式

銷毀物件

佈局一般框架的子元件。

佈局 MDI 父框架的子元件。

佈局一般框架或其他視窗的子元件。

預設建構子。

類型

-type wxLayoutAlgorithm() :: wx:wx_object().

函式

-spec destroy(This :: wxLayoutAlgorithm()) -> ok.

銷毀物件

此函式的連結

layoutFrame(This, Frame)

檢視原始碼
-spec layoutFrame(This, Frame) -> boolean() when This :: wxLayoutAlgorithm(), Frame :: wxFrame:wxFrame().

等同於 layoutFrame(This, Frame, [])

-spec layoutFrame(This, Frame, [Option]) -> boolean()
                     when
                         This :: wxLayoutAlgorithm(),
                         Frame :: wxFrame:wxFrame(),
                         Option :: {mainWindow, wxWindow:wxWindow()}.

佈局一般框架的子元件。

mainWindow 設定為佔據剩餘空間。此函式僅呼叫 layoutWindow/3

此函式的連結

layoutMDIFrame(This, Frame)

檢視原始碼
-spec layoutMDIFrame(This, Frame) -> boolean()
                        when This :: wxLayoutAlgorithm(), Frame :: wxMDIParentFrame:wxMDIParentFrame().

等同於 layoutMDIFrame(This, Frame, [])

-spec layoutMDIFrame(This, Frame, [Option]) -> boolean()
                        when
                            This :: wxLayoutAlgorithm(),
                            Frame :: wxMDIParentFrame:wxMDIParentFrame(),
                            Option ::
                                {rect, {X :: integer(), Y :: integer(), W :: integer(), H :: integer()}}.

佈局 MDI 父框架的子元件。

如果 rect 非 NULL,則給定的矩形將用作起點,而不是框架的用戶端區域。MDI 用戶端視窗設定為佔據剩餘空間。

此函式的連結

layoutWindow(This, Parent)

檢視原始碼
-spec layoutWindow(This, Parent) -> boolean()
                      when This :: wxLayoutAlgorithm(), Parent :: wxWindow:wxWindow().

等同於 layoutWindow(This, Parent, [])

-spec layoutWindow(This, Parent, [Option]) -> boolean()
                      when
                          This :: wxLayoutAlgorithm(),
                          Parent :: wxWindow:wxWindow(),
                          Option :: {mainWindow, wxWindow:wxWindow()}.

佈局一般框架或其他視窗的子元件。

mainWindow 設定為佔據剩餘空間。如果未指定,則最後一個回應查詢模式中計算佈局事件的視窗將取得剩餘空間(也就是說,非查詢 OnCalculateLayout 事件不會傳送到此視窗,而且視窗將設定為剩餘大小)。

-spec new() -> wxLayoutAlgorithm().

預設建構子。