Fix for wxMemoryDC::GetAsBitmap() not working on Windows.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@48235 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Kevin Ollivier 2007-08-20 23:26:35 +00:00
parent 278d7ab446
commit 18f2ae4965
3 changed files with 19 additions and 7 deletions

View File

@ -118,6 +118,10 @@ public:
// get the given part of bitmap
wxBitmap GetSubBitmap( const wxRect& rect ) const;
// NB: This should not be called from user code. It is for wx internal
// use only.
wxBitmap GetSubBitmapOfHDC( const wxRect& rect, WXHDC hdc ) const;
// copies the contents and mask of the given (colour) icon to the bitmap
bool CopyFromIcon(const wxIcon& icon,
wxBitmapTransparency transp = wxBitmapTransparency_Auto);

View File

@ -28,6 +28,9 @@ protected:
virtual void DoGetSize(int* width, int* height) const;
virtual void DoSelect(const wxBitmap& bitmap);
virtual wxBitmap DoGetAsBitmap(const wxRect* subrect) const
{ return subrect == NULL ? GetSelectedBitmap() : GetSelectedBitmap().GetSubBitmapOfHDC(*subrect, GetHDC() );}
// create DC compatible with the given one or screen if dc == NULL
bool CreateCompatible(wxDC *dc);

View File

@ -1089,8 +1089,14 @@ bool wxBitmap::SaveFile(const wxString& filename,
// ----------------------------------------------------------------------------
// sub bitmap extraction
// ----------------------------------------------------------------------------
wxBitmap wxBitmap::GetSubBitmap( const wxRect& rect ) const
{
MemoryHDC dcSrc;
SelectInHDC selectSrc(dcSrc, GetHbitmap());
return GetSubBitmapOfHDC( rect, (WXHDC)dcSrc );
}
wxBitmap wxBitmap::GetSubBitmap( const wxRect& rect) const
wxBitmap wxBitmap::GetSubBitmapOfHDC( const wxRect& rect, WXHDC hdc ) const
{
wxCHECK_MSG( Ok() &&
(rect.x >= 0) && (rect.y >= 0) &&
@ -1111,16 +1117,15 @@ wxBitmap wxBitmap::GetSubBitmap( const wxRect& rect) const
dcDst;
{
SelectInHDC selectSrc(dcSrc, GetHbitmap()),
selectDst(dcDst, GetHbitmapOf(ret));
if ( !selectSrc || !selectDst )
SelectInHDC selectDst(dcDst, GetHbitmapOf(ret));
if ( !selectDst )
{
wxLogLastError(_T("SelectObjct(hBitmap)"));
wxLogLastError(_T("SelectObject(destBitmap)"));
}
if ( !::BitBlt(dcDst, 0, 0, rect.width, rect.height,
dcSrc, rect.x, rect.y, SRCCOPY) )
(HDC)hdc, rect.x, rect.y, SRCCOPY) )
{
wxLogLastError(_T("BitBlt"));
}