void wxMemoryDC::DoSelect( const wxBitmap& bitmap) { // select old bitmap out of the device context if ( m_oldBitmap ) { ::SelectObject(GetHdc(), (HBITMAP) m_oldBitmap); if ( m_selectedBitmap.Ok() ) { #ifdef __WXDEBUG__ m_selectedBitmap.SetSelectedInto(NULL); #endif m_selectedBitmap = wxNullBitmap; } } // check for whether the bitmap is already selected into a device context #ifdef __WXDEBUG__ wxASSERT_MSG( !bitmap.GetSelectedInto() || (bitmap.GetSelectedInto() == this), wxT("Bitmap is selected in another wxMemoryDC, delete the first wxMemoryDC or use SelectObject(NULL)") ); #endif m_selectedBitmap = bitmap; WXHBITMAP hBmp = m_selectedBitmap.GetHBITMAP(); if ( !hBmp ) return; #ifdef __WXDEBUG__ m_selectedBitmap.SetSelectedInto(this); #endif hBmp = (WXHBITMAP)::SelectObject(GetHdc(), (HBITMAP)hBmp); if ( !hBmp ) { wxLogLastError(wxT("SelectObject(memDC, bitmap)")); wxFAIL_MSG(wxT("Couldn't select a bitmap into wxMemoryDC")); } else if ( !m_oldBitmap ) { m_oldBitmap = hBmp; } }
void wxMemoryDCImpl::DoSelect( const wxBitmap& rBitmap ) { // // Select old bitmap out of the device context // if (m_hOldBitmap) { ::GpiSetBitmap(m_hPS, NULLHANDLE); if (m_vSelectedBitmap.IsOk()) { m_vSelectedBitmap.SetSelectedInto(NULL); m_vSelectedBitmap = wxNullBitmap; } } // // Check for whether the bitmap is already selected into a device context // wxCHECK_RET( !rBitmap.GetSelectedInto() || (rBitmap.GetSelectedInto() == GetOwner()), wxT("Bitmap is selected in another wxMemoryDC, delete the first wxMemoryDC or use SelectObject(NULL)") ); WXHBITMAP hBmp = rBitmap.GetHBITMAP(); if (!hBmp) { // // Bmps drawn to are upside down, so flip it before committing // POINTL vPoint[4] = { {0, m_vSelectedBitmap.GetHeight()} ,{m_vSelectedBitmap.GetWidth(), 0} ,{0, 0} ,{m_vSelectedBitmap.GetWidth(), m_vSelectedBitmap.GetHeight()} }; ::GpiBitBlt( m_hPS ,m_hPS ,4 ,vPoint ,ROP_SRCCOPY ,BBO_IGNORE ); m_vSelectedBitmap.SetSelectedInto(NULL); } m_vSelectedBitmap = rBitmap; if (!hBmp) { m_hOldBitmap = (WXHBITMAP)::GpiSetBitmap(m_hPS, NULLHANDLE); return; } m_vSelectedBitmap.SetSelectedInto(GetOwner()); m_hOldBitmap = (WXHBITMAP)::GpiSetBitmap(m_hPS, (HBITMAP)hBmp); if (m_hOldBitmap == HBM_ERROR) { wxLogLastError(wxT("SelectObject(memDC, bitmap)")); wxFAIL_MSG(wxT("Couldn't select a bitmap into wxMemoryDC")); } } // end of wxMemoryDC::SelectObject