X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1e6feb95a79834836e88143b15d9f424ebe79621..fb5230de7413f1ac4aa026e8b7b492629c005f08:/src/msw/dcclient.cpp diff --git a/src/msw/dcclient.cpp b/src/msw/dcclient.cpp index 440e8290b9..687253ddc8 100644 --- a/src/msw/dcclient.cpp +++ b/src/msw/dcclient.cpp @@ -113,6 +113,18 @@ void wxWindowDC::InitDC() // default bg colour is pne of the window SetBackground(wxBrush(m_canvas->GetBackgroundColour(), wxSOLID)); + + // since we are a window dc we need to grab the palette from the window +#if wxUSE_PALETTE + InitializePalette(); +#endif +} + +void wxWindowDC::DoGetSize(int *width, int *height) const +{ + wxCHECK_RET( m_canvas, _T("wxWindowDC without a window?") ); + + m_canvas->GetSize(width, height); } // ---------------------------------------------------------------------------- @@ -160,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 // ---------------------------------------------------------------------------- @@ -212,11 +231,14 @@ wxPaintDC::wxPaintDC(wxWindow *canvas) else // not in cache, create a new one { m_hDC = (WXHDC)::BeginPaint(GetHwndOf(m_canvas), &g_paintStruct); - ms_cache.Add(new wxPaintDCInfo(m_canvas, this)); + if (m_hDC) + ms_cache.Add(new wxPaintDCInfo(m_canvas, this)); } - // (re)set the DC parameters - InitDC(); + // (re)set the DC parameters. + // Note: at this point m_hDC can be NULL under MicroWindows, when dragging. + if (GetHDC()) + InitDC(); } wxPaintDC::~wxPaintDC() @@ -234,7 +256,7 @@ wxPaintDC::~wxPaintDC() { ::EndPaint(GetHwndOf(m_canvas), &g_paintStruct); - ms_cache.Remove(index); + ms_cache.RemoveAt(index); // Reduce the number of bogus reports of non-freed memory // at app exit @@ -254,9 +276,10 @@ wxPaintDCInfo *wxPaintDC::FindInCache(size_t *index) const size_t nCache = ms_cache.GetCount(); for ( size_t n = 0; n < nCache; n++ ) { - info = &ms_cache[n]; - if ( info->hwnd == m_canvas->GetHWND() ) + wxPaintDCInfo *info1 = &ms_cache[n]; + if ( info1->hwnd == m_canvas->GetHWND() ) { + info = info1; if ( index ) *index = n; break;