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:
@@ -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
|
||||
|
@@ -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}
|
||||
|
||||
|
@@ -55,7 +55,7 @@ public:
|
||||
virtual void SetIcon(const wxIcon& icon);
|
||||
virtual void SetIcons(const wxIconBundle& icons );
|
||||
virtual void Restore();
|
||||
|
||||
|
||||
virtual void SetLayoutDirection(wxLayoutDirection dir);
|
||||
|
||||
#ifndef __WXWINCE__
|
||||
@@ -76,7 +76,7 @@ public:
|
||||
virtual bool SetTransparent(wxByte alpha);
|
||||
virtual bool CanSetTransparent();
|
||||
|
||||
|
||||
|
||||
// implementation from now on
|
||||
// --------------------------
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
@@ -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
|
||||
// ----------------------------------------------------------------------------
|
||||
|
Reference in New Issue
Block a user