Added wxWindowBase::CentreOnParent to allow top level windows to be

centered over their parent (if they have one) instead of the entire
screen.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2754 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
1999-06-10 22:44:50 +00:00
parent 7e2c43b855
commit 7631a29204
3 changed files with 61 additions and 3 deletions

View File

@@ -122,9 +122,15 @@ release the capture.
A synonym for \helpref{Centre}{wxwindowcentre}. A synonym for \helpref{Centre}{wxwindowcentre}.
\membersection{wxWindow::CenterOnParent}\label{wxwindowcenteronparent}
\func{void}{CenterOnParent}{\param{int}{ direction}}
A synonym for \helpref{CentreOnParent}{wxwindowcentreonparent}.
\membersection{wxWindow::Centre}\label{wxwindowcentre} \membersection{wxWindow::Centre}\label{wxwindowcentre}
\func{virtual void}{Centre}{\param{int}{ direction = wxHORIZONTAL}} \func{void}{Centre}{\param{int}{ direction = wxHORIZONTAL}}
Centres the window. Centres the window.
@@ -143,6 +149,28 @@ relative to the panel.
\helpref{wxWindow::Center}{wxwindowcenter} \helpref{wxWindow::Center}{wxwindowcenter}
\membersection{wxWindow::CentreOnParent}\label{wxwindowcentreonparent}
\func{void}{CentreOnParent}{\param{int}{ direction = wxHORIZONTAL}}
Centres the window.
\wxheading{Parameters}
\docparam{direction}{Specifies the direction for the centering. May be {\tt wxHORIZONTAL}, {\tt wxVERTICAL}\rtfsp
or {\tt wxBOTH}.}
\wxheading{Remarks}
This methods provides for a way to center top level windows over their
parents instead of the entire screen. If there is no parent or if the
window is not a top level window, then behaviour is the same as
\helpref{wxWindow::Centre}{wxwindowcentre}.
\wxheading{See also}
\helpref{wxWindow::CenterOnParent}{wxwindowcenteronparent}
\membersection{wxWindow::Clear}\label{wxwindowclear} \membersection{wxWindow::Clear}\label{wxwindowclear}
\func{void}{Clear}{\void} \func{void}{Clear}{\void}
@@ -717,7 +745,7 @@ Returns a pointer to the current validator for the window, or NULL if there is n
\constfunc{long}{GetWindowStyleFlag}{\void} \constfunc{long}{GetWindowStyleFlag}{\void}
Gets the window style that was passed to the consructor or {\bf Create} member. Gets the window style that was passed to the consructor or {\bf Create} member.
{\bf GetWindowStyle} is synonymous. {\bf GetWindowStyle} is synonymous.
\membersection{wxWindow::InitDialog}\label{wxwindowinitdialog} \membersection{wxWindow::InitDialog}\label{wxwindowinitdialog}
@@ -769,7 +797,7 @@ window).
\func{void}{Layout}{\void} \func{void}{Layout}{\void}
Invokes the constraint-based layout algorithm for this window. Invokes the constraint-based layout algorithm for this window.
See \helpref{wxWindow::SetAutoLayout}{wxwindowsetautolayout} on when See \helpref{wxWindow::SetAutoLayout}{wxwindowsetautolayout} on when
this function gets called automatically using auto layout. this function gets called automatically using auto layout.

View File

@@ -259,6 +259,8 @@ public:
// centre with respect to the the parent window // centre with respect to the the parent window
void Centre( int direction = wxHORIZONTAL ); void Centre( int direction = wxHORIZONTAL );
void Center( int direction = wxHORIZONTAL ) { Centre(direction); } void Center( int direction = wxHORIZONTAL ) { Centre(direction); }
void CentreOnParent(int direction = wxHORIZONTAL );
void CenterOnParent(int direction = wxHORIZONTAL ) { CentreOnParent(direction); }
// set window size to wrap around its children // set window size to wrap around its children
virtual void Fit(); virtual void Fit();

View File

@@ -316,6 +316,34 @@ void wxWindowBase::Centre(int direction)
Move(new_x, new_y); Move(new_x, new_y);
} }
// Center TopLevel windows over thier parent instead of the whole screen
void wxWindowBase::CentreOnParent(int direction)
{
wxPoint ppos;
wxSize psze;
wxSize wsze;
wxWindow* parent = GetParent();
int x, y;
if (!parent || !IsTopLevel()) {
Centre(direction);
return;
}
psze = parent->GetSize();
ppos = parent->ClientToScreen(wxPoint(0,0));
wsze = GetSize();
x = y = -1;
if (direction == wxBOTH || direction == wxHORIZONTAL)
x = ppos.x + (psze.x - wsze.x)/2;
if (direction == wxBOTH || direction == wxVERTICAL)
y = ppos.y + (psze.y - wsze.y)/2;
Move(x, y);
}
// fits the window around the children // fits the window around the children
void wxWindowBase::Fit() void wxWindowBase::Fit()
{ {