the default value for the constraints is wxUnconstrained, not wxAsIs
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2711 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -20,24 +20,31 @@ constraints.
|
|||||||
\item {\bf centreY:} represents the vertical centre point of the window
|
\item {\bf centreY:} represents the vertical centre point of the window
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
Most constraints are initially set to have the relationship wxUnconstrained,
|
The constraints are initially set to have the relationship wxUnconstrained,
|
||||||
which means that their values should be calculated by looking at known constraints.
|
which means that their values should be calculated by looking at known constraints.
|
||||||
The exceptions are {\it width} and {\it height}, which are set to wxAsIs to
|
To calculate the position and size of the control, the layout algorithm needs to
|
||||||
ensure that if the user does not specify a constraint, the existing
|
know exactly 4 constraints (as it has 4 numbers to calculate from them), so you
|
||||||
width and height will be used, to be compatible with panel items which often
|
should always set exactly 4 of the constraints from the above table.
|
||||||
have take a default size. If the constraint is wxAsIs, the dimension will
|
|
||||||
not be changed.
|
|
||||||
|
|
||||||
To call the \helpref{wxWindow::Layout}{wxwindowlayout} function which evaluates
|
If you want the controls height or width to have the default value, you may use
|
||||||
constraints, you can either call wxWindow::SetAutoLayout to tell
|
a special value for the constraint: wxAsIs. If the constraint is wxAsIs, the
|
||||||
default OnSize handlers to call Layout, or override OnSize and call Layout yourself.
|
dimension will not be changed which is useful for the dialog controls which
|
||||||
|
often have the default size (e.g. the buttons whose size is determined by their
|
||||||
|
label).
|
||||||
|
|
||||||
|
The constrains calculation is done in \helpref{wxWindow::Layout}{wxwindowlayout}
|
||||||
|
function which evaluates constraints. To call it you can either call
|
||||||
|
wxWindow::SetAutoLayout to tell default OnSize handlers to call Layout
|
||||||
|
automatically whenever the window size changes, or override OnSize and call Layout
|
||||||
|
yourself.
|
||||||
|
|
||||||
\subsection{Constraint layout: more detail}
|
\subsection{Constraint layout: more detail}
|
||||||
|
|
||||||
By default, windows do not have a wxLayoutConstraints object. In this case, much layout
|
By default, windows do not have a wxLayoutConstraints object. In this case, much layout
|
||||||
must be done explicitly, by performing calculations in OnSize members, except
|
must be done explicitly, by performing calculations in OnSize members, except
|
||||||
for the case of frames that have one subwindow, where wxFrame::OnSize takes care
|
for the case of frames that have exactly one subwindow (not counting toolbar and
|
||||||
of resizing the child.
|
statusbar which are also positioned by the frame automatically), where wxFrame::OnSize
|
||||||
|
takes care of resizing the child to always fill the frame.
|
||||||
|
|
||||||
To avoid the need for these rather awkward calculations, the user can create
|
To avoid the need for these rather awkward calculations, the user can create
|
||||||
a wxLayoutConstraints object and associate it with a window with wxWindow::SetConstraints.
|
a wxLayoutConstraints object and associate it with a window with wxWindow::SetConstraints.
|
||||||
@@ -74,14 +81,21 @@ there are unknown edges or dimensions but there has been no change in this cycle
|
|||||||
It then sets all the window positions and sizes according to the values it has found.
|
It then sets all the window positions and sizes according to the values it has found.
|
||||||
|
|
||||||
Because the algorithm is iterative, the order in which constraints are considered is
|
Because the algorithm is iterative, the order in which constraints are considered is
|
||||||
irrelevant.
|
irrelevant, however you may reduce the number of iterations (and thus speed up
|
||||||
|
the layout calculations) by creating the controls in such order that as many
|
||||||
|
constraints as possible can be calculated during the first iteration. For example, if
|
||||||
|
you have 2 buttons which you'd like to position in the lower right corner, it is
|
||||||
|
slighty more efficient to first create the second button and specify that its
|
||||||
|
right border IsSameAs(parent, wxRight) and then create the first one by
|
||||||
|
specifying that it should be LeftOf() the second one than to do in a more
|
||||||
|
natural left-to-right order.
|
||||||
|
|
||||||
\subsection{Window layout examples}\label{layoutexamples}
|
\subsection{Window layout examples}\label{layoutexamples}
|
||||||
|
|
||||||
\subsubsection{Example 1: subwindow layout}
|
\subsubsection{Example 1: subwindow layout}
|
||||||
|
|
||||||
This example specifies a panel and a window side by side,
|
This example specifies a panel and a window side by side,
|
||||||
with a text subwindow below it.
|
with a text subwindow below it.
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
frame->panel = new wxPanel(frame, -1, wxPoint(0, 0), wxSize(1000, 500), 0);
|
frame->panel = new wxPanel(frame, -1, wxPoint(0, 0), wxSize(1000, 500), 0);
|
||||||
@@ -148,7 +162,7 @@ the remainder of the width. Margins of 5 pixels are used.
|
|||||||
|
|
||||||
wxTextCtrl *mtext = new wxTextCtrl(frame->panel, -1, "Multiline text", "Some text",
|
wxTextCtrl *mtext = new wxTextCtrl(frame->panel, -1, "Multiline text", "Some text",
|
||||||
wxPoint(-1, -1), wxSize(150, 100), wxTE_MULTILINE);
|
wxPoint(-1, -1), wxSize(150, 100), wxTE_MULTILINE);
|
||||||
|
|
||||||
wxLayoutConstraints *b3 = new wxLayoutConstraints;
|
wxLayoutConstraints *b3 = new wxLayoutConstraints;
|
||||||
b3->top.Below (btn1, 5);
|
b3->top.Below (btn1, 5);
|
||||||
b3->left.RightOf (list, 5);
|
b3->left.RightOf (list, 5);
|
||||||
|
Reference in New Issue
Block a user