+#ifndef __WXWINCE__
+void wxNotebook::OnEraseBackground(wxEraseEvent& WXUNUSED(event))
+{
+ // do nothing here
+}
+
+void wxNotebook::OnPaint(wxPaintEvent& WXUNUSED(event))
+{
+ // Better painting behaviour, at the expense of system resources
+#if USE_NOTEBOOK_ANTIFLICKER
+ wxPaintDC dc(this);
+ wxMemoryDC memdc;
+ RECT rc;
+ ::GetClientRect(GetHwnd(), &rc);
+ wxBitmap bmp(rc.right, rc.bottom);
+ memdc.SelectObject(bmp);
+
+ // iterate over all child windows to find spin button
+ for ( HWND child = ::GetWindow(GetHwnd(), GW_CHILD);
+ child;
+ child = ::GetWindow(child, GW_HWNDNEXT) )
+ {
+ wxWindow *childWindow = wxFindWinFromHandle((WXHWND)child);
+
+ // see if it exists, if no wxWindow found then assume it's the spin btn
+ if ( !childWindow )
+ {
+ // subclass the spin button to override WM_ERASEBKGND
+ if ( !s_wndprocNotebookSpinBtn )
+ s_wndprocNotebookSpinBtn = (WXFARPROC)wxGetWindowProc(child);
+
+ wxSetWindowProc(child, wxNotebookSpinBtnWndProc);
+ break;
+ }
+ }
+
+ HBRUSH hbr = (HBRUSH)m_hbrBackground;
+
+ // if there is no special brush just use the solid background colour
+ wxBrush brush;
+ if ( !hbr )
+ {
+ brush = wxBrush(GetBackgroundColour());
+ hbr = GetHbrushOf(brush);
+ }
+
+ ::FillRect(GetHdcOf(memdc), &rc, hbr);
+
+ MSWDefWindowProc(WM_PAINT, (WPARAM)memdc.GetHDC(), 0);
+
+ dc.Blit(0, 0, rc.right, rc.bottom, &memdc, 0, 0);
+#endif
+}
+#endif
+ // __WXWINCE__
+
+#if USE_NOTEBOOK_ANTIFLICKER
+// ---------------------------------------------------------------------------
+// window proc for spin button
+// ---------------------------------------------------------------------------
+
+LRESULT APIENTRY _EXPORT wxNotebookSpinBtnWndProc(HWND hwnd,
+ UINT message,
+ WPARAM wParam,
+ LPARAM lParam)
+{
+ if ( message == WM_ERASEBKGND )
+ return 0;
+
+ return ::CallWindowProc(CASTWNDPROC s_wndprocNotebookSpinBtn, hwnd, message, wParam, lParam);
+}
+
+#endif
+ // USE_NOTEBOOK_ANTIFLICKER
+