檢視原始碼 wxFrame (wx v2.4.3)
框架 (frame) 是一種視窗,其大小和位置(通常)可以由使用者變更。
它通常有粗邊框和標題列,並且可以選擇性地包含選單列、工具列和狀態列。一個框架可以包含任何不是框架或對話框的視窗。
一個具有狀態列和工具列的框架,透過 createStatusBar/2
和 createToolBar/2
函數建立,會管理這些視窗,並調整 wxWindow:getClientSize/1
所傳回的值,以反映應用程式視窗可用的剩餘大小。
注意:應用程式通常應該為框架定義一個 wxCloseEvent
處理器,以回應系統關閉事件,例如,以便可以清理相關的資料和子視窗。
預設事件處理
wxFrame
處理以下事件
wxEVT_SIZE:
如果框架恰好有一個子視窗(不包括狀態列和工具列),則會調整此子視窗的大小以佔據整個框架客戶區。如果存在兩個或多個視窗,則應透過手動處理wxEVT_SIZE
或使用 sizer 來明確地佈局它們;wxEVT_MENU_HIGHLIGHT:
如果有狀態列,預設的實作會在狀態列的第一個窗格中顯示與所選項目相關聯的說明字串。
樣式
此類別支援以下樣式
wxDEFAULT_FRAME_STYLE:定義為 wxMINIMIZE_BOX wxMAXIMIZE_BOX wxRESIZE_BORDER wxSYSTEM_MENU wxCAPTION wxCLOSE_BOX wxCLIP_CHILDREN。 wxICONIZE:顯示圖示化的(最小化的)框架。僅限 Windows。
wxCAPTION:在框架上加上標題。請注意,大多數系統上的 wxMINIMIZE_BOX、wxMAXIMIZE_BOX 和 wxCLOSE_BOX 都需要此旗標,因為如果視窗完全沒有標題列,則無法顯示相應的按鈕。也就是說,如果未指定 wxCAPTION,則這些樣式將被簡單地忽略。
wxMINIMIZE:與 wxICONIZE 相同。僅限 Windows。
wxMINIMIZE_BOX:在框架上顯示最小化框。
wxMAXIMIZE:顯示最大化的框架。僅限 Windows 和 GTK+。
wxMAXIMIZE_BOX:在框架上顯示最大化框。請注意,在 wxGTK 下,也必須使用 wxRESIZE_BORDER,否則此樣式將被忽略。
wxCLOSE_BOX:在框架上顯示關閉框。
wxSTAY_ON_TOP:保持在所有其他視窗之上,另請參閱 wxFRAME_FLOAT_ON_PARENT。
wxSYSTEM_MENU:在視窗標題列中顯示一個包含各種視窗指令清單的系統選單。與 wxMINIMIZE_BOX、wxMAXIMIZE_BOX 和 wxCLOSE_BOX 樣式不同,此樣式可以在沒有 wxCAPTION 的情況下使用,至少在 Windows 下是這樣,並且可以在這種情況下使系統選單可用,而不在螢幕上顯示它。但是,建議僅將其與 wxCAPTION 一起使用,以在所有平台上保持一致的行為。
wxRESIZE_BORDER:在視窗周圍顯示可調整大小的邊框。
wxFRAME_TOOL_WINDOW:導致建立一個帶有小標題列的框架;該框架不會出現在 Windows 或 GTK+ 下的工作列中。
wxFRAME_NO_TASKBAR:建立一個正常的框架,但它不會出現在 Windows 或 GTK+ 下的工作列中(請注意,它將在 Windows 下最小化到桌面視窗,這對使用者來說可能看起來很奇怪,因此最好僅在沒有 wxMINIMIZE_BOX 樣式的情況下使用此樣式)。在 wxGTK 中,僅當視窗管理器支援 _NET_WM_STATE_SKIP_TASKBAR 提示時,才會遵守該旗標。
wxFRAME_FLOAT_ON_PARENT:框架將始終在其父視窗之上(與 wxSTAY_ON_TOP 不同)。使用此樣式建立的框架必須具有非 NULL 的父視窗。
wxFRAME_SHAPED:允許具有此樣式的視窗使用
wxTopLevelWindow:setShape/2
方法變更其形狀。預設的框架樣式是正常的、可調整大小的框架。要建立無法由使用者調整大小的框架,您可以使用以下樣式的組合
另請參閱 overview_windowstyles。
額外樣式
此類別支援以下額外樣式
wxFRAME_EX_CONTEXTHELP:在 Windows 下,在標題上放置一個查詢按鈕。按下後,Windows 將進入內容相關的說明模式,如果使用者點擊應用程式視窗,wxWidgets 將會發送一個
wxEVT_HELP
事件。請注意,這是一種擴充樣式,必須在呼叫 Create 之前呼叫 SetExtraStyle 來設定(兩步驟建構)。您不能將此樣式與 wxMAXIMIZE_BOX 或 wxMINIMIZE_BOX 一起使用,因此您應該使用 wxDEFAULT_FRAME_STYLE ~ (wxMINIMIZE_BOX | wxMAXIMIZE_BOX) 來表示具有此樣式的框架(對話框預設沒有最小化或最大化框)wxFRAME_EX_METAL:在 macOS 上,具有此樣式的框架將以金屬外觀顯示。這是一種額外樣式。
請參閱
此類別繼承自以下類別,並可使用以下類別的函數
wxWidgets 文件:wxFrame
事件
此類別發出的事件類型
摘要
函數
用於兩步驟框架建構。
在框架底部建立狀態列。
在框架的頂部或左側建立工具列。
銷毀物件
傳回框架客戶區的原點(以客戶區座標表示)。
傳回目前與框架關聯的選單列的指標(如果有的話)。
傳回目前與框架關聯的狀態列的指標(如果有的話)。
傳回用於顯示選單和工具列說明的狀態列窗格。
傳回目前與框架關聯的工具列的指標(如果有的話)。
預設建構子。
建構子,建立視窗。
模擬選單指令。
此函數會傳送一個虛擬的 wxSizeEvent
到視窗,允許它重新佈局其子項位置。
告知框架顯示給定的選單列。
將狀態列與框架關聯。
設定用於顯示選單和工具列說明的狀態列窗格。
設定狀態列文字並更新狀態列顯示。
設定狀態列中欄位的寬度。
將工具列與框架關聯。
類型
-type wxFrame() :: wx:wx_object().
函數
-spec create(This, Parent, Id, Title) -> boolean() when This :: wxFrame(), Parent :: wxWindow:wxWindow(), Id :: integer(), Title :: unicode:chardata().
-spec create(This, Parent, Id, Title, [Option]) -> boolean() when This :: wxFrame(), Parent :: wxWindow:wxWindow(), Id :: integer(), Title :: unicode:chardata(), Option :: {pos, {X :: integer(), Y :: integer()}} | {size, {W :: integer(), H :: integer()}} | {style, integer()}.
用於兩步驟框架建構。
有關更多詳細資訊,請參閱 new/4
。
-spec createStatusBar(This) -> wxStatusBar:wxStatusBar() when This :: wxFrame().
-spec createStatusBar(This, [Option]) -> wxStatusBar:wxStatusBar() when This :: wxFrame(), Option :: {number, integer()} | {style, integer()} | {id, integer()}.
在框架底部建立狀態列。
傳回值:如果成功建立狀態列,則傳回狀態列的指標,否則傳回 NULL。
注意:狀態列的寬度為框架的整個寬度(調整大小時自動調整),高度和文字大小由主機視窗系統選擇。
請參閱
-spec createToolBar(This) -> wxToolBar:wxToolBar() when This :: wxFrame().
-spec createToolBar(This, [Option]) -> wxToolBar:wxToolBar() when This :: wxFrame(), Option :: {style, integer()} | {id, integer()}.
在框架的頂部或左側建立工具列。
傳回值:如果成功建立工具列,則傳回工具列的指標,否則傳回 NULL。
注意:預設情況下,工具列是 wxToolBar
的實例。要使用不同的類別,請覆寫 OnCreateToolBar()
(未在 wx 中實作)。當使用此函數建立工具列,或透過 setToolBar/2
使框架知道工具列時,框架將管理工具列的位置,並調整 wxWindow:getClientSize/1
的傳回值,以反映應用程式視窗的可用空間。在 Pocket PC 下,您應該始終使用此函數來建立要由框架管理的工具列,以便 wxWidgets 可以使用組合的選單列和工具列。在您管理自己的工具列的地方,像平常一樣建立一個 wxToolBar
。
請參閱
-spec destroy(This :: wxFrame()) -> ok.
銷毀物件
傳回框架客戶區的原點(以客戶區座標表示)。
如果框架有工具列,則它可能與 (0, 0) 不同。
-spec getMenuBar(This) -> wxMenuBar:wxMenuBar() when This :: wxFrame().
傳回目前與框架關聯的選單列的指標(如果有的話)。
請參閱
-spec getStatusBar(This) -> wxStatusBar:wxStatusBar() when This :: wxFrame().
傳回目前與框架關聯的狀態列的指標(如果有的話)。
請參閱
傳回用於顯示選單和工具列說明的狀態列窗格。
-spec getToolBar(This) -> wxToolBar:wxToolBar() when This :: wxFrame().
傳回目前與框架關聯的工具列的指標(如果有的話)。
請參閱
-spec new() -> wxFrame().
預設建構子。
-spec new(Parent, Id, Title) -> wxFrame() when Parent :: wxWindow:wxWindow(), Id :: integer(), Title :: unicode:chardata().
-spec new(Parent, Id, Title, [Option]) -> wxFrame() when Parent :: wxWindow:wxWindow(), Id :: integer(), Title :: unicode:chardata(), Option :: {pos, {X :: integer(), Y :: integer()}} | {size, {W :: integer(), H :: integer()}} | {style, integer()}.
建構子,建立視窗。
注意:對於 Motif,MWM(Motif 視窗管理器)應該正在執行,以便任何視窗樣式都能運作(否則所有樣式都會生效)。
請參閱:create/5
模擬選單指令。
-spec sendSizeEvent(This) -> ok when This :: wxFrame().
此函數會傳送一個虛擬的 wxSizeEvent
到視窗,允許它重新佈局其子項位置。
在建立框架後新增或刪除子項,或子項大小變更後呼叫此函數有時很有用。請注意,如果框架對子項佈局使用 sizer 或限制,則直接呼叫 wxWindow:layout/1
就足夠了,在這種情況下不應使用此函數。
如果 flags
包含 wxSEND_EVENT_POST
值,此函式會張貼事件,也就是排程事件稍後處理,而不是直接派送它。您也可以使用 PostSizeEvent()
(在 wx 中未實作) 作為使用此旗標呼叫此函式的更易讀的等效方式。
-spec setMenuBar(This, MenuBar) -> ok when This :: wxFrame(), MenuBar :: wxMenuBar:wxMenuBar().
告知框架顯示給定的選單列。
注意:如果框架被銷毀,選單列及其選單也會被銷毀,因此請勿明確刪除選單列 (除非將框架的選單列重設為另一個框架或 NULL)。在 Windows 下,會產生大小事件,因此請務必在呼叫 setMenuBar/2
之前正確初始化資料成員。請注意,在某些平台上,不可能對同一個框架物件呼叫此函式兩次。
請參閱
-spec setStatusBar(This, StatusBar) -> ok when This :: wxFrame(), StatusBar :: wxStatusBar:wxStatusBar().
將狀態列與框架關聯。
如果 statusBar
為 NULL,則狀態列 (如果存在) 會從框架分離,但 不會
刪除。
請參閱
設定用於顯示選單和工具列說明的狀態列窗格。
使用 -1 會停用說明顯示。
-spec setStatusText(This, Text) -> ok when This :: wxFrame(), Text :: unicode:chardata().
-spec setStatusText(This, Text, [Option]) -> ok when This :: wxFrame(), Text :: unicode:chardata(), Option :: {number, integer()}.
設定狀態列文字並更新狀態列顯示。
這是 wxStatusBar:setStatusText/3
的簡單封裝,如果框架沒有狀態列,也就是 getStatusBar/1
傳回 NULL,則不會執行任何動作。
注意:使用空字串來清除狀態列。
請參閱
-spec setStatusWidths(This, Widths_field) -> ok when This :: wxFrame(), Widths_field :: [integer()].
設定狀態列中欄位的寬度。
注意:可變欄位的寬度是從所有欄位的總寬度減去不可變欄位的寬度總和,再除以可變欄位的數量計算而得。
-spec setToolBar(This, ToolBar) -> ok when This :: wxFrame(), ToolBar :: wxToolBar:wxToolBar().
將工具列與框架關聯。