<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 4.3 基礎窗口類 雖然你不一定有機會直接使用基礎窗口類(wxWindow),但是由于這個類是很多窗口控件的基類,它實現的很多方法在它的子類型中都可以直接拿來使用,所以有必要介紹一下這個基礎窗口類。 窗口類wxWindow wxWindow窗口類既是一個重要的基類,也是一個你可以直接在代碼中使用的類。當然,前者使用的頻度要比后者大很多。 和前面提到的一樣,wxWindow也可以使用單步創建或者兩步創建兩種方式。單步創建的構造函數原型如下: ``` wxWindow(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0, const wxString& name = wxT("panel")); ``` 可以象下面這樣使用: ``` wxWindow* win = new wxWindow(parent, wxID_ANY, wxPoint(100, 100), wxSize(200, 200)); ``` 窗口類型 每一個窗口類都可以使用定義在下表中的這些窗口基類中的窗口類型。這些類型中不是所有的類些都被所有的控件所支持。例如對于邊框的類型。如果在創建窗口的時候你沒有指定窗口的邊框類型,那么在不同的平臺上將會有不同的邊框類型的缺省值。在windows平臺上,控件邊框的缺省值為 wxSUNKEN_BORDER,意為使用當前系統風格的邊框。你可以使用類似wxNO_BORDER這樣的值來覆蓋系統的默認值。 | wxSIMPLE_BORDER | 在窗口周圍顯示一個瘦邊框. | |:--- |:--- | | wxDOUBLE_BORDER | 顯示一個雙層邊框. | | wxSUNKEN_BORDER | 顯示一個凹陷的邊框,或者使用當前窗口風格設置. | | wxRAISED_BORDER | 顯示一個凸起的邊框. | | wxSTATIC_BORDER | 顯示一個適合靜態控件的邊框. 只支持Windows平臺. | | wxNO_BORDER | 不顯示任何邊框. | | wxTRANSPARENT_WINDOW | 定義一個透明窗口 (意思是這個窗口不接收paint事件).只支持windows平臺. | | wxTAB_TRAVERSAL | 使用這個類型允許非Dialog窗口支持使用TAB進行遍歷. | | wxWANTS_CHARS | 使用這個類型來允許窗口接收包括回車和TAB在內的所有的鍵盤事件。TAB用來在Dialog類型的窗口中遍歷各控件。如果沒有設置這個類型,這些特殊的按鍵事件將不會被產生。 | | wxFULL_REPAINT_ON_RESIZE | 在默認情況下,在窗口客戶區大小發生改變時,wxWidgets并不會重畫整個客戶區。設置這個類型將使得wxWidgets改變這種默認的作法,而保持整個客戶區的刷新 | | wxVSCROLL | 顯示垂直滾動條. | | wxHSCROLL | 顯示水平滾動條. | | wxALWAYS_SHOW_SB | 如果一個窗口有滾動條,那么在不需要滾動條的時候(當窗口足夠大不需要使用滾動條的時候),禁止滾條而不隱藏滾動條。這個類型目前只支持Windows平臺和wxWidgets的wxUniversal版本. | | wxCLIP_CHILDREN | 只支持Windows平臺,用于消除由于擦除子窗口的背景而引起的閃鑠. | 下表列出了窗口的擴展類型,這些擴展類型不能直接和類型混用,而要使用wxWindow::SetExtraStyle函數來進行設置。 | wxWS_EX_VALIDATE_RECURSIVELY | 在默認情況下,Validate,transferDataToWindow,和transferDataFromWindow只在窗口的直接子窗口上才可以使用。如果設置了這個擴展類型,那么將可以遞歸的在各個子窗口上使用。 | |:--- |:--- | | wxWS_EX_BLOCK_EVENTS | wxCommandEvents事件將會在無法在當前事件表中找到匹配的時候在其父窗口中嘗試匹配,設置這個擴展屬性可以阻止這個行為。Dialog類型的窗口默認設置了這個類型,但是如果SetExtraStyle被應用程序類調用過的話,默認設置可能被覆蓋. | | wxWS_EX_TRANSIENT | 不要使用這個窗口作為其它窗口的父窗口.這個類型一定只能用于瞬間窗口;否則,如果使用它作為一個dialog或者frame類型窗口的父窗口,如果父窗口在子窗口之前釋放,可能導致系統崩潰。 | | wxWS_EX_PROCESS_IDLE | 這個窗口應該處理所有的idle事件,包括那些設置了wxIDLE_PROCESS_SPECIFIED模式的idle事件。 | | wxWS_EX_PROCESS_UI_UPDATES | 這個窗口將處理所有的Ui刷新事件,包括那些設置了wxUPDATE_UI_PROCESS_SPECIFIED的UI刷新事件。參考第9章獲得和界面刷新有關的更多的內容. | 窗口事件 窗口類和它的派生類可以產生下面的事件(鼠標,鍵盤和游戲手柄產生的事件將會在第6章描述)。 | EVT_WINDOW_CREATE(func) | 用于處理wxEVT_CREATE事件, 這個事件在窗口剛剛被產生的時候生成,處理函數的參數類型是wxWindowCreateEvent. | |:--- |:--- | | EVT_WINDOW_DESTROY(func) | 用于處理wxEVT_DELETE事件,在這個窗口即將被刪除的時候產生,處理函數的參數類型是wxWindowDestroyEvent. | | EVT_PAINT(func) | 用于處理wxEVT_PAINT事件,在窗口需要被刷新的時候產生.處理函數的參數類型是wxPaintEvent. | | EVT_ERASE_BACKGROUND(func) | 用于處理wxEVT_ERASE_BACKGROUND事件,在窗口背景需要被更新的時候產生. 處理函數的參數是wxEraseEvent. | | EVT_MOVE(func) | 用于處理wxEVT_MOVE事件, 在窗口移動的時候產生.處理函數的參數類型是wxMoveEvent. | | EVT_SIZE(func) | 用于處理wxEVT_SIZE事件, 在窗口大小發生變化以后產生.處理函數的參數類型是wxSizeEvent. | | EVT_SET_FOCUS(func)EVT_KILL_FOCUS(func) | 用于處理wxEVT_SET_FOCUS和wxEVT_KILL_FOCUS事件,在窗口得到或者失去鍵盤焦點的時候產生. 處理函數參數類型是wxFocusEvent. | | EVT_SYS_COLOUR_CHANGED(func) | 用于處理wxEVT_SYS_COLOUR_CHANGED事件,當用戶在控制面板里更改了系統顏色的時候產生(只支持windows平臺). 處理函數參數類型為wxSysColourChangedEvent. | | EVT_IDLE(func) | 用于處理wxEVT_IDLE事件,在空閑事件產生.處理函數參數類型位wxIdleEvent. | | EVT_UPDATE_UI(func) | 用于處理wxEVT_UPDATE_UI事件,在系統空閑時間產生用來給窗口一個更新自己的機會. | wxWindow類的成員函數 因為wxWindow類是其它所有窗口類的基類,它擁有很多的成員函數。我們不可能在這里作一一的說明,只能揀其中最重要的一些作簡要的說明。不過我們還是推薦你瀏覽一下wxWidgets手冊中的相關部分,以便能夠徹底了解wxWindow類提供的所有功能,以及要使用這個功能你需要提供的參數等。 CaptureMouse函數可以捕獲所有的鼠標輸入(將其限制在本窗口以內),ReleaseMouse則可以釋放前一次的捕獲.在繪圖程序中,這兩個函數是很有用的。它可以讓你在鼠標移動到窗口邊緣的時候來滾動窗口的客戶區,而不是任由鼠標跑到別的窗口并且激活別的窗口。另外的兩個函數GetCapture用來獲取當前正在使用的捕獲設備(如果是被當前的應用程序設置的話),而HasCapture可以用來檢測是否鼠標正被這個窗口捕獲。 Centre, CentreOnParent和CentreOnScreen三個函數可以讓窗口調整自己的位置使其位于屏幕或者是其父窗口的正中間位置。 ClearBackground函數將使用當前的背景色清除當前窗口. ClientToScreen和ScreenToClient可以將座標在相對于屏幕左上角和相對于客戶區左上角之間進行互相轉換. Close函數產生一個wxCloseEvent事件,這個事件通常的處理過程將關閉窗口,釋放內存。當然如果應用程序為這個事件定義了特殊的處理函數,那么窗口也有可能不被關閉和釋放。 ConvertDialogToPixels和ConvertPixelsToDialog函數可以對數值進行對話框單位和象素單位之間的轉換。這在基于字體大小以便應用程序的顯示更合理的操作中是很有用的. Destroy函數將安全的釋放窗口.使用這個函數代替直接調用delete操作符因為這個函數下不同的窗口類型的表現是不一樣的。對于對話框和frame這樣的頂層窗口來說,這個函數會將窗口放入一個等待刪除的額窗口列表中,等到這個窗口的所有的事件都處理完畢的時候才會被刪除,這可以避免一些事件在已經不存在的窗口上被執行. Enable允許或者禁止窗口和它的子窗口處理輸入事件。在禁止狀態下一些窗口會有不同的顏色和外觀。Disable函數和Enable函數使用false作為參數的效果是完全一樣的。 FindFocus函數是一個靜態函數,用它可以找到當前擁有鍵盤焦點的窗口。 FindWindow函數可以通過標識符或者名字在它的窗口關系樹中尋找某個窗口. 返回值可能是它的一個子窗口或者它自己.如果你可以確定你要找的窗口的類型,可以安全的使用wxDynamicCast進行類型強制轉換,轉換的結果將是一個指向那個類型的指針或者是NULL: ``` MyWindow* window = wxDynamicCast(FindWindow(ID_MYWINDOW), MyWindow); ``` Fit函數會自動改變窗口的大小以便剛好可以容納它的所有子窗口.這個函數應用被應用在使用基于sizer的布局的時候。FitInside函數是一個類似的函數,區別在于它使用的是虛大小(應用在那些包含滾動條的窗口). Freeze和Thaw,這兩個函數的作用是告訴wxWidgets,在這兩個函數之間進行的刷新界面的操作是允許被優化的。舉例來說,如果你要在一個文本框控件逐行中加入多行文本,則可以用這個方法來優化顯示效果,避免閃爍,這兩個函數已經在GTK+版本的wxTextCtrl控件上實現,也適用于 Windows和Max Os X平臺的所有類. GetAcceleratorTable和SetAcceleratorTable用來獲取和設置某個窗口的加速鍵表. GetBackgroundColour和SetBackgroundColour用來訪問窗口的背景顏色屬性。這個屬性被 wxEVT_ERASE_BACKGROUND事件用來繪制窗口背景.如果你更改了背景顏色設置,你應該調用Refresh或者 ClearBackground函數來刷新背景. SetOwnBackgroundColour的作用和SetBackgroundColour基本相同,但是前者不會更改當前窗口的子窗口的背景屬性. GetBackgroundStyle和SetBackgroundStyle用來設置窗口的背景類型. 默認的窗口背景類型是wxBG_STYLE_SYSTEM,它的含義是wxWidgets按照系統默認設置來進行背景繪制。系統默認的背景繪制方法根據控件的不同而不同,比如wxDialog的默認背景繪制方法是什么紋理繪制的方法,而wxListBox則是使用固定顏色的繪制方法。如果你設置了窗口的背景繪制方法類型是wxBG_STYLE_COLOUR,那么wxWidgets會全部用單一顏色的方法繪制背景。而如果你將其設置為 wxBG_STYLE_CUSTOM, wxWidgets將不進行任何的背景繪制工作,你可以自己在擦除背景事件中或者重畫事件中自己繪制背景.如果你希望自己繪制背景,請一定設置 wxBG_STYLE_CUSTOM為背景類型,否則很容易引起畫面的閃爍. GetBestSize函數以象素為單位返回窗口最合適的大小(因為每個窗口類都需要實現DoGetBestSize函數).這個函數用來提示Sizer系統不要讓這個窗口的尺寸太小以致不能正確的顯示和使用。舉例來說,對于靜態文本控件來說,不要讓它的字符只能顯示一半。對于包含其它子窗口的窗口比如wxPanel來說,這個尺寸等于對這個窗口調用Fit函數以后的尺寸的大小。 GetCaret和SetCaret函數用來訪問或者設置窗口的光標. GetClientSize和SetClientSize用來訪問和設置窗口的客戶區大小,單位是象素. 客戶區大小指的是不包括邊框和修飾的區域,或者說你用戶可以繪制或者用來放置子窗口的區域. GetCursor和SetCursor函數用來訪問和設置窗口的鼠標指針. GetDefaultItem函數返回一個指向這個窗口默認的子按鈕的指針或者返回NULL。默認子按鈕是當用戶按回車鍵的時候默認激活的按鈕,可以通過wxButton::SetDefault函數進行設置. GetDropTarget和SetDropTarget函數用來取得或者設置和窗口關聯的wxDropTarget對象,這個對象用來處理和控制窗口的拖放操作. 我們將在第11章"剪貼板和拖放"中詳細介紹拖放有關的操作。 GetEventHandler和SetEventHandler函數用來訪問和設置窗口的第一事件表.默認情況下,窗口的事件表就是窗口自己,但是你可以指定不同的事件表,也可以通過PushEventHandler和PopEventHandler函數設置一個事件表鏈。然后讓不同的事件表處理不同的事件. wxWidgets將搜索整個事件表鏈來尋找匹配的事件處理函數處理新收到的事件,詳情請參閱第3章,“事件處理”. GetExtraStyle和SetExtraStyle函數用來獲取和設置窗口的擴展類型位。擴展類型宏通常以wxWS_EX_開頭. GetFont和SetFont函數獲取和設置和窗口相關的字體. SetOwnFont和SetFont的功能相似,唯一的區別在于前者設置的字體不會被子窗口繼承. GetForegroundColour和SetForegroundColour函數用來操作窗口的前景顏色屬性. 和SetOwnForegroundColour函數的區別僅在于是否改變子窗口的這個屬性。 GetHelpText和SetHelpText用來獲取和設置窗口相關的上下文幫助.這個文本屬性實際上存儲在當前的wxHelpProvider實現中,而不是存在于窗口類中. GetId和SetId用來操作窗口標識符. GetLabel函數返回窗口相關聯的標簽.具體的含義取決的特定的窗口類. GetName和SetName用來操作窗口名稱,這個名字不需要是唯一的。這個名稱對wxWidgets來說沒有什么意義,但是在Motif系統中被用于窗口資源的名稱. GetParent返回窗口的父窗口. GetPosition以象素單位返回相對于父窗口的窗口左上角座標。 GetRect返回一個wxRect對象 (參考第13章, "數據結構和類型"),其中包含了象素單位的這個窗口的大小和位置信息. GetSize和SetSize函數獲取和設置窗口象素單位的窗口長寬. GetSizer和SetSizer函數用來操作這個窗口綁定的最頂級的窗口布局對象. GetTextExtent用于返回當前字體下某個字符串的象素長度. GetToolTip和SetToolTip用來操作這個窗口的tooltip對象. GetUpdateRegion函數返回窗口自上次Paint事件以來需要刷新的區域. GetValidator和SetValidator函數用來操作這個窗口可選的wxValidator對象。詳情請參考第9章. GetVirtualSize返回窗口的虛大小,通常就是和滾動條綁定的那個大小. GetWindowStyle和SetWindowStyle用來操作窗口類型比特位。 InitDialog函數發送一個wxEVT_INIT_DIALOG事件來來開始對話框數據傳送. IsEnabled用來檢測當前窗口的使能狀態. IsExposed用來檢測一個點或者一個矩形區域是否位于需要刷新的范圍。 IsShown用來指示窗口是否可見. IsTopLevel用來指示窗口是否是頂層窗口(僅用于wxFrame或者wxDialog). Layout函數用來在窗口已經指定一個布局對象的情況下更新窗口布局。參考第7章. Lower函數用來將窗口移到窗口樹的最低層,而Raise則把窗口移動到窗口樹的最頂層.這兩個函數既可以用于頂層窗口,也可以用于子窗口. MakeModal函數禁用其它所有的頂層窗口,以便用戶只能和當前這個頂層窗口交互. Move函數用來移動窗口. MoveAfterInTabOrder更改窗口的TAB順序到作為參數的窗口的后面, 而MoveBeforeInTabOrder則將其挪到參數窗口的前面. PushEventHandler壓入一個事件表到當前的事件表棧, PopEventHandler函數彈出并且返回事件表棧最頂層的事件表. RemoveEventHandler則查找事件表棧中的一個事件表并且將其出棧. PopupMenu函數在某個位置彈出一個菜單. Refresh和RefreshRect函數導致窗口收到一個重畫事件(和一個可選的擦除背景事件). SetFocus函數讓本窗口收到鍵盤焦點. SetScrollbar函數用來設置窗口內建的滾動條的屬性. SetSizeHints函數用來定義窗口的最小最大尺寸,依次窗口尺寸增量的大小,僅對頂層窗口適用. Show函數用來顯示和隱藏窗口; Hide函數的作用相當于適用false作為參數調用Show函數. transferDataFromWindow和transferDataToWindow獲取和傳輸數據到窗口對象,并且在沒有被重載的情況下會調用驗證函數. Update立即重畫窗口已經過期的區域. UpdateWindowUI函數發送wxUpdateUIEvents事件到窗口,以便給窗口一個更新窗口元素(比如工具條和菜單)的機會. Validate使用當前的驗證對象驗證窗口數據. wxControl類 wxControl是一個虛類。它繼承自wxWindow,用來作為控件的基類: 所謂控件指的是那些可以顯示數據項并且通常需要響應鼠標或者鍵盤事件的那些窗口類. wxControlWithItems類 wxControlWithItems也是一個虛類,用來作為wxWidgets的一些包含多個數據項的控件(比如wxListBox, wxCheckListBox,wxChoice和wxComboBox等)的基類。使用這個基類的目的為了給這些具有相似功能的控件提供一致的API函數。 wxControlWithItems的數據項擁有一個字符串和一個和這個字符串綁定的可選的客戶數據。客戶數據可以是兩種類型,要么是無類型指針(void*),這意味這這個控件只幫忙存儲客戶數據但是永遠不會使用客戶數據。另外一種是有類型(wxClientData)指針,對于后一種情況,客戶數據會在控件被釋放或者數據項被清除的時候被自動釋放。同一個控件的所有數據項必須擁有同樣的客戶區數據類型:要么是前者,要么是后者。客戶區數據的類型是在第一次調用Append函數或者,SetClientData函數或者SetClientObject函數的時候被確定的。如果要使用有類型指針客戶數據,你應該自定義一個繼承自wxClientData的類,然后將它的實例指針傳遞給Append函數或者 SetClientObject函數。 wxControlWithItems的成員函數 Append函數給這個控件增加一個或者一組數據項. 如果是增加一個數據項,你可以用第二個參數指定有類型客戶數據指針或者無類型客戶數據指針。比如: ``` wxArrayString strArr; strArr.Add(wxT("First string")); strArr.Add(wxT("Second string")); controlA->Append(strArr); controlA->Append(wxT("Third string")); controlB->Append(wxT("First string"), (void *) myPtr); controlC->Append(wxT("First string"), new MyTypedData(1)); ``` Clear函數清除控件所有數據項并且清除所有的客戶數據. Delete函數使用基于0的索引清除一個數據項以及它的客戶數據。 FindString返回一個和某個字符串基于0的數據項的索引。如果找不到則返回wxNOT_FOUND. GetClientData和GetClientObject返回某個數據項的客戶區數據指針(如果有的話). SetClientData和SetClientObject則可以用來設置這個指針. GetCount數據項的總數. GetSelection返回選中的數據項或wxNOT_FOUND. SetSelection則用來設置某個數據項為選中狀態. GetString用來獲取某個數據項的字符串; SetString則用來設置它. GetStringSelection用來返回選中的數據項的字符串或者一個空的字符串; SetStringSelection則用來設置選中的字符串。你應該先調用FindString函數保證這個字符串是存在于某個數據項的,否則可能引發斷言失敗. Insert在控件數據項的某個位置插入一個數據項(可以包含也可以不包含客戶數據). IsEmpty則用來檢測一個控件的數據項是否為空.
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看