Remove the test which prevented the generation of erase background events from
wxMSW::wxWindow::HandleEraseBkgnd(). Although it is true that native controls
mostly erase background on their own, there are exceptions: we must erase the
background of wxToolBar ourselves, for example. More importantly, there is no
reason to prevent the user code from defining wxEVT_ERASE_BACKGROUND handlers
for the native controls as this works just fine under MSW (although it doesn't
under GTK nor probably other ports...). So also add a test erase background
handler to the toolbar sample to verify that this does work.
Closes #11514.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62805
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
void OnToolbarStyle(wxCommandEvent& event);
void OnToolbarBgCol(wxCommandEvent& event);
void OnToolbarStyle(wxCommandEvent& event);
void OnToolbarBgCol(wxCommandEvent& event);
+ void OnToolbarCustomBg(wxCommandEvent& event);
void OnToolbarCustomBitmap(wxCommandEvent& event);
void OnToolLeftClick(wxCommandEvent& event);
void OnToolbarCustomBitmap(wxCommandEvent& event);
void OnToolLeftClick(wxCommandEvent& event);
{ event.Enable( m_tbar != NULL ); }
private:
{ event.Enable( m_tbar != NULL ); }
private:
+ void OnEraseToolBarBackground(wxEraseEvent& event);
+
void DoEnablePrint();
void DoDeletePrint();
void DoToggleHelp();
void DoEnablePrint();
void DoDeletePrint();
void DoToggleHelp();
IDM_TOOLBAR_SHOW_ICONS,
IDM_TOOLBAR_SHOW_BOTH,
IDM_TOOLBAR_BG_COL,
IDM_TOOLBAR_SHOW_ICONS,
IDM_TOOLBAR_SHOW_BOTH,
IDM_TOOLBAR_BG_COL,
IDM_TOOLBAR_CUSTOM_PATH,
IDM_TOOLBAR_TOP_ORIENTATION,
IDM_TOOLBAR_LEFT_ORIENTATION,
IDM_TOOLBAR_CUSTOM_PATH,
IDM_TOOLBAR_TOP_ORIENTATION,
IDM_TOOLBAR_LEFT_ORIENTATION,
EVT_MENU_RANGE(IDM_TOOLBAR_SHOW_TEXT, IDM_TOOLBAR_SHOW_BOTH,
MyFrame::OnToolbarStyle)
EVT_MENU(IDM_TOOLBAR_BG_COL, MyFrame::OnToolbarBgCol)
EVT_MENU_RANGE(IDM_TOOLBAR_SHOW_TEXT, IDM_TOOLBAR_SHOW_BOTH,
MyFrame::OnToolbarStyle)
EVT_MENU(IDM_TOOLBAR_BG_COL, MyFrame::OnToolbarBgCol)
+ EVT_MENU(IDM_TOOLBAR_CUSTOM_BG, MyFrame::OnToolbarCustomBg)
EVT_MENU(IDM_TOOLBAR_CUSTOM_PATH, MyFrame::OnToolbarCustomBitmap)
EVT_MENU(IDM_TOOLBAR_CUSTOM_PATH, MyFrame::OnToolbarCustomBitmap)
toolBar = CreateToolBar(style, ID_TOOLBAR);
#endif
toolBar = CreateToolBar(style, ID_TOOLBAR);
#endif
+ if ( GetMenuBar()->IsChecked(IDM_TOOLBAR_CUSTOM_BG) )
+ {
+ toolBar->Connect
+ (
+ wxEVT_ERASE_BACKGROUND,
+ wxEraseEventHandler(MyFrame::OnEraseToolBarBackground),
+ NULL,
+ this
+ );
+ }
+
PopulateToolbar(toolBar);
}
PopulateToolbar(toolBar);
}
tbarMenu->AppendRadioItem(IDM_TOOLBAR_SHOW_BOTH, wxT("Show &both\tCtrl-Alt-B"));
tbarMenu->AppendSeparator();
tbarMenu->Append(IDM_TOOLBAR_BG_COL, wxT("Choose bac&kground colour..."));
tbarMenu->AppendRadioItem(IDM_TOOLBAR_SHOW_BOTH, wxT("Show &both\tCtrl-Alt-B"));
tbarMenu->AppendSeparator();
tbarMenu->Append(IDM_TOOLBAR_BG_COL, wxT("Choose bac&kground colour..."));
+ tbarMenu->AppendCheckItem(IDM_TOOLBAR_CUSTOM_BG, wxT("Draw custom back&ground"));
tbarMenu->Append(IDM_TOOLBAR_CUSTOM_PATH, wxT("Custom &bitmap...\tCtrl-B"));
wxMenu *toolMenu = new wxMenu;
tbarMenu->Append(IDM_TOOLBAR_CUSTOM_PATH, wxT("Custom &bitmap...\tCtrl-B"));
wxMenu *toolMenu = new wxMenu;
+void MyFrame::OnEraseToolBarBackground(wxEraseEvent& event)
+{
+ wxDC& dc = *event.GetDC();
+ const wxSize size = dc.GetSize();
+ dc.SetPen(*wxRED_PEN);
+ dc.DrawLine(0, 0, size.x, size.y);
+ dc.DrawLine(0, size.y, size.x, 0);
+}
+
void MyFrame::OnToggleToolbar(wxCommandEvent& WXUNUSED(event))
{
wxToolBar *tbar = GetToolBar();
void MyFrame::OnToggleToolbar(wxCommandEvent& WXUNUSED(event))
{
wxToolBar *tbar = GetToolBar();
+void MyFrame::OnToolbarCustomBg(wxCommandEvent& event)
+{
+ wxToolBarBase *tb = GetToolBar();
+
+ if ( event.IsChecked() )
+ {
+ tb->Connect
+ (
+ wxEVT_ERASE_BACKGROUND,
+ wxEraseEventHandler(MyFrame::OnEraseToolBarBackground),
+ NULL,
+ this
+ );
+ }
+ else
+ {
+ tb->Disconnect
+ (
+ wxEVT_ERASE_BACKGROUND,
+ wxEraseEventHandler(MyFrame::OnEraseToolBarBackground),
+ NULL,
+ this
+ );
+ }
+
+ tb->Refresh();
+}
+
void MyFrame::OnToolbarCustomBitmap(wxCommandEvent& WXUNUSED(event))
{
m_pathBmp = wxLoadFileSelector("custom bitmap", "");
void MyFrame::OnToolbarCustomBitmap(wxCommandEvent& WXUNUSED(event))
{
m_pathBmp = wxLoadFileSelector("custom bitmap", "");
bool wxWindowMSW::HandleEraseBkgnd(WXHDC hdc)
{
bool wxWindowMSW::HandleEraseBkgnd(WXHDC hdc)
{
- // standard non top level controls (i.e. except the dialogs) always erase
- // their background themselves in HandleCtlColor() or have some control-
- // specific ways to set the colours (common controls)
- if ( IsOfStandardClass() && !IsTopLevel() )
- return false;
-
switch ( GetBackgroundStyle() )
{
case wxBG_STYLE_ERASE:
switch ( GetBackgroundStyle() )
{
case wxBG_STYLE_ERASE:
- // background erase by the user-defined handler
+ // background erased by the user-defined handler