Use custom draw in wxMSW wxHeaderCtrl to support colours
Add a helper wxMSWImpl::CustomDraw class which will be reused in the other places too and, for now, use it just to implement support for custom colours in wxHeaderCtrl. Notice that the control took care of the custom font on its anyhow and that background colour is ignored when themes are enabled, so the net effect of this change is that now changing the header foreground colour works, while it was ignored before.
This commit is contained in:
@@ -12,6 +12,8 @@
|
||||
|
||||
class WXDLLIMPEXP_FWD_CORE wxImageList;
|
||||
|
||||
class wxMSWHeaderCtrlCustomDraw;
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxHeaderCtrl
|
||||
// ----------------------------------------------------------------------------
|
||||
@@ -45,7 +47,11 @@ public:
|
||||
|
||||
virtual ~wxHeaderCtrl();
|
||||
|
||||
|
||||
// Override to implement colours support via custom drawing.
|
||||
virtual bool SetBackgroundColour(const wxColour& colour) wxOVERRIDE;
|
||||
virtual bool SetForegroundColour(const wxColour& colour) wxOVERRIDE;
|
||||
virtual bool SetFont(const wxFont& font) wxOVERRIDE;
|
||||
|
||||
protected:
|
||||
// override wxWindow methods which must be implemented by a new control
|
||||
virtual wxSize DoGetBestSize() const;
|
||||
@@ -98,6 +104,10 @@ private:
|
||||
// mouse button
|
||||
wxEventType GetClickEventType(bool dblclk, int button);
|
||||
|
||||
// allocate m_customDraw if we need it or free it if it no longer is,
|
||||
// return the pointer which can be used to update it if it's non-null
|
||||
wxMSWHeaderCtrlCustomDraw* GetCustomDraw();
|
||||
|
||||
|
||||
// the number of columns in the control, including the hidden ones (not
|
||||
// taken into account by the native control, see comment in DoGetCount())
|
||||
@@ -129,6 +139,10 @@ private:
|
||||
// actual column we are dragging or -1 if not dragging anything
|
||||
int m_colBeingDragged;
|
||||
|
||||
// the custom draw helper: initially NULL, created on demand, use
|
||||
// GetCustomDraw() to do it
|
||||
wxMSWHeaderCtrlCustomDraw *m_customDraw;
|
||||
|
||||
wxDECLARE_NO_COPY_CLASS(wxHeaderCtrl);
|
||||
};
|
||||
|
||||
|
54
include/wx/msw/private/customdraw.h
Normal file
54
include/wx/msw/private/customdraw.h
Normal file
@@ -0,0 +1,54 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Name: wx/msw/private/customdraw.h
|
||||
// Purpose: Helper for implementing custom drawing support in wxMSW
|
||||
// Author: Vadim Zeitlin
|
||||
// Created: 2016-04-16
|
||||
// Copyright: (c) 2016 Vadim Zeitlin <vadim@wxwidgets.org>
|
||||
// Licence: wxWindows licence
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef _WX_MSW_CUSTOMDRAW_H_
|
||||
#define _WX_MSW_CUSTOMDRAW_H_
|
||||
|
||||
#include "wx/itemattr.h"
|
||||
|
||||
#include "wx/msw/wrapcctl.h"
|
||||
|
||||
namespace wxMSWImpl
|
||||
{
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// CustomDraw: inherit from this class and forward NM_CUSTOMDRAW to it
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
class CustomDraw
|
||||
{
|
||||
public:
|
||||
// Trivial default ctor needed for non-copyable class.
|
||||
CustomDraw()
|
||||
{
|
||||
}
|
||||
|
||||
// Implementation of NM_CUSTOMDRAW handler, returns one of CDRF_XXX
|
||||
// constants, possibly CDRF_DODEFAULT if custom drawing is not necessary.
|
||||
LPARAM HandleCustomDraw(LPARAM lParam);
|
||||
|
||||
private:
|
||||
// Return true if we need custom drawing at all.
|
||||
virtual bool HasCustomDrawnItems() const = 0;
|
||||
|
||||
// Return the attribute to use for the given item, can return NULL if this
|
||||
// item doesn't need to be custom-drawn.
|
||||
virtual const wxItemAttr* GetItemAttr(DWORD_PTR dwItemSpec) const = 0;
|
||||
|
||||
|
||||
// Set the colours and font for the specified HDC, return CDRF_NEWFONT if
|
||||
// the font was changed.
|
||||
LPARAM HandleItemPrepaint(const wxItemAttr& attr, HDC hdc);
|
||||
|
||||
wxDECLARE_NO_COPY_CLASS(CustomDraw);
|
||||
};
|
||||
|
||||
} // namespace wxMSWImpl
|
||||
|
||||
#endif // _WX_MSW_CUSTOMDRAW_H_
|
Reference in New Issue
Block a user