return the restored window size from GetSize() when window is minimized (for consistency with wxGTK and also for convenience)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@44443 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2007-02-11 00:21:06 +00:00
parent 1e93d59553
commit d43eb2a0d5
4 changed files with 86 additions and 7 deletions

View File

@@ -36,6 +36,7 @@ wxGTK:
wxMSW:
- Fixed infinite loop in wxThread::Wait() in console applications
- Return the restored window size from GetSize() when window is minimized
2.8.2

View File

@@ -869,9 +869,9 @@ a 2-element list {\tt (width, height)}.}
\constfunc{wxSize}{GetClientSize}{\void}
This gets the size of the window `client area' in pixels.
The client area is the area which may be drawn on by the programmer,
excluding title bar, border, scrollbars, etc.
Returns the size of the window `client area' in pixels. The client area is the
area which may be drawn on by the programmer, excluding title bar, border,
scrollbars, etc.
\wxheading{Parameters}
@@ -1246,8 +1246,11 @@ Returns the built-in scrollbar thumb size.
\constfunc{wxSize}{GetSize}{\void}
This gets the size of the entire window in pixels,
including title bar, border, scrollbars, etc.
Returns the size of the entire window in pixels, including title bar, border,
scrollbars, etc.
Note that if this window is a top-level one and it is currently minimized, the
returned size is the restored window size, not the size of the window icon.
\wxheading{Parameters}

View File

@@ -127,6 +127,12 @@ protected:
// common part of Iconize(), Maximize() and Restore()
void DoShowWindow(int nShowCmd);
// override those to return the normal window coordinates even when the
// window is minimized
virtual void DoGetPosition(int *x, int *y) const;
virtual void DoGetSize(int *width, int *height) const;
// is the window currently iconized?
bool m_iconized;

View File

@@ -780,6 +780,75 @@ void wxTopLevelWindowMSW::SetLayoutDirection(wxLayoutDirection dir)
wxTopLevelWindowBase::SetLayoutDirection(dir);
}
// ----------------------------------------------------------------------------
// wxTopLevelWindowMSW geometry
// ----------------------------------------------------------------------------
void wxTopLevelWindowMSW::DoGetPosition(int *x, int *y) const
{
if ( IsIconized() )
{
WINDOWPLACEMENT wp;
wp.length = sizeof(WINDOWPLACEMENT);
if ( ::GetWindowPlacement(GetHwnd(), &wp) )
{
RECT& rc = wp.rcNormalPosition;
// the position returned by GetWindowPlacement() is in workspace
// coordinates except for windows with WS_EX_TOOLWINDOW style
if ( !HasFlag(wxFRAME_TOOL_WINDOW) )
{
// we must use the correct display for the translation as the
// task bar might be shown on one display but not the other one
int n = wxDisplay::GetFromWindow(this);
wxDisplay dpy(n == wxNOT_FOUND ? 0 : n);
const wxPoint ptOfs = dpy.GetClientArea().GetPosition() -
dpy.GetGeometry().GetPosition();
rc.left += ptOfs.x;
rc.top += ptOfs.y;
}
if ( x )
*x = rc.left;
if ( y )
*y = rc.top;
return;
}
wxLogLastError(_T("GetWindowPlacement"));
}
//else: normal case
wxTopLevelWindowBase::DoGetPosition(x, y);
}
void wxTopLevelWindowMSW::DoGetSize(int *width, int *height) const
{
if ( IsIconized() )
{
WINDOWPLACEMENT wp;
wp.length = sizeof(WINDOWPLACEMENT);
if ( ::GetWindowPlacement(GetHwnd(), &wp) )
{
const RECT& rc = wp.rcNormalPosition;
if ( width )
*width = rc.right - rc.left;
if ( height )
*height = rc.bottom - rc.top;
return;
}
wxLogLastError(_T("GetWindowPlacement"));
}
//else: normal case
wxTopLevelWindowBase::DoGetSize(width, height);
}
// ----------------------------------------------------------------------------
// wxTopLevelWindowMSW fullscreen
// ----------------------------------------------------------------------------