- // TODO:
-/*
- m_hDC = (WXHDC) ::CreateCompatibleDC((HDC) NULL);
- m_ok = (m_hDC != 0);
- m_bOwnsDC = TRUE;
-
- SetBrush(*wxWHITE_BRUSH);
- SetPen(*wxBLACK_PEN);
-
- // the background mode is only used for text background
- // and is set in DrawText() to OPAQUE as required, other-
- // wise always TRANSPARENT, RR
- ::SetBkMode( GetHdc(), TRANSPARENT );
-*/
-}
-
-wxMemoryDC::wxMemoryDC(wxDC *old_dc)
+ CreateCompatible(NULL);
+ Init();
+} // end of wxMemoryDC::wxMemoryDC
+
+wxMemoryDC::wxMemoryDC(
+ wxDC* pOldDC
+)
+{
+ pOldDC->BeginDrawing();
+ CreateCompatible(pOldDC);
+ pOldDC->EndDrawing();
+ Init();
+} // end of wxMemoryDC::wxMemoryDC
+
+void wxMemoryDC::Init()
+{
+ if (m_ok)
+ {
+ SetBrush(*wxWHITE_BRUSH);
+ SetPen(*wxBLACK_PEN);
+
+ // the background mode is only used for text background and is set in
+ // DrawText() to OPAQUE as required, otherwise always TRANSPARENT
+ ::GpiSetBackMix( GetHPS(), BM_LEAVEALONE );
+ }
+ memset(&m_vRclPaint, 0, sizeof(m_vRclPaint));
+} // end of wxMemoryDC::Init
+
+bool wxMemoryDC::CreateCompatible(
+ wxDC* pDC
+)
+{
+ HDC hDC;
+ HPS hPS;
+ DEVOPENSTRUC vDOP = {0L, "DISPLAY", NULL, 0L, 0L, 0L, 0L, 0L, 0L};
+ SIZEL vSize = {0, 0};
+
+ //
+ // Create a memory device context
+ //
+ hDC = ::DevOpenDC(vHabmain, OD_MEMORY, "*", 5L, (PDEVOPENDATA)&vDOP, NULLHANDLE);
+ if (hDC != DEV_ERROR)
+ {
+ hPS = ::GpiCreatePS(vHabmain, hDC, &vSize, PU_PELS | GPIT_MICRO | GPIA_ASSOC);
+ if (hPS != GPI_ERROR)
+ {
+ m_hPS = hPS;
+ m_hDC = hDC;
+ m_ok = TRUE;
+ m_bOwnsDC = TRUE;
+ //
+ // Set the wxWindows color table
+ //
+ ::GpiCreateLogColorTable( m_hPS
+ ,0L
+ ,LCOLF_CONSECRGB
+ ,0L
+ ,(LONG)wxTheColourDatabase->m_nSize
+ ,(PLONG)wxTheColourDatabase->m_palTable
+ );
+ ::GpiCreateLogColorTable( m_hPS
+ ,0L
+ ,LCOLF_RGB
+ ,0L
+ ,0L
+ ,NULL
+ );
+ }
+ else
+ {
+ m_hPS = NULLHANDLE;
+ m_hDC = NULLHANDLE;
+ m_ok = FALSE;
+ m_bOwnsDC = FALSE;
+ }
+ }
+ else
+ {
+ m_hPS = NULLHANDLE;
+ m_hDC = NULLHANDLE;
+ m_ok = FALSE;
+ m_bOwnsDC = FALSE;
+ }
+
+ //
+ // As we created the DC, we must delete it in the dtor
+ //
+ m_bOwnsDC = TRUE;
+ m_ok = m_hDC != 0;
+ return m_ok;
+} // end of wxMemoryDC::CreateCompatible
+
+void wxMemoryDC::SelectObject(
+ const wxBitmap& rBitmap
+)