<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之旅 廣告
                # 7.4 更多關于布局的話題 這一節里,我們將討論一些更深入的話題,在進行窗口布局的時候,你可以在腦子里考慮這些事情. 對話框單位 盡管布局控件可以讓基本控件的大小隨著平臺的不同語言的不同進行相應的改變,但是有些情況下,你還是需要手動指定控件的大小(比如在對話框中增加一個列表框的時候).如果你希望這些手動指定的大小也隨著平臺的不同字體的不同進行相應的變化,你應該使用對話框單位來代替象素單位.對話框單位是基于應用程序當前字體的字符寬度和高度所取的一個平均值的,因此總能很好的和當前的字體對應.wxWidgets也提供了相關的轉換函數包括: ConvertDialogToPixels,ConvertPixelsToDialog等,還包括一個宏wxDLG_UNIT(window, ptOrSz)用來直接將使用對話框單位wxPoint對象或者wxSize對象轉換為象素單位.所以你可以使用下面的代碼來指定那些你不得不指定的控件大小: ``` wxListBox* listBox = new wxListBox(parent, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(parent, wxSize(60, 20))); ``` 你也可以在XRC文件中使用對話框單位,只需要在相應的值前面增加一個"d"字符就可以了. 平臺自適應布局 盡管不同平臺的對話框的絕大部分都是相同的,但是在風格上確是存在著一些不同.比如在Windows和Linnx平臺上,右對齊或者居中放置的OK,Cancel和Help按鈕都是可以接受的,但是在Mac OsX上,Help按鈕通常位于左面,而Cancel和OK按鈕則通常依序位于右面. 要作到這種不同平臺上按鈕順序的自適應,你需要使用wxStdDialogButtonSizer布局控件,這個控件繼承自wxBoxSizer,因此使用方法并沒有太大的不同,只是它依照平臺的不同對某些按鈕進行特殊的排列. 這個布局控件的構造函數沒有參數,要增加按鈕可以使用兩種方法:傳遞按鈕指針給AddButton函數,或者(日過你沒有使用標準的標識符的話),使用SetAffirmativeButton, SetNegativeButton, and SetCancelButton來設置按鈕的特性.如果使用AddButton,那么按鈕應使用下面的這些標識符: wxID_OK, wxID_YES, wxID_CANCEL, wxID_NO, wxID_SAVE, wxID_APPLY, wxID_HELP和 wxID_CONTEXT_HELP. 然后,在所有的按鈕都增加到布局控件以后,調用Realize函數以便布局控件調整按鈕的順序,如下面的代碼所示: ``` wxBoxSizer* topSizer = new wxBoxSizer(wxVERTICAL); dialog->SetSizer(topSizer); wxButton* ok = new wxButton(dialog, wxID_OK); wxButton* cancel = new wxButton(dialog, wxID_CANCEL); wxButton* help = new wxButton(dialog, wxID_HELP); wxStdDialogButtonSizer* buttonSizer = new wxStdDialogButtonSizer; topSizer->Add(buttonSizer, 0, wxEXPAND|wxALL, 10); buttonSizer->AddButton(ok); buttonSizer->AddButton(cancel); buttonSizer->AddButton(help); buttonSizer->Realize(); ``` 或者作為一個更方便的手段,你可以使用wxDialog::CreateButtonSizer函數,它基于一些按鈕標記的列表來自動創建平臺自適應的按鈕,并將其放在一個布局控件中,如果你查看src/generic目錄中的對話框代碼的實現,你會發現大量的地方使用了 CreateButtonSizer函數.這個函數支持的按鈕標記如下表所示: | wxYES_NO | 增加YES和No按鈕各一個. | |:--- |:--- | | wxYES | 增加一個標識符為wxID_YES的Yes按鈕. | | wxNO | 增加一個標識符為wxID_NO的No按鈕. | | wxNO_DEFAULT | 讓No按鈕作為默認按鈕,否則Yes或OK按鈕將成為默認按鈕. | | wxOK | 增加一個標識符為wxID_OK的OK按鈕. | | wxCANCEL | 增加一個標識符為wxID_CANCEL的Cancel按鈕. | | wxAPPLY | 增加一個標識符為wxID_APPLY的Apply按鈕. | | wxHELP | 增加一個標識符為wxID_HELP的Help按鈕. | 使用CreateButtonSizer函數,上面例子中的代碼可以簡化為: ``` wxBoxSizer* topSizer = new wxBoxSizer(wxVERTICAL); dialog->SetSizer(topSizer); topSizer->Add(CreateButtonSizer(wxOK|wxCANCEL|wxHELP), 0, wxEXPAND|wxALL, 10); ``` 另外一種給不同的平臺指定不同布局的方法是在XRC文件中指定平臺屬性.其中的參數部分的值可以通過一個"|"符號加上unix, win,mac或者os2來指定特定平臺上的界面布局.在應用程序運行的時候,XRC文件將只會創建那些和當前運行平臺符合的控件.另外如果沒有使用 XRC的話,DialogBlocks程序還支持針對不同的平臺生成預置條件的C++代碼. 當然你也可以給不同的平臺指定不同的XRC文件,不過這樣作的話維護起來就有點不方便了. 動態布局 有時候你可能需要動態更改對話框的布局,比如你可以會增加一個"Detail"按鈕,當這個按鈕被按下的時候顯式更多的選項,當然你可以使用平常的辦法,調用wxWindow::Show函數來隱藏某個控件,不過wxSizer也提供了一個單獨的方法,你可以使用wxSizer:: Show函數并且傳遞False參數,以便告訴wxSizer不要計算其中的窗口的大小,當然調用這個函數以后,你需要調用wxSizer:: Layout函數來強制更新對應的窗口.
                  <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>

                              哎呀哎呀视频在线观看