X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/79c5fe4be8006c36f0aa8278752494122d82e6ec..084ad0c2424aa998a640c151f8fa762435364449:/samples/erase/erase.cpp diff --git a/samples/erase/erase.cpp b/samples/erase/erase.cpp index db1a3632cc..87070e96fc 100644 --- a/samples/erase/erase.cpp +++ b/samples/erase/erase.cpp @@ -17,11 +17,6 @@ // 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" @@ -60,6 +55,7 @@ public: MyCanvas( wxFrame *parent ); void UseBuffer(bool useBuffer) { m_useBuffer = useBuffer; Refresh(); } + void EraseBg(bool eraseBg) { m_eraseBg = eraseBg; Refresh(); } private: void OnPaint( wxPaintEvent &event ); @@ -75,6 +71,10 @@ private: // use wxMemoryDC in OnPaint()? bool m_useBuffer; + // paint custom background in OnEraseBackground()? + bool m_eraseBg; + + DECLARE_EVENT_TABLE() }; @@ -84,6 +84,7 @@ public: MyFrame(); void OnUseBuffer(wxCommandEvent& event); + void OnEraseBg(wxCommandEvent& event); void OnQuit(wxCommandEvent& event); void OnAbout(wxCommandEvent& event); @@ -102,6 +103,7 @@ enum { // menu items Erase_Menu_UseBuffer = 100, + Erase_Menu_EraseBg, Erase_Menu_Exit = wxID_EXIT, Erase_Menu_About = wxID_ABOUT }; @@ -128,6 +130,7 @@ bool MyApp::OnInit() 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() @@ -141,6 +144,7 @@ MyFrame::MyFrame() 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")); @@ -169,6 +173,11 @@ void MyFrame::OnUseBuffer(wxCommandEvent& event) m_canvas->UseBuffer(event.IsChecked()); } +void MyFrame::OnEraseBg(wxCommandEvent& event) +{ + m_canvas->EraseBg(event.IsChecked()); +} + void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) { Close(true); @@ -191,6 +200,7 @@ MyCanvas::MyCanvas( wxFrame *parent ) : wxScrolledWindow( parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxScrolledWindowStyle | wxSUNKEN_BORDER ) { + m_eraseBg = m_useBuffer = false; SetScrollbars( 10, 10, 40, 100, 0, 0 ); @@ -198,6 +208,8 @@ MyCanvas::MyCanvas( wxFrame *parent ) m_bitmap = wxBitmap( wxICON(mondrian) ); new wxStaticBitmap( this, wxID_ANY, m_bitmap, wxPoint(80,20) ); + + SetFocusIgnoringChildren(); } void MyCanvas::OnChar( wxKeyEvent &event ) @@ -226,7 +238,7 @@ 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 ); @@ -314,24 +326,32 @@ void MyCanvas::OnPaint( wxPaintEvent &WXUNUSED(event) ) 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); }