wxDC *GetSelectedInto() const;
#endif // __WXDEBUG__
- // Creates a bitmap that matches the device context's depth, from an
- // arbitray bitmap. At present, the original bitmap must have an associated
- // palette. (TODO: use a default palette if no palette exists.) This
- // function is necessary for you to Blit an arbitrary bitmap (which may
- // have the wrong depth). wxDC::SelectObject will compare the depth of the
- // bitmap with the DC's depth, and create a new bitmap if the depths
- // differ. Eventually we should perhaps make this a public API function so
- // that an app can efficiently produce bitmaps of the correct depth. The
- // Windows solution is to use SetDibBits to blit an arbotrary DIB directly
- // to a DC, but this is too Windows-specific, hence this solution of
- // quietly converting the wxBitmap. Contributed by Frederic Villeneuve
- // <frederic.villeneuve@natinst.com>
- wxBitmap GetBitmapForDC(wxDC& dc) const;
-
protected:
// common part of all ctors
void Init();
// wxFreeDIB), from dib.cpp and from dataobj.cpp - surely there is some
// redundancy between them? (FIXME)
-// defined in bitmap.cpp
-extern bool wxCreateDIB(long xSize, long ySize, long bitsPerPixel,
- HPALETTE hPal, LPBITMAPINFO* lpDIBHeader);
-extern void wxFreeDIB(LPBITMAPINFO lpDIBHeader);
-
// defined in ole/dataobj.cpp
extern WXDLLEXPORT size_t wxConvertBitmapToDIB(LPBITMAPINFO pbi, const wxBitmap& bitmap);
extern WXDLLEXPORT wxBitmap wxConvertDIBToBitmap(const LPBITMAPINFO pbi);
return TRUE;
}
-// ----------------------------------------------------------------------------
-// TODO: to be replaced by something better
-// ----------------------------------------------------------------------------
-
-// Creates a bitmap that matches the device context, from
-// an arbitray bitmap. At present, the original bitmap must have an
-// associated palette. TODO: use a default palette if no palette exists.
-// Contributed by Frederic Villeneuve <frederic.villeneuve@natinst.com>
-wxBitmap wxBitmap::GetBitmapForDC(wxDC& dc) const
-{
-#ifdef __WXMICROWIN__
- return *this;
-#else
- wxMemoryDC memDC;
- wxBitmap tmpBitmap(GetWidth(), GetHeight(), dc.GetDepth());
- HPALETTE hPal = (HPALETTE) NULL;
- LPBITMAPINFO lpDib;
- void *lpBits = (void*) NULL;
-
-#if wxUSE_PALETTE
- if( GetPalette() && GetPalette()->Ok() )
- {
- tmpBitmap.SetPalette(*GetPalette());
- memDC.SelectObject(tmpBitmap);
- memDC.SetPalette(*GetPalette());
- hPal = (HPALETTE)GetPalette()->GetHPALETTE();
- }
- else
- {
- hPal = (HPALETTE) ::GetStockObject(DEFAULT_PALETTE);
- wxPalette palette;
- palette.SetHPALETTE( (WXHPALETTE)hPal );
- tmpBitmap.SetPalette( palette );
- memDC.SelectObject(tmpBitmap);
- memDC.SetPalette( palette );
- }
-#else // !wxUSE_PALETTE
- hPal = (HPALETTE) ::GetStockObject(DEFAULT_PALETTE);
-#endif // wxUSE_PALETTE/!wxUSE_PALETTE
-
- // set the height negative because in a DIB the order of the lines is
- // reversed
- if ( !wxCreateDIB(GetWidth(), -GetHeight(), GetDepth(), hPal, &lpDib) )
- {
- return wxNullBitmap;
- }
-
- lpBits = malloc(lpDib->bmiHeader.biSizeImage);
-
- ::GetBitmapBits(GetHbitmap(), lpDib->bmiHeader.biSizeImage, lpBits);
-
- ::SetDIBitsToDevice(GetHdcOf(memDC), 0, 0,
- GetWidth(), GetHeight(),
- 0, 0, 0, GetHeight(),
- lpBits, lpDib, DIB_RGB_COLORS);
-
- free(lpBits);
-
- wxFreeDIB(lpDib);
-
- return tmpBitmap;
-#endif
-}
-
// ----------------------------------------------------------------------------
// wxMask
// ----------------------------------------------------------------------------