// headers
// ----------------------------------------------------------------------------
-#if defined(__GNUG__) && !defined(__APPLE__)
- #pragma implementation "erase.cpp"
- #pragma interface "erase.cpp"
-#endif
-
// For compilers that support precompilation, includes "wx/wx.h".
#include "wx/wxprec.h"
MyCanvas( wxFrame *parent );
void UseBuffer(bool useBuffer) { m_useBuffer = useBuffer; Refresh(); }
+ void EraseBg(bool eraseBg) { m_eraseBg = eraseBg; Refresh(); }
private:
void OnPaint( wxPaintEvent &event );
// use wxMemoryDC in OnPaint()?
bool m_useBuffer;
+ // paint custom background in OnEraseBackground()?
+ bool m_eraseBg;
+
+
DECLARE_EVENT_TABLE()
};
MyFrame();
void OnUseBuffer(wxCommandEvent& event);
+ void OnEraseBg(wxCommandEvent& event);
void OnQuit(wxCommandEvent& event);
void OnAbout(wxCommandEvent& event);
{
// menu items
Erase_Menu_UseBuffer = 100,
+ Erase_Menu_EraseBg,
Erase_Menu_Exit = wxID_EXIT,
Erase_Menu_About = wxID_ABOUT
};
bool MyApp::OnInit()
{
+ if ( !wxApp::OnInit() )
+ return false;
+
MyFrame *frame = new MyFrame;
frame->Show(true);
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU(Erase_Menu_UseBuffer, MyFrame::OnUseBuffer)
+ EVT_MENU(Erase_Menu_EraseBg, MyFrame::OnEraseBg)
EVT_MENU(Erase_Menu_Exit, MyFrame::OnQuit)
EVT_MENU(Erase_Menu_About, MyFrame::OnAbout)
END_EVENT_TABLE()
wxMenu *menuFile = new wxMenu(_T(""), wxMENU_TEAROFF);
menuFile->AppendCheckItem(Erase_Menu_UseBuffer, _T("&Use memory DC\tCtrl-M"));
+ menuFile->AppendCheckItem(Erase_Menu_EraseBg, _T("Custom &background\tCtrl-B"));
menuFile->AppendSeparator();
menuFile->Append(Erase_Menu_Exit, _T("E&xit\tAlt-X"), _T("Quit this program"));
m_canvas->UseBuffer(event.IsChecked());
}
+void MyFrame::OnEraseBg(wxCommandEvent& event)
+{
+ m_canvas->EraseBg(event.IsChecked());
+}
+
void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
{
Close(true);
: wxScrolledWindow( parent, wxID_ANY, wxDefaultPosition, wxDefaultSize,
wxScrolledWindowStyle | wxSUNKEN_BORDER )
{
+ m_eraseBg =
m_useBuffer = false;
SetScrollbars( 10, 10, 40, 100, 0, 0 );
m_bitmap = wxBitmap( wxICON(mondrian) );
new wxStaticBitmap( this, wxID_ANY, m_bitmap, wxPoint(80,20) );
-
+
SetFocusIgnoringChildren();
}
void MyCanvas::OnEraseBackground( wxEraseEvent& event )
{
+ if ( !m_eraseBg )
+ {
+ event.Skip();
+ return;
+ }
+
wxDC& dc = *event.GetDC();
dc.SetPen(*wxGREEN_PEN);
PrepareDC( dc );
-
+
// clear any junk currently displayed
dc.Clear();