// 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::OnChar( wxKeyEvent &event )
void MyCanvas::DoPaint(wxDC& dc)
{
dc.SetBrush( *wxBLACK_BRUSH );
- dc.DrawRectangle( 0,0,200,50 );
+ dc.DrawRectangle( 10,10,200,50 );
dc.DrawBitmap( m_bitmap, 10, 20, true );
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();
const wxSize size = GetClientSize();
- for ( int x = 0; x < size.x; x += 10 )
+ for ( int x = 0; x < size.x; x += 15 )
{
dc.DrawLine(x, 0, x, size.y);
}
- for ( int y = 0; y < size.y; y += 10 )
+ for ( int y = 0; y < size.y; y += 15 )
{
dc.DrawLine(0, y, size.x, y);
}
dc.SetTextForeground(*wxRED);
- dc.DrawText(_T("This text is drawn from OnEraseBackground"), 60, 60);
+ dc.DrawText(_T("This text is drawn from OnEraseBackground"), 60, 160);
}