void wxWindow::ScrollWindow(int dx, int dy, const wxRect *rect)
{
+ // use native scrolling when available and do it in generic way
+ // otherwise:
+#ifdef __WXX11__
+
+ wxWindowNative::ScrollWindow(dx, dy, rect);
+
+#else
+
// before scrolling it, ensure that we don't have any unpainted areas
Update();
r = ScrollNoRefresh(0, dy, rect);
Refresh(TRUE /* erase bkgnd */, &r);
}
+
+ // scroll children accordingly:
+ wxPoint offset(dx, dy);
+
+ for (wxWindowList::Node *node = GetChildren().GetFirst();
+ node; node = node->GetNext())
+ {
+ wxWindow *child = node->GetData();
+ if ( child != m_scrollbarVert && child != m_scrollbarHorz &&
+ (rect == NULL || rect->Intersects(child->GetRect())) )
+ {
+ child->Move(child->GetPosition() + offset);
+ }
+ }
+#endif
}
wxRect wxWindow::ScrollNoRefresh(int dx, int dy, const wxRect *rectTotal)
}
#endif // wxUSE_MENUS
+ // if it wasn't in a menu, try to find a button
+ if ( command != -1 )
+ {
+ wxWindow* child = win->FindWindow(command);
+ if ( child && wxDynamicCast(child, wxButton) )
+ {
+ wxCommandEvent eventCmd(wxEVT_COMMAND_BUTTON_CLICKED, command);
+ eventCmd.SetEventObject(child);
+ if ( child->GetEventHandler()->ProcessEvent(eventCmd) )
+ {
+ // skip "event.Skip()" below
+ return;
+ }
+ }
+ }
+
// don't propagate accels from the child frame to the parent one
break;
}
#endif // wxUSE_MENUS
+// ----------------------------------------------------------------------------
+// MSW-specific section
+// ----------------------------------------------------------------------------
+
+#ifdef __WXMSW__
+
+#include "wx/msw/private.h"
+
+long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
+{
+ if ( message == WM_NCHITTEST )
+ {
+ // the windows which contain the other windows should let the mouse
+ // events through, otherwise a window inside a static box would
+ // never get any events at all
+ if ( IsStaticBox() )
+ {
+ return HTTRANSPARENT;
+ }
+ }
+
+ return wxWindowNative::MSWWindowProc(message, wParam, lParam);
+}
+
+#endif // __WXMSW__
+