<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之旅 廣告
                # 13.7 其它常用的數據類型 wxWidgets內部使用了一些其它的數據類型,也在一些公用API中作為參數和返回值,并且wxWidgets也鼓勵程序員在它們的代碼中使用這些類型. wxObject wxObject類是所有wxWidgets類的基類,它提供的功能包括運行期類型信息,引用技術,虛析構函數,可選的調試版本的new和delete函數等.某些wxObject對象的成員函數還使用了用于存儲meta-data的wxClassInfo對象. ``` MyWindow* window = wxDynamicCast(FindWindow(ID_MYWINDOW), MyWindow); ``` IsKindOf函數判斷對象是否是傳入的wxClassInfo指向的類型. ``` bool tmp = obj->IsKindOf(CLASSINFO(wxFrame)); ``` Ref函數的參數為const wxObject&類型, 它的作用是將當前對象的數據替換為參數對象的引用.當前對象的引用技術減一,如果需要則釋放當前對象數據,參數對象的引用技術則加一. UnRef則將對象內部數據的引用記數器減一,如果已經減到0則釋放當前對象數據. wxLongLong wxLongLong類用來存儲64位整數.如果本地系統支持64位長整數則使用本地系統提供的實現,否則將使用模擬的64位實現.這個類的使用和其它標準的數字類型沒有區別.注意它是一個有符號數字,如果想使用它的無符號版本,可以使用wxULongLong類型,后者的API和前者幾乎完全一樣,除了個別的函數(比如求絕對值函數)可能返回不同的結果.除了一般的計算函數以外,另外的幾個常用的函數包括: * Abs函數返回wxLongLong的絕對值,如果是作為常量引用調用的這個函數,則返回源對象的一個拷貝,否則將修改源對象的內部數值. * ToLong 函數將其轉換成一個長整型,如果由于存在精度丟失,在調試版本中將引發一個斷言錯誤. * ToString將內部存儲的數據轉換成一個wxString類型. wxPoint和wxRealPoint wxPoint在wxWidgets中使用比較普遍,常用來代表屏幕或者窗口上的一個確定的位置.正如它的名字的意思一樣,它內部的數據用x和y兩個整數代表一個座標值.其數據成員是以public方式定義的,可以直接被其它對象訪問.wxPoint支持和另外一個wxPoint對象或者 wxSize對象進行加法和減法的運算.wxRealPoint對象和wxPoint對象類似,不過其內部成員是double類型,并且只支持和別的 wxRealPoint類型進行加減運算. 構造wxPoint實例的方法很直接: ```` wxPoint myPoint(50, 60); ``` wxRect wxRect通常在繪畫或者窗口類中使用(比如wxDC或者wxtreeCtrl),用來定義一個矩形區域.其內部的數據成員除了x和y 以外,還包括寬度和高度.所有的成員都是public類型,可以直接被其它的類訪問.除了同類型之間的加減運算,wxRect還支持一些其它運算: GetRight返回矩形最右邊的X座標. GetBottom返回底端的Y座標. GetSize返回一個wxSize對象用來表征矩形區域的寬度和高度. Inflate函數增加矩形區域的大小,如果只有一個參數,則長和寬增加一樣的大小,如果是兩個參數,則長和寬分別增加對應的大小. Inside函數判斷某個點是否位于矩形區域以內,點的格式可以是單獨的XY座標,也可以是一個wxPoint類型. Intersects判斷某個矩形是否和另外一個矩形有重疊區域. Offset將當前矩形偏移一段舉例,偏移的位置既可以通過X和Y單獨指定,也可以通過wxPoint來指定. 下面的代碼演示了wxRect的三種構造函數: ``` wxRect myRect1(50, 60, 100, 200); wxRect myRect2(wxPoint(50, 60), wxPoint(150, 260)); wxRect myRect3(wxPoint(50, 60), wxSize(100, 200)); ``` wxRegion wxRegion用來代表設備上下文或者窗口上的一個簡單的或者復雜的區域.它使用了引用記數,因此拷貝和賦值操作是非常快速的.它的主要用途是用來定義或者查詢某個需要裁剪或者更新的區域. Contains函數在其參數指定的座標, wxPoint, 矩形或 wxRect被包含在區域內時返回True. GetBox函數返回一個包含整個區域的wxRect對象. Intersect函數在指定的矩形,wxRect或wxRegion參數和本區域有重疊的時候返回True. Offset對區域進行指定x和y方向數量的平移. Subtract, Union和Xor函數提供了一種靈活的機制來改變當前區域.這三個函數的變體函數(函數名相同,參數不同)超過10個.所有這些函數都可以支持wxRegion參數或者wxPoint參數.請參考wxWidgets的相關手冊內容. 下面的代碼演示了四種創建區域的方法,所有這些方法創建的結果都是一樣的區域: ``` wxRegion myRegion1(50, 60, 100, 200); wxRegion myRegion2(wxPoint(50, 60), wxPoint(150, 260)); wxRect myRect(50, 60, 100, 200); wxRegion myRegion3(myRect); wxRegion myRegion4(myRegion1); ``` 你可以使用wxRegionIterator類來遍歷某個區域中的矩形區域,比如要在窗口重繪函數中只繪制那些需要繪制的矩形區域,你可以使用下面的代碼: ``` // 在窗口需要被重繪的時候調用 void MyWindow::OnPaint(wxPaintEvent& event) { wxPaintDC dc(this); wxRegionIterator upd(GetUpdateRegion()); while (upd) { wxRect rect(upd.GetRect()); // 刷新這個矩形區域 ...一些代碼... upd ++ ; } } ``` wxSize wxSize類型在wxWidgets廣泛用于指定窗口,控件,畫布等等對象的大小.很多需要返回大小信息的函數也將返回這個對象類型. GetHeight和GetWidth函數返回高度和寬度. SetHeight和SetWidth函數設置整數的高度和寬度. Set函數則使用兩個整數參數來同時改變高度和寬度. wxSize的創建也非常簡單,如下所示: ``` wxSize mySize(100, 200); ``` wxVariant wxVariant類用來表示那些可以是任意類型的數據.數據的類型甚至可以動態的改變.這種類型在解決某些特定的問題的時候很有用處,比如要編輯不同類型的數據的編輯器或者用于實現遠程過程調用. wxVariant類型可以存儲的數據包括bool, char, double, long, wxString, wxArrayString, wxList, wxDateTime, void* 和可變類型變量列表.不過,你還是可以通過實現wxVariantData的派生類的發生擴展wxVariant可以支持的數據類型.在構造和賦值的時候,只需要將其當成wxVariantData使用就可以了.當然,不方便的地方在于如果你要訪問自定義的數據類型,需要先將其轉換成 wxVariantData對象,而不象內置支持的類型那樣,有對應的類似于GetLong這樣的函數支持. 另外,要記住不是所有的類型都可以互相轉換,比如你不可能把一個bool型的數據轉換成wxDateTime類型,也不可能把一個整數轉換成wxArrayString,你需要按照一些常識來判斷哪些數據類型是可以互相轉換的,并且你總是可以通過GetType函數來得到當前數據最合適的類型.下面舉一個使用wxVariant類的簡單的例子: ``` wxVariant Var; // 存儲wxDateTime類型, 獲取wxString類型 Var = wxDateTime::Now(); wxString DateAsString = Var.GetString(); // 存儲一個wxString類型, 獲取一個double類型 Var = wxT("10.25"); double StringAsDouble = Var.GetDouble(); // 當前的類型應該是"string" wxString Type = Var.GetType(); // 下面演示一個無理取鬧的轉換 // 由于不能轉換,所以轉換的結果為0 char c = Var.GetChar(); ```
                  <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>

                              哎呀哎呀视频在线观看