Add wxPanel::SetBackgroundBitmap().
This method provides a simple way to set a background bitmap without defining an EVT_ERASE_BACKGROUND handler and, more importantly, one that works correctly in wxMSW for a window with children as it paints the background of transparent children too. Add a test of this method to the erase sample. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67253 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -12,6 +12,8 @@
|
||||
#ifndef _WX_GENERIC_PANELG_H_
|
||||
#define _WX_GENERIC_PANELG_H_
|
||||
|
||||
#include "wx/bitmap.h"
|
||||
|
||||
class WXDLLIMPEXP_CORE wxPanel : public wxPanelBase
|
||||
{
|
||||
public:
|
||||
@@ -40,7 +42,18 @@ public:
|
||||
)
|
||||
#endif // WXWIN_COMPATIBILITY_2_8
|
||||
|
||||
protected:
|
||||
virtual void DoSetBackgroundBitmap(const wxBitmap& bmp);
|
||||
|
||||
private:
|
||||
// Event handler for erasing the background which is only used when we have
|
||||
// a valid background bitmap.
|
||||
void OnEraseBackground(wxEraseEvent& event);
|
||||
|
||||
|
||||
// The bitmap used for painting the background if valid.
|
||||
wxBitmap m_bitmapBg;
|
||||
|
||||
wxDECLARE_DYNAMIC_CLASS_NO_COPY(wxPanel);
|
||||
};
|
||||
|
||||
|
@@ -11,6 +11,8 @@
|
||||
#ifndef _WX_MSW_PANEL_H_
|
||||
#define _WX_MSW_PANEL_H_
|
||||
|
||||
class WXDLLIMPEXP_FWD_CORE wxBrush;
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxPanel
|
||||
// ----------------------------------------------------------------------------
|
||||
@@ -18,7 +20,7 @@
|
||||
class WXDLLIMPEXP_CORE wxPanel : public wxPanelBase
|
||||
{
|
||||
public:
|
||||
wxPanel() { }
|
||||
wxPanel() { Init(); }
|
||||
|
||||
wxPanel(wxWindow *parent,
|
||||
wxWindowID winid = wxID_ANY,
|
||||
@@ -27,6 +29,8 @@ public:
|
||||
long style = wxTAB_TRAVERSAL | wxNO_BORDER,
|
||||
const wxString& name = wxPanelNameStr)
|
||||
{
|
||||
Init();
|
||||
|
||||
Create(parent, winid, pos, size, style, name);
|
||||
}
|
||||
|
||||
@@ -48,7 +52,18 @@ public:
|
||||
)
|
||||
#endif // WXWIN_COMPATIBILITY_2_8
|
||||
|
||||
protected:
|
||||
void Init()
|
||||
{
|
||||
m_backgroundBrush = NULL;
|
||||
}
|
||||
|
||||
virtual void DoSetBackgroundBitmap(const wxBitmap& bmp);
|
||||
virtual WXHBRUSH MSWGetCustomBgBrush();
|
||||
|
||||
private:
|
||||
wxBrush *m_backgroundBrush;
|
||||
|
||||
wxDECLARE_DYNAMIC_CLASS_NO_COPY(wxPanel);
|
||||
};
|
||||
|
||||
|
@@ -52,6 +52,18 @@ public:
|
||||
const wxString& name = wxPanelNameStr);
|
||||
|
||||
|
||||
// Use the given bitmap to tile the background of this panel. This bitmap
|
||||
// will show through any transparent children.
|
||||
//
|
||||
// Notice that you must not prevent the base class EVT_ERASE_BACKGROUND
|
||||
// handler from running (i.e. not to handle this event yourself) for this
|
||||
// to work.
|
||||
void SetBackgroundBitmap(const wxBitmap& bmp)
|
||||
{
|
||||
DoSetBackgroundBitmap(bmp);
|
||||
}
|
||||
|
||||
|
||||
// implementation from now on
|
||||
// --------------------------
|
||||
|
||||
@@ -59,6 +71,9 @@ public:
|
||||
|
||||
WX_DECLARE_CONTROL_CONTAINER();
|
||||
|
||||
protected:
|
||||
virtual void DoSetBackgroundBitmap(const wxBitmap& bmp) = 0;
|
||||
|
||||
private:
|
||||
wxDECLARE_EVENT_TABLE();
|
||||
|
||||
@@ -70,6 +85,7 @@ private:
|
||||
#elif defined(__WXMSW__)
|
||||
#include "wx/msw/panel.h"
|
||||
#else
|
||||
#define wxHAS_GENERIC_PANEL
|
||||
#include "wx/generic/panelg.h"
|
||||
#endif
|
||||
|
||||
|
@@ -44,6 +44,13 @@ public:
|
||||
)
|
||||
#endif // WXWIN_COMPATIBILITY_2_8
|
||||
|
||||
protected:
|
||||
virtual void DoSetBackgroundBitmap(const wxBitmap& bmp)
|
||||
{
|
||||
// We have support for background bitmap even at the base class level.
|
||||
SetBackground(bmp, wxALIGN_NOT, wxTILE);
|
||||
}
|
||||
|
||||
private:
|
||||
wxDECLARE_DYNAMIC_CLASS_NO_COPY(wxPanel);
|
||||
};
|
||||
|
Reference in New Issue
Block a user