ddc8faa9e1
This fixes a long standing problem with 2 wxPaintDC created one after another (and not with nested lifetimes, which was handled by the caching mechanism previously used) not working correctly. And as this was exactly what happened when handling wxEVT_PAINT for wxScrolled, it also fixes drawing artefacts when using scrolled windows. Closes #14757. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72938 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
110 lines
2.9 KiB
C++
110 lines
2.9 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: wx/msw/dcclient.h
|
|
// Purpose: wxClientDC class
|
|
// Author: Julian Smart
|
|
// Modified by:
|
|
// Created: 01/02/97
|
|
// RCS-ID: $Id$
|
|
// Copyright: (c) Julian Smart
|
|
// Licence: wxWindows licence
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef _WX_DCCLIENT_H_
|
|
#define _WX_DCCLIENT_H_
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// headers
|
|
// ----------------------------------------------------------------------------
|
|
|
|
#include "wx/dc.h"
|
|
#include "wx/msw/dc.h"
|
|
#include "wx/dcclient.h"
|
|
|
|
class wxPaintDCInfo;
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// DC classes
|
|
// ----------------------------------------------------------------------------
|
|
|
|
class WXDLLIMPEXP_CORE wxWindowDCImpl : public wxMSWDCImpl
|
|
{
|
|
public:
|
|
// default ctor
|
|
wxWindowDCImpl( wxDC *owner );
|
|
|
|
// Create a DC corresponding to the whole window
|
|
wxWindowDCImpl( wxDC *owner, wxWindow *win );
|
|
|
|
virtual void DoGetSize(int *width, int *height) const;
|
|
|
|
protected:
|
|
// initialize the newly created DC
|
|
void InitDC();
|
|
|
|
DECLARE_CLASS(wxWindowDCImpl)
|
|
wxDECLARE_NO_COPY_CLASS(wxWindowDCImpl);
|
|
};
|
|
|
|
class WXDLLIMPEXP_CORE wxClientDCImpl : public wxWindowDCImpl
|
|
{
|
|
public:
|
|
// default ctor
|
|
wxClientDCImpl( wxDC *owner );
|
|
|
|
// Create a DC corresponding to the client area of the window
|
|
wxClientDCImpl( wxDC *owner, wxWindow *win );
|
|
|
|
virtual ~wxClientDCImpl();
|
|
|
|
virtual void DoGetSize(int *width, int *height) const;
|
|
|
|
protected:
|
|
void InitDC();
|
|
|
|
DECLARE_CLASS(wxClientDCImpl)
|
|
wxDECLARE_NO_COPY_CLASS(wxClientDCImpl);
|
|
};
|
|
|
|
class WXDLLIMPEXP_CORE wxPaintDCImpl : public wxClientDCImpl
|
|
{
|
|
public:
|
|
wxPaintDCImpl( wxDC *owner );
|
|
|
|
// Create a DC corresponding for painting the window in OnPaint()
|
|
wxPaintDCImpl( wxDC *owner, wxWindow *win );
|
|
|
|
virtual ~wxPaintDCImpl();
|
|
|
|
// find the entry for this DC in the cache (keyed by the window)
|
|
static WXHDC FindDCInCache(wxWindow* win);
|
|
|
|
// This must be called by the code handling WM_PAINT to remove the DC
|
|
// cached for this window for the duration of this message processing.
|
|
static void EndPaint(wxWindow *win);
|
|
|
|
protected:
|
|
// Find the DC for this window in the cache, return NULL if not found.
|
|
static wxPaintDCInfo *FindInCache(wxWindow* win);
|
|
|
|
DECLARE_CLASS(wxPaintDCImpl)
|
|
wxDECLARE_NO_COPY_CLASS(wxPaintDCImpl);
|
|
};
|
|
|
|
/*
|
|
* wxPaintDCEx
|
|
* This class is used when an application sends an HDC with the WM_PAINT
|
|
* message. It is used in HandlePaint and need not be used by an application.
|
|
*/
|
|
|
|
class WXDLLIMPEXP_CORE wxPaintDCEx : public wxPaintDC
|
|
{
|
|
public:
|
|
wxPaintDCEx(wxWindow *canvas, WXHDC dc);
|
|
|
|
DECLARE_CLASS(wxPaintDCEx)
|
|
wxDECLARE_NO_COPY_CLASS(wxPaintDCEx);
|
|
};
|
|
|
|
#endif
|
|
// _WX_DCCLIENT_H_
|