]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/window.cpp
Fixed three mouse event bugs
[wxWidgets.git] / src / msw / window.cpp
index 2031e5cc8438e7de67fbb262bc6990dcb6565c2b..68cf6d87c2f01ac6932360d03aeef37a0527e31a 100644 (file)
@@ -82,7 +82,7 @@
 
 #ifdef  __WXDEBUG__
 const char *wxGetMessageName(int message);
-#endif  //WXDEBUG
+#endif  //__WXDEBUG__
 
 #define WINDOW_MARGIN 3 // This defines sensitivity of Leave events
 
@@ -95,23 +95,22 @@ wxWindow *wxFindWinFromHandle(WXHWND hWnd);
 
 #if !USE_SHARED_LIBRARY
 IMPLEMENT_DYNAMIC_CLASS(wxWindow, wxEvtHandler)
+#endif
 
 BEGIN_EVENT_TABLE(wxWindow, wxEvtHandler)
-EVT_CHAR(wxWindow::OnChar)
-EVT_ERASE_BACKGROUND(wxWindow::OnEraseBackground)
-EVT_SYS_COLOUR_CHANGED(wxWindow::OnSysColourChanged)
-EVT_INIT_DIALOG(wxWindow::OnInitDialog)
-EVT_IDLE(wxWindow::OnIdle)
+    EVT_CHAR(wxWindow::OnChar)
+    EVT_ERASE_BACKGROUND(wxWindow::OnEraseBackground)
+    EVT_SYS_COLOUR_CHANGED(wxWindow::OnSysColourChanged)
+    EVT_INIT_DIALOG(wxWindow::OnInitDialog)
+    EVT_IDLE(wxWindow::OnIdle)
 END_EVENT_TABLE()
 
-#endif
-
 // Find an item given the MS Windows id
 wxWindow *wxWindow::FindItem(int id) const
 {
-    if (!GetChildren())
-        return NULL;
-    wxNode *current = GetChildren()->First();
+//    if (!GetChildren())
+//        return NULL;
+    wxNode *current = GetChildren().First();
     while (current)
     {
         wxWindow *childWin = (wxWindow *)current->Data();
@@ -140,9 +139,9 @@ wxWindow *wxWindow::FindItem(int id) const
 // Find an item given the MS Windows handle
 wxWindow *wxWindow::FindItemByHWND(WXHWND hWnd, bool controlOnly) const
 {
-    if (!GetChildren())
-        return NULL;
-    wxNode *current = GetChildren()->First();
+//    if (!GetChildren())
+//        return NULL;
+    wxNode *current = GetChildren().First();
     while (current)
     {
         wxObject *obj = (wxObject *)current->Data() ;
@@ -174,7 +173,9 @@ bool wxWindow::MSWCommand(WXUINT WXUNUSED(param), WXWORD WXUNUSED(id))
     return FALSE;
 }
 
-bool wxWindow::MSWNotify(WXWPARAM WXUNUSED(wParam), WXLPARAM WXUNUSED(lParam))
+bool wxWindow::MSWNotify(WXWPARAM WXUNUSED(wParam),
+                         WXLPARAM WXUNUSED(lParam),
+                         WXLPARAM* WXUNUSED(result))
 {
     return FALSE;
 }
@@ -193,8 +194,11 @@ void wxWindow::SetHWND(WXHWND hWnd)
     m_hWnd = hWnd;
 }
 
-// Constructor
-wxWindow::wxWindow(void)
+// ----------------------------------------------------------------------------
+// constructors and such
+// ----------------------------------------------------------------------------
+
+void wxWindow::Init()
 {
     // Generic
     m_windowId = 0;
@@ -202,7 +206,6 @@ wxWindow::wxWindow(void)
     m_windowStyle = 0;
     m_windowParent = NULL;
     m_windowEventHandler = this;
-    m_windowName = "";
     m_windowCursor = *wxSTANDARD_CURSOR;
     m_children = new wxList;
     m_doubleClickAllowed = 0 ;
@@ -217,41 +220,35 @@ wxWindow::wxWindow(void)
     // MSW-specific
     m_hWnd = 0;
     m_winEnabled = TRUE;
-    m_caretWidth = 0; m_caretHeight = 0;
-    m_caretEnabled = FALSE;
+    m_caretWidth = m_caretHeight = 0;
+    m_caretEnabled =
     m_caretShown = FALSE;
     m_inOnSize = FALSE;
-    m_minSizeX = -1;
-    m_minSizeY = -1;
-    m_maxSizeX = -1;
+    m_minSizeX =
+    m_minSizeY =
+    m_maxSizeX =
     m_maxSizeY = -1;
-    //  m_paintHDC = 0;
-    //  m_tempHDC = 0;
+
     m_isBeingDeleted = FALSE;
     m_oldWndProc = 0;
 #ifndef __WIN32__
     m_globalHandle = 0;
 #endif
     m_useCtl3D = FALSE;
+    m_mouseInWindow = FALSE;
 
+    m_windowParent = NULL;
     m_defaultItem = NULL;
 
     wxSystemSettings settings;
 
     m_backgroundColour = settings.GetSystemColour(wxSYS_COLOUR_3DFACE) ;
-    // m_backgroundColour = settings.GetSystemColour(wxSYS_COLOUR_WINDOW) ; ;
     m_foregroundColour = *wxBLACK;
 
-    /*
-    wxColour(GetRValue(GetSysColor(COLOR_WINDOW)),
-    GetGValue(GetSysColor(COLOR_BTNFACE)), GetBValue(GetSysColor(COLOR_BTNFACE)));
-    */
-
     // wxWnd
     m_lastMsg = 0;
     m_lastWParam = 0;
     m_lastLParam = 0;
-    //  m_acceleratorTable = 0;
     m_hMenu = 0;
 
     m_xThumbSize = 0;
@@ -268,8 +265,13 @@ wxWindow::wxWindow(void)
 #endif
 }
 
+wxWindow::wxWindow()
+{
+    Init();
+}
+
 // Destructor
-wxWindow::~wxWindow(void)
+wxWindow::~wxWindow()
 {
     m_isBeingDeleted = TRUE;
 
@@ -346,7 +348,7 @@ wxWindow::~wxWindow(void)
 }
 
 // Destroy the window (delayed, if a managed window)
-bool wxWindow::Destroy(void)
+bool wxWindow::Destroy()
 {
     delete this;
     return TRUE;
@@ -354,72 +356,16 @@ bool wxWindow::Destroy(void)
 
 extern char wxCanvasClassName[];
 
-// Constructor
+// real construction (Init() must have been called before!)
 bool wxWindow::Create(wxWindow *parent, wxWindowID id,
                       const wxPoint& pos,
                       const wxSize& size,
                       long style,
                       const wxString& name)
 {
-    // Generic
-    m_isBeingDeleted = FALSE;
-    m_windowId = 0;
-    m_isShown = TRUE;
-    m_windowStyle = 0;
-    m_windowParent = NULL;
-    m_windowEventHandler = this;
-    m_windowName = "";
-    m_windowCursor = *wxSTANDARD_CURSOR;
-    m_doubleClickAllowed = 0 ;
-    m_winCaptured = FALSE;
-    m_constraints = NULL;
-    m_constraintsInvolvedIn = NULL;
-    m_windowSizer = NULL;
-    m_sizerParent = NULL;
-    m_autoLayout = FALSE;
-    m_windowValidator = NULL;
-#if  wxUSE_DRAG_AND_DROP
-    m_pDropTarget = NULL;
-#endif
-
-    // MSW-specific
-    m_hWnd = 0;
-    m_winEnabled = TRUE;
-    m_caretWidth = 0; m_caretHeight = 0;
-    m_caretEnabled = FALSE;
-    m_caretShown = FALSE;
-    m_inOnSize = FALSE;
-    m_minSizeX = -1;
-    m_minSizeY = -1;
-    m_maxSizeX = -1;
-    m_maxSizeY = -1;
-    m_oldWndProc = 0;
-#ifndef __WIN32__
-    m_globalHandle = 0;
-#endif
-    m_useCtl3D = FALSE;
-    m_defaultItem = NULL;
-    m_windowParent = NULL;
-    m_mouseInWindow = FALSE;
-    if (!parent)
-        return FALSE;
+    wxCHECK_MSG( parent, FALSE, "can't create wxWindow without parent" );
 
-    if (parent) parent->AddChild(this);
-
-    // wxWnd
-    m_lastMsg = 0;
-    m_lastWParam = 0;
-    m_lastLParam = 0;
-    m_hMenu = 0;
-
-    m_xThumbSize = 0;
-    m_yThumbSize = 0;
-    m_backgroundTransparent = FALSE;
-
-    m_lastXPos = (float)-1.0;
-    m_lastYPos = (float)-1.0;
-    m_lastEvent = -1;
-    m_returnCode = 0;
+    parent->AddChild(this);
 
     SetName(name);
 
@@ -441,10 +387,6 @@ bool wxWindow::Create(wxWindow *parent, wxWindowID id,
 
     wxSystemSettings settings;
 
-    m_backgroundColour = settings.GetSystemColour(wxSYS_COLOUR_WINDOW) ; ;
-    // m_backgroundColour = settings.GetSystemColour(wxSYS_COLOUR_3DFACE) ;
-    m_foregroundColour = *wxBLACK;
-
     m_windowStyle = style;
 
     DWORD msflags = 0;
@@ -466,15 +408,13 @@ bool wxWindow::Create(wxWindow *parent, wxWindowID id,
         (m_windowStyle & wxSUNKEN_BORDER) || (m_windowStyle & wxDOUBLE_BORDER))
         msflags |= WS_BORDER;
 
-    m_mouseInWindow = FALSE ;
-
     MSWCreate(m_windowId, parent, wxCanvasClassName, this, NULL,
-        x, y, width, height, msflags, NULL, exStyle);
+              x, y, width, height, msflags, NULL, exStyle);
 
     return TRUE;
 }
 
-void wxWindow::SetFocus(void)
+void wxWindow::SetFocus()
 {
     HWND hWnd = (HWND) GetHWND();
     if (hWnd)
@@ -489,7 +429,7 @@ void wxWindow::Enable(bool enable)
         ::EnableWindow(hWnd, (BOOL)enable);
 }
 
-void wxWindow::CaptureMouse(void)
+void wxWindow::CaptureMouse()
 {
     HWND hWnd = (HWND) GetHWND();
     if (hWnd && !m_winCaptured)
@@ -499,7 +439,7 @@ void wxWindow::CaptureMouse(void)
     }
 }
 
-void wxWindow::ReleaseMouse(void)
+void wxWindow::ReleaseMouse()
 {
     if (m_winCaptured)
     {
@@ -618,19 +558,8 @@ void wxWindow::ScreenToClient(int *x, int *y) const
     POINT pt;
     pt.x = *x;
     pt.y = *y;
-    ::ScreenToClient(hWnd, &pt);
 
-    /*
-    // We may be faking the client origin.
-    // So a window that's really at (0, 30) may appear
-    // (to wxWin apps) to be at (0, 0).
-    if (GetParent())
-    {
-    wxPoint pt1(GetParent()->GetClientAreaOrigin());
-    pt.x -= pt1.x;
-    pt.y -= pt1.y;
-    }
-    */
+    ::ScreenToClient(hWnd, &pt);
 
     *x = pt.x;
     *y = pt.y;
@@ -643,18 +572,6 @@ void wxWindow::ClientToScreen(int *x, int *y) const
     pt.x = *x;
     pt.y = *y;
 
-    /*
-    // We may be faking the client origin.
-    // So a window that's really at (0, 30) may appear
-    // (to wxWin apps) to be at (0, 0).
-    if (GetParent())
-    {
-    wxPoint pt1(GetParent()->GetClientAreaOrigin());
-    pt.x += pt1.x;
-    pt.y += pt1.y;
-    }
-    */
-
     ::ClientToScreen(hWnd, &pt);
 
     *x = pt.x;
@@ -837,7 +754,8 @@ void wxWindow::GetTextExtent(const wxString& string, int *x, int *y,
     HFONT was = 0;
     if (fontToUse && fontToUse->Ok())
     {
-        if ((fnt=(HFONT) fontToUse->GetResourceHandle()))
+        fnt = (HFONT)fontToUse->GetResourceHandle();
+        if ( fnt )
             was = (HFONT) SelectObject(dc,fnt) ;
     }
 
@@ -860,7 +778,7 @@ void wxWindow::GetTextExtent(const wxString& string, int *x, int *y,
     //    fontToUse->ReleaseResource();
 }
 
-void wxWindow::Refresh(bool eraseBack, const wxRectangle *rect)
+void wxWindow::Refresh(bool eraseBack, const wxRect *rect)
 {
     HWND hWnd = (HWND) GetHWND();
     if (hWnd)
@@ -918,9 +836,8 @@ LRESULT APIENTRY _EXPORT wxWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA
         wxWndHook = NULL;
         wnd->m_hWnd = (WXHWND) hWnd;
     }
-#if (WXDEBUG > 1)
-    wxDebugMsg("hWnd = %d, m_hWnd = %d, msg = %d\n", hWnd, m_hWnd, message);
-#endif
+    //    wxDebugMsg("hWnd = %d, m_hWnd = %d, msg = %d\n", hWnd, m_hWnd, message);
+
     // Stop right here if we don't have a valid handle
     // in our wxWnd object.
     if (wnd && !wnd->m_hWnd) {
@@ -959,7 +876,7 @@ long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
 #ifdef __WXDEBUG__
     wxLogTrace(wxTraceMessages, "Processing %s(%lx, %lx)",
         wxGetMessageName(message), wParam, lParam);
-#endif // WXDEBUG
+#endif // __WXDEBUG__
 
     HWND hWnd = (HWND)m_hWnd;
 
@@ -1020,10 +937,11 @@ long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
         }
     case WM_QUERYDRAGICON:
         {
-            HICON hIcon = 0;
-            if ((hIcon = (HICON) MSWOnQueryDragIcon()))
+            HICON hIcon = (HICON)MSWOnQueryDragIcon();
+            if ( hIcon )
                 return (long)hIcon;
-            else return MSWDefWindowProc(message, wParam, lParam );
+            else
+                return MSWDefWindowProc(message, wParam, lParam );
             break;
         }
 
@@ -1205,9 +1123,10 @@ long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
 #if defined(__WIN95__)
     case WM_NOTIFY:
         {
-            if (!MSWOnNotify(wParam, lParam))
-                return MSWDefWindowProc(message, wParam, lParam );
-            break;
+            // for some messages (TVN_ITEMEXPANDING for example), the return
+            // value of WM_NOTIFY handler is important, so don't just return 0
+            // if we processed the message
+            return MSWOnNotify(wParam, lParam);
         }
 #endif
     case WM_MENUSELECT:
@@ -1499,7 +1418,7 @@ void wxRemoveHandleAssociation(wxWindow *win)
 
 // Default destroyer - override if you destroy it in some other way
 // (e.g. with MDI child windows)
-void wxWindow::MSWDestroyWindow(void)
+void wxWindow::MSWDestroyWindow()
 {
 }
 
@@ -1580,24 +1499,22 @@ void wxWindow::MSWCreate(int id, wxWindow *parent, const char *wclass, wxWindow
 
     wxWndHook = NULL;
     wxWinHandleList->Append((long)m_hWnd, this);
-
-#if WXDEBUG > 1
-    wxDebugMsg("wxWindow::MSWCreate %d\n", m_hWnd);
-#endif
 }
 
 void wxWindow::MSWOnCreate(WXLPCREATESTRUCT WXUNUSED(cs))
 {
 }
 
-bool wxWindow::MSWOnClose(void)
+bool wxWindow::MSWOnClose()
 {
-#if WXDEBUG > 1
-    wxDebugMsg("wxWindow::MSWOnClose %d\n", handle);
-#endif
     return FALSE;
 }
 
+// Some compilers don't define this
+#ifndef ENDSESSION_LOGOFF
+#define ENDSESSION_LOGOFF    0x80000000
+#endif
+
 // Return TRUE to end session, FALSE to veto end session.
 bool wxWindow::MSWOnQueryEndSession(long logOff)
 {
@@ -1630,11 +1547,8 @@ bool wxWindow::MSWOnEndSession(bool endSession, long logOff)
     return TRUE;
 }
 
-bool wxWindow::MSWOnDestroy(void)
+bool wxWindow::MSWOnDestroy()
 {
-#if WXDEBUG > 1
-    wxDebugMsg("wxWindow::MSWOnDestroy %d\n", handle);
-#endif
     // delete our drop target if we've got one
 #if wxUSE_DRAG_AND_DROP
     if ( m_pDropTarget != NULL ) {
@@ -1650,7 +1564,7 @@ bool wxWindow::MSWOnDestroy(void)
 
 // Deal with child commands from buttons etc.
 
-bool wxWindow::MSWOnNotify(WXWPARAM wParam, WXLPARAM lParam)
+long wxWindow::MSWOnNotify(WXWPARAM wParam, WXLPARAM lParam)
 {
 #if defined(__WIN95__)
     // Find a child window to send the notification to, e.g. a toolbar.
@@ -1669,33 +1583,38 @@ bool wxWindow::MSWOnNotify(WXWPARAM wParam, WXLPARAM lParam)
     HWND hWnd = (HWND)hdr->hwndFrom;
     wxWindow *win = wxFindWinFromHandle((WXHWND) hWnd);
 
+    WXLPARAM result = 0;
+
     if ( win )
-        return win->MSWNotify(wParam, lParam);
+    {
+        if ( win->MSWNotify(wParam, lParam, &result) )
+            return result;
+    }
     else
     {
         // Rely on MSWNotify to check whether the message
         // belongs to the window or not
-        wxNode *node = GetChildren()->First();
+        wxNode *node = GetChildren().First();
         while (node)
         {
             wxWindow *child = (wxWindow *)node->Data();
-            if ( child->MSWNotify(wParam, lParam) )
-                return TRUE;
+            if ( child->MSWNotify(wParam, lParam, &result) )
+                return result;
             node = node->Next();
         }
-    }
 
-    return FALSE;
+        // finally try this window too (catches toolbar case)
+        if ( MSWNotify(wParam, lParam, &result) )
+            return result;
+    }
+#endif  // Win95
 
-#endif
+    // not processed
     return FALSE;
 }
 
 void wxWindow::MSWOnMenuHighlight(WXWORD WXUNUSED(item), WXWORD WXUNUSED(flags), WXHMENU WXUNUSED(sysmenu))
 {
-#if WXDEBUG > 1
-    wxDebugMsg("wxWindow::MSWOnMenuHighlight %d\n", handle);
-#endif
 }
 
 void wxWindow::MSWOnInitMenuPopup(WXHMENU menu, int pos, bool isSystem)
@@ -1704,10 +1623,6 @@ void wxWindow::MSWOnInitMenuPopup(WXHMENU menu, int pos, bool isSystem)
 
 bool wxWindow::MSWOnActivate(int state, bool WXUNUSED(minimized), WXHWND WXUNUSED(activate))
 {
-#if WXDEBUG > 1
-    wxDebugMsg("wxWindow::MSWOnActivate %d\n", handle);
-#endif
-
     wxActivateEvent event(wxEVT_ACTIVATE, ((state == WA_ACTIVE) || (state == WA_CLICKACTIVE)),
         m_windowId);
     event.SetEventObject(this);
@@ -1717,9 +1632,6 @@ bool wxWindow::MSWOnActivate(int state, bool WXUNUSED(minimized), WXHWND WXUNUSE
 
 bool wxWindow::MSWOnSetFocus(WXHWND WXUNUSED(hwnd))
 {
-#if WXDEBUG > 1
-    wxDebugMsg("wxWindow::MSWOnSetFocus %d\n", m_hWnd);
-#endif
     // Deal with caret
     if (m_caretEnabled && (m_caretWidth > 0) && (m_caretHeight > 0))
     {
@@ -1737,9 +1649,6 @@ bool wxWindow::MSWOnSetFocus(WXHWND WXUNUSED(hwnd))
 
 bool wxWindow::MSWOnKillFocus(WXHWND WXUNUSED(hwnd))
 {
-#if WXDEBUG > 1
-    wxDebugMsg("wxWindow::MSWOnKillFocus %d\n", m_hWnd);
-#endif
     // Deal with caret
     if (m_caretEnabled)
     {
@@ -1755,9 +1664,6 @@ bool wxWindow::MSWOnKillFocus(WXHWND WXUNUSED(hwnd))
 
 void wxWindow::MSWOnDropFiles(WXWPARAM wParam)
 {
-#if WXDEBUG > 1
-    wxDebugMsg("wxWindow::MSWOnDropFiles %d\n", m_hWnd);
-#endif
 
     HDROP hFilesInfo = (HDROP) wParam;
     POINT dropPoint;
@@ -1848,9 +1754,6 @@ bool wxWindow::MSWOnMeasureItem(int id, WXMEASUREITEMSTRUCT *itemStruct)
 WXHBRUSH wxWindow::MSWOnCtlColor(WXHDC pDC, WXHWND pWnd, WXUINT nCtlColor,
                                  WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
 {
-#if WXDEBUG > 1
-    wxDebugMsg("wxWindow::MSWOnCtlColour %d\n", m_hWnd);
-#endif
     if (nCtlColor == CTLCOLOR_DLG)
     {
         return OnCtlColor(pDC, pWnd, nCtlColor, message, wParam, lParam);
@@ -1915,7 +1818,7 @@ long wxWindow::MSWOnQueryNewPalette()
 // Responds to colour changes: passes event on to children.
 void wxWindow::OnSysColourChanged(wxSysColourChangedEvent& event)
 {
-    wxNode *node = GetChildren()->First();
+    wxNode *node = GetChildren().First();
     while ( node )
     {
         // Only propagate to non-top-level windows
@@ -1948,7 +1851,7 @@ long wxWindow::Default()
 #ifdef __WXDEBUG__
     wxLogTrace(wxTraceMessages, "Forwarding %s to DefWindowProc.",
         wxGetMessageName(m_lastMsg));
-#endif // WXDEBUG
+#endif // __WXDEBUG__
 
     return this->MSWDefWindowProc(m_lastMsg, m_lastWParam, m_lastLParam);
 }
@@ -1974,34 +1877,32 @@ bool wxWindow::MSWProcessMessage(WXMSG* pMsg)
             lDlgCode = ::SendMessage(msg->hwnd, WM_GETDLGCODE, 0, 0);
         }
 
-        bool bForward;
+        bool bForward = TRUE;
         if ( bProcess ) {
             switch ( msg->wParam ) {
-            case VK_TAB:
-                if ( lDlgCode & DLGC_WANTTAB )  // this is FALSE for Ctrl-Tab
-                    bProcess = FALSE;
-                else
-                    bForward = !(::GetKeyState(VK_SHIFT) & 0x100);
-                break;
+                case VK_TAB:
+                    if ( lDlgCode & DLGC_WANTTAB )  // FALSE for Ctrl-Tab
+                        bProcess = FALSE;
+                    else
+                        bForward = !(::GetKeyState(VK_SHIFT) & 0x100);
+                    break;
 
-            case VK_UP:
-            case VK_LEFT:
-                if ( (lDlgCode & DLGC_WANTARROWS) || bCtrlDown )
-                    bProcess = FALSE;
-                else
-                    bForward = FALSE;
-                break;
+                case VK_UP:
+                case VK_LEFT:
+                    if ( (lDlgCode & DLGC_WANTARROWS) || bCtrlDown )
+                        bProcess = FALSE;
+                    else
+                        bForward = FALSE;
+                    break;
 
-            case VK_DOWN:
-            case VK_RIGHT:
-                if ( (lDlgCode & DLGC_WANTARROWS) || bCtrlDown )
-                    bProcess = FALSE;
-                else
-                    bForward = TRUE;
-                break;
+                case VK_DOWN:
+                case VK_RIGHT:
+                    if ( (lDlgCode & DLGC_WANTARROWS) || bCtrlDown )
+                        bProcess = FALSE;
+                    break;
 
-            default:
-                bProcess = FALSE;
+                default:
+                    bProcess = FALSE;
             }
         }
 
@@ -2032,13 +1933,10 @@ bool wxWindow::MSWTranslateMessage(WXMSG* pMsg)
 
 long wxWindow::MSWOnMDIActivate(long WXUNUSED(flag), WXHWND WXUNUSED(activate), WXHWND WXUNUSED(deactivate))
 {
-#if WXDEBUG > 1
-    wxDebugMsg("wxWindow::MSWOnMDIActivate %d\n", m_hWnd);
-#endif
     return 1;
 }
 
-void wxWindow::MSWDetachWindowMenu(void)
+void wxWindow::MSWDetachWindowMenu()
 {
     if (m_hMenu)
     {
@@ -2057,7 +1955,7 @@ void wxWindow::MSWDetachWindowMenu(void)
     }
 }
 
-bool wxWindow::MSWOnPaint(void)
+bool wxWindow::MSWOnPaint()
 {
 #ifdef __WIN32__
     HRGN hRegion = ::CreateRectRgn(0, 0, 0, 0); // Dummy call to get a handle
@@ -2084,9 +1982,6 @@ void wxWindow::MSWOnSize(int w, int h, WXUINT WXUNUSED(flag))
     if (m_inOnSize)
         return;
 
-#if WXDEBUG > 1
-    wxDebugMsg("wxWindow::MSWOnSize %d\n", m_hWnd);
-#endif
     if (!m_hWnd)
         return;
 
@@ -2108,9 +2003,6 @@ void wxWindow::MSWOnWindowPosChanging(void *WXUNUSED(lpPos))
 // Deal with child commands from buttons etc.
 bool wxWindow::MSWOnCommand(WXWORD id, WXWORD cmd, WXHWND control)
 {
-#if WXDEBUG > 1
-    wxDebugMsg("wxWindow::MSWOnCommand\n");
-#endif
     if (wxCurrentPopupMenu)
     {
         wxMenu *popupMenu = wxCurrentPopupMenu;
@@ -2118,22 +2010,11 @@ bool wxWindow::MSWOnCommand(WXWORD id, WXWORD cmd, WXHWND control)
         bool succ = popupMenu->MSWCommand(cmd, id);
         return succ;
     }
-#if WXDEBUG > 1
-    char buf[80];
-    sprintf(buf, "Looking for item %d...\n", id);
-    wxDebugMsg(buf);
-#endif
 
     wxWindow *item = FindItem(id);
     if (item)
     {
         bool value = item->MSWCommand(cmd, id);
-#if WXDEBUG > 1
-        if (value)
-            wxDebugMsg("MSWCommand succeeded\n");
-        else
-            wxDebugMsg("MSWCommand failed\n");
-#endif
         return value;
     }
     else
@@ -2188,7 +2069,7 @@ void wxWindow::MSWOnLButtonDown(int x, int y, WXUINT flags)
     event.SetTimestamp(wxApp::sm_lastMessageTime);
     event.m_eventObject = this;
 
-    m_lastXPos = event.m_x; m_lastYPos = event.m_y; m_lastEvent = wxEVENT_TYPE_LEFT_DOWN;
+    m_lastXPos = event.m_x; m_lastYPos = event.m_y; m_lastEvent = wxEVT_LEFT_DOWN;
 
     if (!GetEventHandler()->ProcessEvent(event))
         Default();
@@ -2727,7 +2608,7 @@ bool wxWindow::MSWOnInitDialog(WXHWND WXUNUSED(hWndFocus))
     return TRUE;
 }
 
-void wxWindow::InitDialog(void)
+void wxWindow::InitDialog()
 {
     wxInitDialogEvent event(GetId());
     event.SetEventObject( this );
@@ -2748,20 +2629,15 @@ void wxGetCharSize(WXHWND wnd, int *x, int *y,wxFont *the_font)
     HFONT was = 0;
     if (the_font)
     {
-#if WXDEBUG > 1
-        wxDebugMsg("wxGetCharSize: Selecting HFONT %X\n", fnt);
-#endif
         //    the_font->UseResource();
         //    the_font->RealizeResource();
-        if ((fnt=(HFONT) the_font->GetResourceHandle()))
+        fnt = (HFONT)the_font->GetResourceHandle();
+        if ( fnt )
             was = (HFONT) SelectObject(dc,fnt) ;
     }
     GetTextMetrics(dc, &tm);
     if (the_font && fnt && was)
     {
-#if WXDEBUG > 1
-        wxDebugMsg("wxGetCharSize: Selecting old HFONT %X\n", was);
-#endif
         SelectObject(dc,was) ;
     }
     ReleaseDC((HWND)wnd, dc);
@@ -2955,7 +2831,7 @@ void wxWindow::ShowCaret(bool show)
     }
 }
 
-void wxWindow::DestroyCaret(void)
+void wxWindow::DestroyCaret()
 {
     m_caretEnabled = FALSE;
 }
@@ -2973,7 +2849,7 @@ void wxWindow::GetCaretPos(int *x, int *y) const
     *y = point.y;
 }
 
-wxWindow *wxGetActiveWindow(void)
+wxWindow *wxGetActiveWindow()
 {
     HWND hWnd = GetActiveWindow();
     if (hWnd != 0)
@@ -3081,7 +2957,7 @@ void wxWindow::Centre(int direction)
 }
 
 /* TODO (maybe)
-void wxWindow::OnPaint(void)
+void wxWindow::OnPaint()
 {
 PaintSelectionHandles();
 }
@@ -3313,7 +3189,7 @@ int wxWindow::GetScrollRange(int orient) const
 #if defined(__WIN95__)
         // Try to adjust the range to cope with page size > 1
         // - a Windows API quirk
-        int pageSize = GetScrollPage(orient);
+        int pageSize = GetScrollThumb(orient);
         if ( pageSize > 1 )
         {
             maxPos -= (pageSize - 1);
@@ -3435,7 +3311,7 @@ SetScrollPage(orient, thumbVisible, FALSE);
     }
 }
 
-void wxWindow::ScrollWindow(int dx, int dy, const wxRectangle *rect)
+void wxWindow::ScrollWindow(int dx, int dy, const wxRect *rect)
 {
     RECT rect2;
     if ( rect )
@@ -3478,7 +3354,7 @@ void wxWindow::SubclassWin(WXHWND hWnd)
     SetWindowLong((HWND) hWnd, GWL_WNDPROC, (LONG) wxWndProc);
 }
 
-void wxWindow::UnsubclassWin(void)
+void wxWindow::UnsubclassWin()
 {
     wxRemoveHandleAssociation(this);
 
@@ -3615,9 +3491,9 @@ bool wxWindow::IsEnabled(void) const
 
 // Transfer values to controls. If returns FALSE,
 // it's an application error (pops up a dialog)
-bool wxWindow::TransferDataToWindow(void)
+bool wxWindow::TransferDataToWindow()
 {
-    wxNode *node = GetChildren()->First();
+    wxNode *node = GetChildren().First();
     while ( node )
     {
         wxWindow *child = (wxWindow *)node->Data();
@@ -3635,9 +3511,9 @@ bool wxWindow::TransferDataToWindow(void)
 
 // Transfer values from controls. If returns FALSE,
 // validation failed: don't quit
-bool wxWindow::TransferDataFromWindow(void)
+bool wxWindow::TransferDataFromWindow()
 {
-    wxNode *node = GetChildren()->First();
+    wxNode *node = GetChildren().First();
     while ( node )
     {
         wxWindow *child = (wxWindow *)node->Data();
@@ -3651,9 +3527,9 @@ bool wxWindow::TransferDataFromWindow(void)
     return TRUE;
 }
 
-bool wxWindow::Validate(void)
+bool wxWindow::Validate()
 {
-    wxNode *node = GetChildren()->First();
+    wxNode *node = GetChildren().First();
     while ( node )
     {
         wxWindow *child = (wxWindow *)node->Data();
@@ -3668,7 +3544,7 @@ bool wxWindow::Validate(void)
 }
 
 // Get the window with the focus
-wxWindow *wxWindow::FindFocus(void)
+wxWindow *wxWindow::FindFocus()
 {
     HWND hWnd = ::GetFocus();
     if ( hWnd )
@@ -3680,30 +3556,28 @@ wxWindow *wxWindow::FindFocus(void)
 
 void wxWindow::AddChild(wxWindow *child)
 {
-    GetChildren()->Append(child);
+    GetChildren().Append(child);
     child->m_windowParent = this;
 }
 
 void wxWindow::RemoveChild(wxWindow *child)
 {
-    if (GetChildren())
-        GetChildren()->DeleteObject(child);
+//    if (GetChildren())
+    GetChildren().DeleteObject(child);
     child->m_windowParent = NULL;
 }
 
-void wxWindow::DestroyChildren(void)
+void wxWindow::DestroyChildren()
 {
-    if (GetChildren()) {
         wxNode *node;
-        while ((node = GetChildren()->First()) != (wxNode *)NULL) {
+        while ((node = GetChildren().First()) != (wxNode *)NULL) {
             wxWindow *child;
             if ((child = (wxWindow *)node->Data()) != (wxWindow *)NULL) {
                 delete child;
-                if ( GetChildren()->Member(child) )
+                if ( GetChildren().Member(child) )
                     delete node;
             }
         } /* while */
-    }
 }
 
 void wxWindow::MakeModal(bool modal)
@@ -3807,7 +3681,7 @@ void wxWindow::RemoveConstraintReference(wxWindow *otherWin)
 }
 
 // Reset any constraints that mention this window
-void wxWindow::DeleteRelatedConstraints(void)
+void wxWindow::DeleteRelatedConstraints()
 {
     if (m_constraintsInvolvedIn)
     {
@@ -3849,7 +3723,7 @@ void wxWindow::SetSizer(wxSizer *sizer)
 * New version
 */
 
-bool wxWindow::Layout(void)
+bool wxWindow::Layout()
 {
     if (GetConstraints())
     {
@@ -3918,7 +3792,7 @@ bool wxWindow::DoPhase(int phase)
     {
         noChanges = 0;
         noFailures = 0;
-        wxNode *node = GetChildren()->First();
+        wxNode *node = GetChildren().First();
         while (node)
         {
             wxWindow *child = (wxWindow *)node->Data();
@@ -3949,7 +3823,7 @@ bool wxWindow::DoPhase(int phase)
     return TRUE;
 }
 
-void wxWindow::ResetConstraints(void)
+void wxWindow::ResetConstraints()
 {
     wxLayoutConstraints *constr = GetConstraints();
     if (constr)
@@ -3963,7 +3837,7 @@ void wxWindow::ResetConstraints(void)
         constr->centreX.SetDone(FALSE);
         constr->centreY.SetDone(FALSE);
     }
-    wxNode *node = GetChildren()->First();
+    wxNode *node = GetChildren().First();
     while (node)
     {
         wxWindow *win = (wxWindow *)node->Data();
@@ -4022,7 +3896,7 @@ void wxWindow::SetConstraintSizes(bool recurse)
 
     if (recurse)
     {
-        wxNode *node = GetChildren()->First();
+        wxNode *node = GetChildren().First();
         while (node)
         {
             wxWindow *win = (wxWindow *)node->Data();
@@ -4160,9 +4034,9 @@ bool wxWindow::Close(bool force)
 wxObject* wxWindow::GetChild(int number) const
 {
     // Return a pointer to the Nth object in the Panel
-    if (!GetChildren())
-        return(NULL) ;
-    wxNode *node = GetChildren()->First();
+//    if (!GetChildren())
+//        return(NULL) ;
+    wxNode *node = GetChildren().First();
     int n = number;
     while (node && n--)
         node = node->Next() ;
@@ -4211,7 +4085,7 @@ void wxWindow::OnDefaultAction(wxControl *initiatingItem)
     */
 }
 
-void wxWindow::Clear(void)
+void wxWindow::Clear()
 {
     wxClientDC dc(this);
     wxBrush brush(GetBackgroundColour(), wxSOLID);
@@ -4220,11 +4094,11 @@ void wxWindow::Clear(void)
 }
 
 // Fits the panel around the items
-void wxWindow::Fit(void)
+void wxWindow::Fit()
 {
     int maxX = 0;
     int maxY = 0;
-    wxNode *node = GetChildren()->First();
+    wxNode *node = GetChildren().First();
     while ( node )
     {
         wxWindow *win = (wxWindow *)node->Data();
@@ -4257,7 +4131,7 @@ wxWindow *wxWindow::FindWindow(long id)
     if ( GetId() == id)
         return this;
 
-    wxNode *node = GetChildren()->First();
+    wxNode *node = GetChildren().First();
     while ( node )
     {
         wxWindow *child = (wxWindow *)node->Data();
@@ -4274,7 +4148,7 @@ wxWindow *wxWindow::FindWindow(const wxString& name)
     if ( GetName() == name)
         return this;
 
-    wxNode *node = GetChildren()->First();
+    wxNode *node = GetChildren().First();
     while ( node )
     {
         wxWindow *child = (wxWindow *)node->Data();
@@ -4389,7 +4263,7 @@ int y_pages = 0;
 */
 
 // Setup background and foreground colours correctly
-void wxWindow::SetupColours(void)
+void wxWindow::SetupColours()
 {
     if (GetParent())
         SetBackgroundColour(GetParent()->GetBackgroundColour());
@@ -4424,13 +4298,13 @@ void wxWindow::OnIdle(wxIdleEvent& event)
 }
 
 // Raise the window to the top of the Z order
-void wxWindow::Raise(void)
+void wxWindow::Raise()
 {
     ::BringWindowToTop((HWND) GetHWND());
 }
 
 // Lower the window to the bottom of the Z order
-void wxWindow::Lower(void)
+void wxWindow::Lower()
 {
     ::SetWindowPos((HWND) GetHWND(), HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE);
 }
@@ -4467,6 +4341,35 @@ bool wxWindow::IsExposed(const wxRect& rect) const
     return (m_updateRegion.Contains(rect) != wxOutRegion);
 }
 
+// Set this window to be the child of 'parent'.
+bool wxWindow::Reparent(wxWindow *parent)
+{
+    if (parent == GetParent())
+        return TRUE;
+
+    // Unlink this window from the existing parent.
+    if (GetParent())
+    {
+        GetParent()->RemoveChild(this);
+    }
+    else
+        wxTopLevelWindows.DeleteObject(this);
+
+    HWND hWndParent = 0;
+    HWND hWndChild = (HWND) GetHWND();
+    if (parent != (wxWindow*) NULL)
+    {
+        parent->AddChild(this);
+        hWndParent = (HWND) parent->GetHWND();
+    }
+    else
+        wxTopLevelWindows.Append(this);
+
+    ::SetParent(hWndChild, hWndParent);
+
+    return TRUE;
+}
+
 #ifdef __WXDEBUG__
 const char *wxGetMessageName(int message)
 {
@@ -4883,4 +4786,4 @@ const char *wxGetMessageName(int message)
         return s_szBuf;
   }
 }
-#endif //WXDEBUG
+#endif //__WXDEBUG__