implemented wxWindowDC and wxClientDC::GetSize() properly (fixes bug #503022)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14372 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2002-02-23 21:32:45 +00:00
parent 745e6cb915
commit 994a3786b9
4 changed files with 45 additions and 2 deletions

View File

@ -123,6 +123,7 @@ wxMSW:
- showing a dialog from EVT_RADIOBUTTON handler doesn't lead to an infinite
recursion any more
- wxTextCtrl with wxTE_RICH flag scrolls to the end when text is appended to it
- wxWindowDC and wxClientDC::GetSize() works correctly now
wxGTK:

View File

@ -49,6 +49,9 @@ protected:
// intiialize the newly created DC
void InitDC();
// override some base class virtuals
virtual void DoGetSize(int *width, int *height) const;
private:
DECLARE_DYNAMIC_CLASS(wxWindowDC)
};
@ -67,6 +70,9 @@ public:
protected:
void InitDC();
// override some base class virtuals
virtual void DoGetSize(int *width, int *height) const;
private:
DECLARE_DYNAMIC_CLASS(wxClientDC)
};

View File

@ -1923,8 +1923,30 @@ void wxDC::DoGetSizeMM(int *w, int *h) const
if (!GetHDC()) return;
#endif
if ( w ) *w = ::GetDeviceCaps(GetHdc(), HORZSIZE);
if ( h ) *h = ::GetDeviceCaps(GetHdc(), VERTSIZE);
// if we implement it in terms of DoGetSize() instead of directly using the
// results returned by GetDeviceCaps(HORZ/VERTSIZE) as was done before, it
// will also work for wxWindowDC and wxClientDC even though their size is
// not the same as the total size of the screen
int wPixels, hPixels;
DoGetSize(&wPixels, &hPixels);
if ( w )
{
int wTotal = ::GetDeviceCaps(GetHdc(), HORZRES);
wxCHECK_RET( wTotal, _T("0 width device?") );
*w = (wPixels * ::GetDeviceCaps(GetHdc(), HORZSIZE)) / wTotal;
}
if ( h )
{
int hTotal = ::GetDeviceCaps(GetHdc(), VERTRES);
wxCHECK_RET( hTotal, _T("0 height device?") );
*h = (hPixels * ::GetDeviceCaps(GetHdc(), VERTSIZE)) / hTotal;
}
}
wxSize wxDC::GetPPI() const

View File

@ -120,6 +120,13 @@ void wxWindowDC::InitDC()
#endif
}
void wxWindowDC::DoGetSize(int *width, int *height) const
{
wxCHECK_RET( m_canvas, _T("wxWindowDC without a window?") );
m_canvas->GetSize(width, height);
}
// ----------------------------------------------------------------------------
// wxClientDC
// ----------------------------------------------------------------------------
@ -165,6 +172,13 @@ wxClientDC::~wxClientDC()
{
}
void wxClientDC::DoGetSize(int *width, int *height) const
{
wxCHECK_RET( m_canvas, _T("wxClientDC without a window?") );
m_canvas->GetClientSize(width, height);
}
// ----------------------------------------------------------------------------
// wxPaintDC
// ----------------------------------------------------------------------------