⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tsizer.tex

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 TEX
📖 第 1 页 / 共 2 页
字号:
\begin{center}\myimage{sizer11.eps}\end{center}\subsection{Programming with wxBoxSizer}\label{boxsizerprogramming}The basic idea behind a \helpref{wxBoxSizer}{wxboxsizer} is that windows will most often be laid out in rathersimple basic geometry, typically in a row or a column or several hierarchies of either.As an example, we will construct a dialog that will contain a text field at the top andtwo buttons at the bottom. This can be seen as a top-hierarchy column with the text atthe top and buttons at the bottom and a low-hierarchy row with an OK button to the leftand a Cancel button to the right. In many cases (particularly dialogs under Unix andnormal frames) the main window will be resizable by the user and this change of sizewill have to get propagated to its children. In our case, we want the text area to growwith the dialog, whereas the button shall have a fixed size. In addition, there will bea thin border around all controls to make the dialog look nice and - to make matter worse -the buttons shall be centred as the width of the dialog changes.It is the unique feature of a box sizer, that it can grow in both directions (height andwidth) but can distribute its growth in the main direction (horizontal for a row) {\it unevenly} among its children. In our example case, the vertical sizer is supposed to propagate all itsheight changes to only the text area, not to the button area. This is determined by the {\it proportion} parameterwhen adding a window (or another sizer) to a sizer. It is interpretedas a weight factor, i.e. it can be zero, indicating that the window may not be resizedat all, or above zero. If several windows have a value above zero, the value is interpretedrelative to the sum of all weight factors of the sizer, so when adding two windows witha value of 1, they will both get resized equally much and each half as much as the sizerowning them. Then what do we do when a column sizer changes its width? This behaviour iscontrolled by {\it flags} (the second parameter of the Add() function): Zero or no flagindicates that the window will preserve it is original size, wxGROW flag (same as wxEXPAND)forces the window to grow with the sizer, and wxSHAPED flag tells the window to change it issize proportionally, preserving original aspect ratio.  When wxGROW flag is not used,the item can be aligned within available space.  wxALIGN\_LEFT, wxALIGN\_TOP, wxALIGN\_RIGHT,wxALIGN\_BOTTOM, wxALIGN\_CENTER\_HORIZONTAL and wxALIGN\_CENTER\_VERTICAL do what they say.wxALIGN\_CENTRE (same as wxALIGN\_CENTER) is defined as (wxALIGN\_CENTER\_HORIZONTAL |wxALIGN\_CENTER\_VERTICAL).  Default alignment is wxALIGN\_LEFT | wxALIGN\_TOP.As mentioned above, any window belonging to a sizer may have border, and it can be specifiedwhich of the four sides may have this border, using the wxTOP, wxLEFT, wxRIGHT and wxBOTTOMconstants or wxALL for all directions (and you may also use wxNORTH, wxWEST etc instead). Theseflags can be used in combination with the alignment flags above as the second parameter of theAdd() method using the binary or operator |. The sizer of the border also must be made known,and it is the third parameter in the Add() method. This means, that the entire behaviour ofa sizer and its children can be controlled by the three parameters of the Add() method.\begin{verbatim}// we want to get a dialog that is stretchable because it// has a text ctrl at the top and two buttons at the bottomMyDialog::MyDialog(wxFrame *parent, wxWindowID id, const wxString &title )        : wxDialog(parent, id, title, wxDefaultPosition, wxDefaultSize,                   wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER){  wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL );  // create text ctrl with minimal size 100x60  topsizer->Add(    new wxTextCtrl( this, -1, "My text.", wxDefaultPosition, wxSize(100,60), wxTE_MULTILINE),    1,            // make vertically stretchable    wxEXPAND |    // make horizontally stretchable    wxALL,        //   and make border all around    10 );         // set border width to 10  wxBoxSizer *button_sizer = new wxBoxSizer( wxHORIZONTAL );  button_sizer->Add(     new wxButton( this, wxID_OK, "OK" ),     0,           // make horizontally unstretchable     wxALL,       // make border all around (implicit top alignment)     10 );        // set border width to 10  button_sizer->Add(     new wxButton( this, wxID_CANCEL, "Cancel" ),     0,           // make horizontally unstretchable     wxALL,       // make border all around (implicit top alignment)     10 );        // set border width to 10  topsizer->Add(     button_sizer,     0,                // make vertically unstretchable     wxALIGN_CENTER ); // no border and centre horizontally  SetSizer( topsizer );      // use the sizer for layout  topsizer->SetSizeHints( this );   // set size hints to honour minimum size}\end{verbatim}Note that the new way of specifying flags to wxSizer is via \helpref{wxSizerFlags}{wxsizerflags}.  This class greatly eases the burden of passing flags to a wxSizer.Here's how you'd do the previous example with wxSizerFlags:\begin{verbatim}// we want to get a dialog that is stretchable because it// has a text ctrl at the top and two buttons at the bottomMyDialog::MyDialog(wxFrame *parent, wxWindowID id, const wxString &title )        : wxDialog(parent, id, title, wxDefaultPosition, wxDefaultSize,                   wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER){  wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL );  // create text ctrl with minimal size 100x60 that is horizontally and   // vertically stretchable with a border width of 10  topsizer->Add(    new wxTextCtrl( this, -1, "My text.", wxDefaultPosition, wxSize(100,60), wxTE_MULTILINE),    wxSizerFlags(1).Align().Expand().Border(wxALL, 10));  wxBoxSizer *button_sizer = new wxBoxSizer( wxHORIZONTAL );  //create two buttons that are horizontally unstretchable,   // with an all-around border with a width of 10 and implicit top alignment  button_sizer->Add(     new wxButton( this, wxID_OK, "OK" ),     wxSizerFlags(0).Align().Border(wxALL, 10));         button_sizer->Add(     new wxButton( this, wxID_CANCEL, "Cancel" ),     wxSizerFlags(0).Align().Border(wxALL, 10));      //create a sizer with no border and centered horizontally  topsizer->Add(     button_sizer,     wxSizerFlags(0).Center() );   SetSizer( topsizer );      // use the sizer for layout  topsizer->SetSizeHints( this );   // set size hints to honour minimum size}\end{verbatim}\subsection{Programming with wxGridSizer}\label{gridsizerprogramming}\helpref{wxGridSizer}{wxgridsizer} is a sizer which lays out its children in a two-dimensionaltable with all table fields having the same size,i.e. the width of each field is the width of the widest child,the height of each field is the height of the tallest child.\subsection{Programming with wxFlexGridSizer}\label{flexgridsizerprogramming}\helpref{wxFlexGridSizer}{wxflexgridsizer} is a sizer which lays out its children in a two-dimensionaltable with all table fields in one row having the sameheight and all fields in one column having the same width, but allrows or all columns are not necessarily the same height or width as inthe \helpref{wxGridSizer}{wxgridsizer}.\subsection{Programming with wxStaticBoxSizer}\label{staticboxsizerprogramming}\helpref{wxStaticBoxSizer}{wxstaticboxsizer} is a sizer derived from wxBoxSizer but adds a staticbox around the sizer. Note that this static box has to be created separately.\subsection{CreateButtonSizer}\label{createbuttonsizer}As a convenience, CreateButtonSizer ( long flags ) can be used to create a standard button sizerin which standard buttons are displayed. The following flags can be passed to this function:\begin{verbatim}    wxYES_NO // Add Yes/No subpanel    wxYES    // return wxID_YES    wxNO     // return wxID_NO    wxNO_DEFAULT // make the wxNO button the default, otherwise wxYES or wxOK button will be default        wxOK     // return wxID_OK    wxCANCEL // return wxID_CANCEL    wxHELP   // return wxID_HELP        wxFORWARD   // return wxID_FORWARD      wxBACKWARD  // return wxID_BACKWARD     wxSETUP     // return wxID_SETUP        wxMORE      // return wxID_MORE     \end{verbatim}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -