X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f54f3bffcebcfe09b4cb3e78d78a0decbc542153..e2414cbe8c21931afbb590132232553514da824c:/src/msw/window.cpp diff --git a/src/msw/window.cpp b/src/msw/window.cpp index 3090978dc5..ce22737cb5 100644 --- a/src/msw/window.cpp +++ b/src/msw/window.cpp @@ -46,6 +46,7 @@ #endif #include "wx/menuitem.h" +#include "wx/log.h" #include "wx/msw/private.h" #include @@ -79,6 +80,10 @@ #undef GetClassInfo #endif +#ifdef __WXDEBUG__ + static const char *GetMessageName(int message); +#endif //WXDEBUG + #define WINDOW_MARGIN 3 // This defines sensitivity of Leave events wxMenu *wxCurrentPopupMenu = NULL; @@ -93,7 +98,6 @@ IMPLEMENT_DYNAMIC_CLASS(wxWindow, wxEvtHandler) BEGIN_EVENT_TABLE(wxWindow, wxEvtHandler) EVT_CHAR(wxWindow::OnChar) - EVT_SIZE(wxWindow::OnSize) EVT_ERASE_BACKGROUND(wxWindow::OnEraseBackground) EVT_SYS_COLOUR_CHANGED(wxWindow::OnSysColourChanged) EVT_INIT_DIALOG(wxWindow::OnInitDialog) @@ -103,7 +107,7 @@ END_EVENT_TABLE() #endif // Find an item given the MS Windows id -wxWindow *wxWindow::FindItem(const int id) const +wxWindow *wxWindow::FindItem(int id) const { if (!GetChildren()) return NULL; @@ -134,7 +138,7 @@ wxWindow *wxWindow::FindItem(const int id) const } // Find an item given the MS Windows handle -wxWindow *wxWindow::FindItemByHWND(const WXHWND hWnd, bool controlOnly) const +wxWindow *wxWindow::FindItemByHWND(WXHWND hWnd, bool controlOnly) const { if (!GetChildren()) return NULL; @@ -165,17 +169,17 @@ wxWindow *wxWindow::FindItemByHWND(const WXHWND hWnd, bool controlOnly) const } // Default command handler -bool wxWindow::MSWCommand(const WXUINT WXUNUSED(param), const WXWORD WXUNUSED(id)) +bool wxWindow::MSWCommand(WXUINT WXUNUSED(param), WXWORD WXUNUSED(id)) { return FALSE; } -bool wxWindow::MSWNotify(const WXWPARAM WXUNUSED(wParam), const WXLPARAM WXUNUSED(lParam)) +bool wxWindow::MSWNotify(WXWPARAM WXUNUSED(wParam), WXLPARAM WXUNUSED(lParam)) { return FALSE; } -void wxWindow::PreDelete(const WXHDC WXUNUSED(dc)) +void wxWindow::PreDelete(WXHDC WXUNUSED(dc)) { } @@ -368,10 +372,10 @@ bool wxWindow::Destroy(void) extern char wxCanvasClassName[]; // Constructor -bool wxWindow::Create(wxWindow *parent, const wxWindowID id, +bool wxWindow::Create(wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, - const long style, + long style, const wxString& name) { // Generic @@ -472,11 +476,10 @@ bool wxWindow::Create(wxWindow *parent, const wxWindowID id, msflags |= WS_BORDER; if (style & wxTHICK_FRAME) msflags |= WS_THICKFRAME; - // TODO: probably make WS_CLIPCHILDREN this a setting in wx/setup.h, - // to reduce flicker with the trade-off that groupboxes must paint in a solid - // colour (so your control order must be correct, and you can't easily draw a - // transparent group). - msflags |= WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN; + + msflags |= WS_CHILD | WS_VISIBLE; + if (style & wxCLIP_CHILDREN) + msflags |= WS_CLIPCHILDREN; bool want3D; WXDWORD exStyle = Determine3DEffects(WS_EX_CLIENTEDGE, &want3D) ; @@ -507,7 +510,7 @@ void wxWindow::SetFocus(void) ::SetFocus(hWnd); } -void wxWindow::Enable(const bool enable) +void wxWindow::Enable(bool enable) { m_winEnabled = enable; HWND hWnd = (HWND) GetHWND(); @@ -582,7 +585,7 @@ void wxWindow::SetDropTarget(wxDropTarget *pDropTarget) // I think we should retain the old-style // DragAcceptFiles in parallel with SetDropTarget. // JACS -void wxWindow::DragAcceptFiles(const bool accept) +void wxWindow::DragAcceptFiles(bool accept) { HWND hWnd = (HWND) GetHWND(); if (hWnd) @@ -681,7 +684,7 @@ void wxWindow::GetClientSize(int *x, int *y) const *y = rect.bottom; } -void wxWindow::SetSize(const int x, const int y, const int width, const int height, const int sizeFlags) +void wxWindow::SetSize(int x, int y, int width, int height, int sizeFlags) { int currentX, currentY; GetPosition(¤tX, ¤tY); @@ -704,22 +707,9 @@ void wxWindow::SetSize(const int x, const int y, const int width, const int heig HWND hWnd = (HWND) GetHWND(); if (hWnd) MoveWindow(hWnd, actualX, actualY, actualWidth, actualHeight, (BOOL)TRUE); - -/* Not needed? should be called anyway via MoveWindow - if (!(width == -1) && (height == -1)) - { -#if WXWIN_COMPATIBILITY - GetEventHandler()->OldOnSize(width, height); -#else - wxSizeEvent event(wxSize(width, height), m_windowId); - event.eventObject = this; - GetEventHandler()->ProcessEvent(event); -#endif - } -*/ } -void wxWindow::SetClientSize(const int width, const int height) +void wxWindow::SetClientSize(int width, int height) { wxWindow *parent = GetParent(); HWND hWnd = (HWND) GetHWND(); @@ -749,16 +739,13 @@ void wxWindow::SetClientSize(const int width, const int height) } MoveWindow(hWnd, point.x, point.y, actual_width, actual_height, (BOOL)TRUE); -#if WXWIN_COMPATIBILITY - GetEventHandler()->OldOnSize(width, height); -#else + wxSizeEvent event(wxSize(width, height), m_windowId); - event.m_eventObject = this; + event.SetEventObject(this); GetEventHandler()->ProcessEvent(event); -#endif } -bool wxWindow::Show(const bool show) +bool wxWindow::Show(bool show) { HWND hWnd = (HWND) GetHWND(); int cshow; @@ -806,7 +793,7 @@ int wxWindow::GetCharWidth(void) const } void wxWindow::GetTextExtent(const wxString& string, int *x, int *y, - int *descent, int *externalLeading, const wxFont *theFont, const bool) const + int *descent, int *externalLeading, const wxFont *theFont, bool) const { wxFont *fontToUse = (wxFont *)theFont; if (!fontToUse) @@ -819,11 +806,8 @@ void wxWindow::GetTextExtent(const wxString& string, int *x, int *y, HFONT was = 0; if (fontToUse && fontToUse->Ok()) { -// fontToUse->UseResource(); - -// fontToUse->RealizeResource(); if ((fnt=(HFONT) fontToUse->GetResourceHandle())) - was = SelectObject(dc,fnt) ; + was = (HFONT) SelectObject(dc,fnt) ; } SIZE sizeRect; @@ -845,23 +829,7 @@ void wxWindow::GetTextExtent(const wxString& string, int *x, int *y, // fontToUse->ReleaseResource(); } -#if WXWIN_COMPATIBILITY -void wxWindow::GetTextExtent(const wxString& string, float *x, float *y, - float *descent, - float *externalLeading, - const wxFont *theFont, const bool use16) const - { - int x1, y1, descent1, externalLeading1; - GetTextExtent(string, &x1, &y1, &descent1, &externalLeading1, theFont, use16); - *x = x1; *y = y1; - if ( descent ) - *descent = descent1; - if ( externalLeading ) - *externalLeading = externalLeading1; - } -#endif - -void wxWindow::Refresh(const bool eraseBack, const wxRectangle *rect) +void wxWindow::Refresh(bool eraseBack, const wxRectangle *rect) { HWND hWnd = (HWND) GetHWND(); if (hWnd) @@ -881,42 +849,11 @@ void wxWindow::Refresh(const bool eraseBack, const wxRectangle *rect) } } -// TODO: Are these really necessary now? -/* -WXHDC wxWindow::GetHDC(void) const -{ - wxWindow *nonConst = (wxWindow *)this; - if (m_paintHDC) - return(m_paintHDC) ; - nonConst->m_tempHDC = (WXHDC) ::GetDC((HWND) GetHWND()) ; - return(m_tempHDC) ; -} - -void wxWindow::ReleaseHDC(void) -{ - // We're within an OnPaint: it'll be released. - if (m_paintHDC) - return ; - - ::ReleaseDC((HWND) GetHWND(),(HDC) m_tempHDC) ; -} -*/ - // Hook for new window just as it's being created, // when the window isn't yet associated with the handle wxWindow *wxWndHook = NULL; -/* -#if HAVE_SOCKET -// DDE Interface Handler -extern "C" { - long ddeWindowProc(HWND hwnd,UINT message,WPARAM wparam,LPARAM lparam); - void __ddeUnblock(HWND hWnd, WPARAM wParam); -}; -#endif -*/ - -// Main Windows 3 window proc +// Main window proc LRESULT APIENTRY _EXPORT wxWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { wxWindow *wnd = wxFindWinFromHandle((WXHWND) hWnd); @@ -928,7 +865,7 @@ LRESULT APIENTRY _EXPORT wxWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA wxWndHook = NULL; wnd->m_hWnd = (WXHWND) hWnd; } -#if (DEBUG > 1) +#if (WXDEBUG > 1) wxDebugMsg("hWnd = %d, m_hWnd = %d, msg = %d\n", hWnd, m_hWnd, message); #endif // Stop right here if we don't have a valid handle @@ -945,12 +882,6 @@ LRESULT APIENTRY _EXPORT wxWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA wnd->m_lastMsg = message; wnd->m_lastWParam = wParam; wnd->m_lastLParam = lParam; -/* Don't know why this was here - if (message == WM_SETFONT) - return 0; - else if (message == WM_INITDIALOG) - return TRUE; -*/ } if (wnd) return wnd->MSWWindowProc(message, wParam, lParam); @@ -968,68 +899,14 @@ LRESULT APIENTRY _EXPORT wxWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA // Main Windows 3 window proc long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) { -#if 0 - switch (message) - { - case WM_INITDIALOG: - case WM_ACTIVATE: - case WM_SETFOCUS: - case WM_KILLFOCUS: - case WM_CREATE: - case WM_PAINT: - case WM_QUERYDRAGICON: - case WM_SIZE: - case WM_RBUTTONDOWN: - case WM_RBUTTONUP: - case WM_RBUTTONDBLCLK: - case WM_MBUTTONDOWN: - case WM_MBUTTONUP: - case WM_MBUTTONDBLCLK: - case WM_LBUTTONDOWN: - case WM_LBUTTONUP: - case WM_LBUTTONDBLCLK: - case WM_MOUSEMOVE: -// case WM_DESTROY: - case WM_COMMAND: - case WM_NOTIFY: - case WM_MENUSELECT: - case WM_INITMENUPOPUP: - case WM_DRAWITEM: - case WM_MEASUREITEM: - case WM_KEYDOWN: - case WM_KEYUP: - case WM_CHAR: // Always an ASCII character - case WM_HSCROLL: - case WM_VSCROLL: - case WM_CTLCOLORBTN: - case WM_CTLCOLORDLG: - case WM_CTLCOLORLISTBOX: - case WM_CTLCOLORMSGBOX: - case WM_CTLCOLORSCROLLBAR: - case WM_CTLCOLORSTATIC: - case WM_CTLCOLOREDIT: - case WM_SYSCOLORCHANGE: - case WM_ERASEBKGND: - case WM_MDIACTIVATE: - case WM_DROPFILES: - case WM_QUERYENDSESSION: -// case WM_CLOSE: - case WM_GETMINMAXINFO: - return MSWDefWindowProc(message, wParam, lParam ); - } -#endif - + #ifdef __WXDEBUG__ + wxLogTrace(wxTraceMessages, "Processing %s", GetMessageName(message)); + #endif // WXDEBUG HWND hWnd = (HWND)m_hWnd; switch (message) { -/* - case WM_SETFONT: - { - return 0; - } -*/ case WM_ACTIVATE: { #ifdef __WIN32__ @@ -1065,27 +942,27 @@ long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) return MSWDefWindowProc(message, wParam, lParam ); break; } - case WM_CREATE: - { - MSWOnCreate((WXLPCREATESTRUCT) (LPCREATESTRUCT)lParam); - return 0; - break; - } - case WM_SHOWWINDOW: - { - MSWOnShow((wParam != 0), (int) lParam); - break; - } - case WM_PAINT: - { + case WM_CREATE: + { + MSWOnCreate((WXLPCREATESTRUCT) (LPCREATESTRUCT)lParam); + return 0; + break; + } + case WM_SHOWWINDOW: + { + MSWOnShow((wParam != 0), (int) lParam); + break; + } + case WM_PAINT: + { if (MSWOnPaint()) return 0; else return MSWDefWindowProc(message, wParam, lParam ); break; } - case WM_QUERYDRAGICON: - { - HICON hIcon = 0; + case WM_QUERYDRAGICON: + { + HICON hIcon = 0; if ((hIcon = (HICON) MSWOnQueryDragIcon())) return (long)hIcon; else return MSWDefWindowProc(message, wParam, lParam ); @@ -1244,7 +1121,7 @@ long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) break; } case WM_COMMAND: - { + { #ifdef __WIN32__ WORD id = LOWORD(wParam); HWND hwnd = (HWND)lParam; @@ -1257,10 +1134,10 @@ long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) if (!MSWOnCommand(id, cmd, (WXHWND) hwnd)) return MSWDefWindowProc(message, wParam, lParam ); break; - } + } #if defined(__WIN95__) case WM_NOTIFY: - { + { if (!MSWOnNotify(wParam, lParam)) return MSWDefWindowProc(message, wParam, lParam ); break; @@ -1295,31 +1172,33 @@ long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) } case WM_KEYDOWN: - { - // these keys are not interesting to the application (@@ or are they?) + // we consider these message "not interesting" if ( wParam == VK_SHIFT || wParam == VK_CONTROL ) return Default(); - + // Avoid duplicate messages to OnChar - if ((wParam == VK_ESCAPE) || (wParam == VK_SPACE) || - (wParam == VK_RETURN) || (wParam == VK_BACK) || - (wParam == VK_TAB)) + if ( (wParam != VK_ESCAPE) && (wParam != VK_SPACE) && + (wParam != VK_RETURN) && (wParam != VK_BACK) && + (wParam != VK_TAB) ) + { + MSWOnChar((WORD)wParam, lParam); + if ( ::GetKeyState(VK_CONTROL) & 0x100 ) + return Default(); + } + else if ( ::GetKeyState(VK_CONTROL) & 0x100 ) + MSWOnChar((WORD)wParam, lParam); + else return Default(); - - MSWOnChar((WORD)wParam, lParam); - //VZ: commented - what is it for? - //if (::GetKeyState(VK_CONTROL)&0x100?TRUE:FALSE) - // return Default(); break; - } - // VZ: WM_KEYUP not processed + case WM_KEYUP: + break; case WM_CHAR: // Always an ASCII character - { - MSWOnChar((WORD)wParam, lParam, TRUE); - break; - } + { + MSWOnChar((WORD)wParam, lParam, TRUE); + break; + } case WM_HSCROLL: { @@ -1351,68 +1230,68 @@ long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) } #ifdef __WIN32__ case WM_CTLCOLORBTN: - { + { int nCtlColor = CTLCOLOR_BTN; HWND control = (HWND)lParam; HDC pDC = (HDC)wParam; return (DWORD)MSWOnCtlColor((WXHDC) pDC, (WXHWND) control, nCtlColor, message, wParam, lParam); break; - } + } case WM_CTLCOLORDLG: - { + { int nCtlColor = CTLCOLOR_DLG; HWND control = (HWND)lParam; HDC pDC = (HDC)wParam; return (DWORD)MSWOnCtlColor((WXHDC) pDC, (WXHWND) control, nCtlColor, message, wParam, lParam);\ break; - } + } case WM_CTLCOLORLISTBOX: - { + { int nCtlColor = CTLCOLOR_LISTBOX; HWND control = (HWND)lParam; HDC pDC = (HDC)wParam; return (DWORD)MSWOnCtlColor((WXHDC) pDC, (WXHWND) control, nCtlColor, message, wParam, lParam); break; - } + } case WM_CTLCOLORMSGBOX: - { + { int nCtlColor = CTLCOLOR_MSGBOX; HWND control = (HWND)lParam; HDC pDC = (HDC)wParam; return (DWORD)MSWOnCtlColor((WXHDC) pDC, (WXHWND) control, nCtlColor, message, wParam, lParam); break; - } + } case WM_CTLCOLORSCROLLBAR: - { + { int nCtlColor = CTLCOLOR_SCROLLBAR; HWND control = (HWND)lParam; HDC pDC = (HDC)wParam; return (DWORD)MSWOnCtlColor((WXHDC) pDC, (WXHWND) control, nCtlColor, message, wParam, lParam); break; - } + } case WM_CTLCOLORSTATIC: - { + { int nCtlColor = CTLCOLOR_STATIC; HWND control = (HWND)lParam; HDC pDC = (HDC)wParam; return (DWORD)MSWOnCtlColor((WXHDC) pDC, (WXHWND) control, nCtlColor, message, wParam, lParam); break; - } + } case WM_CTLCOLOREDIT: - { + { int nCtlColor = CTLCOLOR_EDIT; HWND control = (HWND)lParam; HDC pDC = (HDC)wParam; return (DWORD)MSWOnCtlColor((WXHDC) pDC, (WXHWND) control, nCtlColor, message, wParam, lParam); break; - } + } #else case WM_CTLCOLOR: { @@ -1461,15 +1340,15 @@ long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) { MSWOnDropFiles(wParam); break; - } + } case WM_INITDIALOG: { return 0; // MSWOnInitDialog((WXHWND)(HWND)wParam); break; - } + } case WM_QUERYENDSESSION: { - // Same as WM_CLOSE, but inverted results. Thx Microsoft :-) + // Same as WM_CLOSE, but inverted results. Thx Microsoft :-) return MSWOnClose(); break; } @@ -1497,6 +1376,9 @@ long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) break; } + case WM_GETDLGCODE: + return MSWGetDlgCode(); + /* #if HAVE_SOCKET case WM_TIMER: @@ -1553,7 +1435,7 @@ void wxWindow::MSWDestroyWindow(void) { #if 0 -#if DEBUG > 1 +#if WXDEBUG > 1 wxDebugMsg("wxWindow::MSWDestroyWindow %d\n", handle); #endif MSWDetachWindowMenu(); @@ -1576,9 +1458,9 @@ void wxWindow::MSWDestroyWindow(void) #endif } -void wxWindow::MSWCreate(const int id, wxWindow *parent, const char *wclass, wxWindow *wx_win, const char *title, - const int x, const int y, const int width, const int height, - const WXDWORD style, const char *dialog_template, const WXDWORD extendedStyle) +void wxWindow::MSWCreate(int id, wxWindow *parent, const char *wclass, wxWindow *wx_win, const char *title, + int x, int y, int width, int height, + WXDWORD style, const char *dialog_template, WXDWORD extendedStyle) { bool is_dialog = (dialog_template != NULL); int x1 = CW_USEDEFAULT; @@ -1658,7 +1540,7 @@ void wxWindow::MSWCreate(const int id, wxWindow *parent, const char *wclass, wxW wxWndHook = NULL; wxWinHandleList->Append((long)m_hWnd, this); -#if DEBUG > 1 +#if WXDEBUG > 1 wxDebugMsg("wxWindow::MSWCreate %d\n", m_hWnd); #endif } @@ -1669,7 +1551,7 @@ void wxWindow::MSWOnCreate(WXLPCREATESTRUCT WXUNUSED(cs)) bool wxWindow::MSWOnClose(void) { -#if DEBUG > 1 +#if WXDEBUG > 1 wxDebugMsg("wxWindow::MSWOnClose %d\n", handle); #endif return FALSE; @@ -1677,7 +1559,7 @@ bool wxWindow::MSWOnClose(void) bool wxWindow::MSWOnDestroy(void) { -#if DEBUG > 1 +#if WXDEBUG > 1 wxDebugMsg("wxWindow::MSWOnDestroy %d\n", handle); #endif // delete our drop target if we've got one @@ -1695,7 +1577,7 @@ bool wxWindow::MSWOnDestroy(void) // Deal with child commands from buttons etc. -bool wxWindow::MSWOnNotify(const WXWPARAM wParam, const WXLPARAM lParam) +bool wxWindow::MSWOnNotify(WXWPARAM wParam, WXLPARAM lParam) { #if defined(__WIN95__) // Find a child window to send the notification to, e.g. a toolbar. @@ -1736,39 +1618,33 @@ bool wxWindow::MSWOnNotify(const WXWPARAM wParam, const WXLPARAM lParam) return FALSE; } -void wxWindow::MSWOnMenuHighlight(const WXWORD WXUNUSED(item), const WXWORD WXUNUSED(flags), const WXHMENU WXUNUSED(sysmenu)) +void wxWindow::MSWOnMenuHighlight(WXWORD WXUNUSED(item), WXWORD WXUNUSED(flags), WXHMENU WXUNUSED(sysmenu)) { -#if DEBUG > 1 +#if WXDEBUG > 1 wxDebugMsg("wxWindow::MSWOnMenuHighlight %d\n", handle); #endif } -void wxWindow::MSWOnInitMenuPopup(const WXHMENU menu, const int pos, const bool isSystem) +void wxWindow::MSWOnInitMenuPopup(WXHMENU menu, int pos, bool isSystem) { - if (!isSystem) - OldOnInitMenuPopup(pos); } -bool wxWindow::MSWOnActivate(const int state, const bool WXUNUSED(minimized), const WXHWND WXUNUSED(activate)) +bool wxWindow::MSWOnActivate(int state, bool WXUNUSED(minimized), WXHWND WXUNUSED(activate)) { -#if DEBUG > 1 +#if WXDEBUG > 1 wxDebugMsg("wxWindow::MSWOnActivate %d\n", handle); #endif -#if WXWIN_COMPATIBILITY - GetEventHandler()->OldOnActivate(((state == WA_ACTIVE) || (state == WA_CLICKACTIVE))); -#else wxActivateEvent event(wxEVT_ACTIVATE, ((state == WA_ACTIVE) || (state == WA_CLICKACTIVE)), m_windowId); - event.m_eventObject = this; + event.SetEventObject(this); GetEventHandler()->ProcessEvent(event); -#endif return 0; } -bool wxWindow::MSWOnSetFocus(const WXHWND WXUNUSED(hwnd)) +bool wxWindow::MSWOnSetFocus(WXHWND WXUNUSED(hwnd)) { -#if DEBUG > 1 +#if WXDEBUG > 1 wxDebugMsg("wxWindow::MSWOnSetFocus %d\n", m_hWnd); #endif // Deal with caret @@ -1779,19 +1655,16 @@ bool wxWindow::MSWOnSetFocus(const WXHWND WXUNUSED(hwnd)) ::ShowCaret((HWND) GetHWND()); } -#if WXWIN_COMPATIBILITY - GetEventHandler()->OldOnSetFocus(); -#else wxFocusEvent event(wxEVT_SET_FOCUS, m_windowId); - event.m_eventObject = this; - GetEventHandler()->ProcessEvent(event); -#endif - return TRUE; + event.SetEventObject(this); + if (!GetEventHandler()->ProcessEvent(event)) + Default(); + return TRUE; } -bool wxWindow::MSWOnKillFocus(const WXHWND WXUNUSED(hwnd)) +bool wxWindow::MSWOnKillFocus(WXHWND WXUNUSED(hwnd)) { -#if DEBUG > 1 +#if WXDEBUG > 1 wxDebugMsg("wxWindow::MSWOnKillFocus %d\n", m_hWnd); #endif // Deal with caret @@ -1800,23 +1673,20 @@ bool wxWindow::MSWOnKillFocus(const WXHWND WXUNUSED(hwnd)) ::DestroyCaret(); } -#if WXWIN_COMPATIBILITY - GetEventHandler()->OldOnKillFocus(); -#else wxFocusEvent event(wxEVT_KILL_FOCUS, m_windowId); - event.m_eventObject = this; - GetEventHandler()->ProcessEvent(event); -#endif + event.SetEventObject(this); + if (!GetEventHandler()->ProcessEvent(event)) + Default(); return TRUE; } -void wxWindow::MSWOnDropFiles(const WXWPARAM wParam) +void wxWindow::MSWOnDropFiles(WXWPARAM wParam) { -#if DEBUG > 1 +#if WXDEBUG > 1 wxDebugMsg("wxWindow::MSWOnDropFiles %d\n", m_hWnd); #endif - HANDLE hFilesInfo = (HANDLE)wParam; + HDROP hFilesInfo = (HDROP) wParam; POINT dropPoint; DragQueryPoint(hFilesInfo, (LPPOINT) &dropPoint); @@ -1839,12 +1709,13 @@ void wxWindow::MSWOnDropFiles(const WXWPARAM wParam) event.m_eventObject = this; event.m_pos.x = dropPoint.x; event.m_pos.x = dropPoint.y; - GetEventHandler()->ProcessEvent(event); + if (!GetEventHandler()->ProcessEvent(event)) + Default(); delete[] files; } -bool wxWindow::MSWOnDrawItem(const int id, WXDRAWITEMSTRUCT *itemStruct) +bool wxWindow::MSWOnDrawItem(int id, WXDRAWITEMSTRUCT *itemStruct) { #if USE_OWNER_DRAWN if ( id == 0 ) { // is it a menu item? @@ -1877,7 +1748,7 @@ bool wxWindow::MSWOnDrawItem(const int id, WXDRAWITEMSTRUCT *itemStruct) return FALSE; } -bool wxWindow::MSWOnMeasureItem(const int id, WXMEASUREITEMSTRUCT *itemStruct) +bool wxWindow::MSWOnMeasureItem(int id, WXMEASUREITEMSTRUCT *itemStruct) { #if USE_OWNER_DRAWN if ( id == 0 ) { // is it a menu item? @@ -1901,10 +1772,10 @@ bool wxWindow::MSWOnMeasureItem(const int id, WXMEASUREITEMSTRUCT *itemStruct) return FALSE; } -WXHBRUSH wxWindow::MSWOnCtlColor(const WXHDC pDC, const WXHWND pWnd, const WXUINT nCtlColor, - const WXUINT message, const WXWPARAM wParam, const WXLPARAM lParam) +WXHBRUSH wxWindow::MSWOnCtlColor(WXHDC pDC, WXHWND pWnd, WXUINT nCtlColor, + WXUINT message, WXWPARAM wParam, WXLPARAM lParam) { -#if DEBUG > 1 +#if WXDEBUG > 1 wxDebugMsg("wxWindow::MSWOnCtlColour %d\n", m_hWnd); #endif if (nCtlColor == CTLCOLOR_DLG) @@ -1928,13 +1799,13 @@ WXHBRUSH wxWindow::MSWOnCtlColor(const WXHDC pDC, const WXHWND pWnd, const WXUIN } // Define for each class of dialog and control -WXHBRUSH wxWindow::OnCtlColor(const WXHDC pDC, const WXHWND pWnd, const WXUINT nCtlColor, +WXHBRUSH wxWindow::OnCtlColor(WXHDC pDC, WXHWND pWnd, WXUINT nCtlColor, WXUINT message, WXWPARAM wParam, WXLPARAM lParam) { return (WXHBRUSH) MSWDefWindowProc(message, wParam, lParam); } -bool wxWindow::MSWOnColorChange(const WXHWND hWnd, const WXUINT message, const WXWPARAM wParam, const WXLPARAM lParam) +bool wxWindow::MSWOnColorChange(WXHWND hWnd, WXUINT message, WXWPARAM wParam, WXLPARAM lParam) { wxSysColourChangedEvent event; event.m_eventObject = this; @@ -1943,11 +1814,6 @@ bool wxWindow::MSWOnColorChange(const WXHWND hWnd, const WXUINT message, const W if (GetEventHandler()->ProcessEvent(event)) return 0; -#if WXWIN_COMPATIBILITY - if (GetEventHandler()->OldOnSysColourChange()) - return 0; -#endif - // We didn't process it return 1; } @@ -1981,33 +1847,89 @@ long wxWindow::MSWDefWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) long wxWindow::Default() { - return this->MSWDefWindowProc(m_lastMsg, m_lastWParam, m_lastLParam); + // Ignore 'fake' events (perhaps generated as a result of a separate real event) + if (m_lastMsg == 0) + return 0; + + #ifdef __WXDEBUG__ + wxLogTrace(wxTraceMessages, "Forwarding %s to DefWindowProc.", + GetMessageName(m_lastMsg)); + #endif // WXDEBUG + + return this->MSWDefWindowProc(m_lastMsg, m_lastWParam, m_lastLParam); } bool wxWindow::MSWProcessMessage(WXMSG* pMsg) { - if (!m_hWnd) - return FALSE; - else - { - // Suggestion by Andrew Davison to allow - // a panel to accept character input in user edit mode - - // OK, what we probably want to do here for wxWin 2.0 - // is have a window style to indicate whether the window - // should process dialog-style input, since we can't - // otherwise tell whether it's supposed to do tab traversal - // or not. - if (GetWindowStyleFlag() & wxTAB_TRAVERSAL) - return (::IsDialogMessage((HWND) m_hWnd, (MSG *)pMsg) != 0); - else - return FALSE; + if ( m_hWnd != 0 && (GetWindowStyleFlag() & wxTAB_TRAVERSAL) ) { + // intercept dialog navigation keys + MSG *msg = (MSG *)pMsg; + bool bProcess = TRUE; + if ( msg->message != WM_KEYDOWN ) + bProcess = FALSE; + + if ( (HIWORD(msg->lParam) & KF_ALTDOWN) == KF_ALTDOWN ) + bProcess = FALSE; + + bool bCtrlDown = (::GetKeyState(VK_CONTROL) & 0x100) != 0; + + // WM_GETDLGCODE: if the control wants it for itself, don't process it + // (except for Ctrl-Tab combination which is always processed) + LONG lDlgCode; + if ( bProcess && !bCtrlDown ) { + lDlgCode = ::SendMessage(msg->hwnd, WM_GETDLGCODE, 0, 0); + } + + bool bForward; + if ( bProcess ) { + switch ( msg->wParam ) { + case VK_TAB: + if ( lDlgCode & DLGC_WANTTAB ) + 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_DOWN: + case VK_RIGHT: + if ( lDlgCode & DLGC_WANTARROWS || bCtrlDown ) + bProcess = FALSE; + else + bForward = TRUE; + break; + + default: + bProcess = FALSE; + } + } + + if ( bProcess ) { + wxNavigationKeyEvent event; + event.SetDirection(bForward); + event.SetWindowChange(bCtrlDown); + event.SetEventObject(this); + + if ( GetEventHandler()->ProcessEvent(event) ) + return TRUE; + } + + return ::IsDialogMessage((HWND)GetHWND(), msg) != 0; } + + return FALSE; } -long wxWindow::MSWOnMDIActivate(const long WXUNUSED(flag), const WXHWND WXUNUSED(activate), const WXHWND WXUNUSED(deactivate)) +long wxWindow::MSWOnMDIActivate(long WXUNUSED(flag), WXHWND WXUNUSED(activate), WXHWND WXUNUSED(deactivate)) { -#if DEBUG > 1 +#if WXDEBUG > 1 wxDebugMsg("wxWindow::MSWOnMDIActivate %d\n", m_hWnd); #endif return 1; @@ -2034,67 +1956,19 @@ void wxWindow::MSWDetachWindowMenu(void) bool wxWindow::MSWOnPaint(void) { -#if WXWIN_COMPATIBILITY - GetEventHandler()->OldOnPaint(); -#else wxPaintEvent event(m_windowId); - event.m_eventObject = this; - GetEventHandler()->ProcessEvent(event); -#endif + event.SetEventObject(this); + if (!GetEventHandler()->ProcessEvent(event)) + Default(); return TRUE; - -#if 0 - -#if DEBUG > 1 - wxDebugMsg("wxWindow::MSWOnPaint %d\n", m_hWnd); -#endif -#ifdef __WIN32__ - HRGN tRgn=CreateRectRgn(0,0,0,0); //Dummy call to get a handle! - if (GetUpdateRgn(m_hWnd, tRgn, FALSE)) -#else - RECT tRect; - if (GetUpdateRect((HWND) m_hWnd, &tRect, FALSE)) -#endif - { - PAINTSTRUCT ps; - // Hold a pointer to the dc so long as the OnPaint() message - // is being processed - HDC dc = BeginPaint(m_hWnd, &ps); - bool isPanel = IsKindOf(CLASSINFO(wxWindow)); - m_paintHDC = (WXHDC) dc; - RECT updateRect1 = ps.rcPaint; - m_updateRect.x = updateRect1.left; - m_updateRect.y = updateRect1.top; - m_updateRect.width = updateRect1.right - updateRect1.left; - m_updateRect.height = updateRect1.bottom - updateRect1.top; - - GetEventHandler()->OldOnPaint(); - - m_paintHDC = 0; - EndPaint((HWND) m_hWnd, &ps); -#ifdef __WIN32__ - DeleteObject(tRgn); -#endif - - if (isPanel) - // Do default processing - return FALSE; - else - return TRUE; - } -#ifdef __WIN32__ - DeleteObject(tRgn); -#endif - return FALSE; -#endif } -void wxWindow::MSWOnSize(const int w, const int h, const WXUINT WXUNUSED(flag)) +void wxWindow::MSWOnSize(int w, int h, WXUINT WXUNUSED(flag)) { if (m_inOnSize) return; -#if DEBUG > 1 +#if WXDEBUG > 1 wxDebugMsg("wxWindow::MSWOnSize %d\n", m_hWnd); #endif if (!m_hWnd) @@ -2102,13 +1976,10 @@ void wxWindow::MSWOnSize(const int w, const int h, const WXUINT WXUNUSED(flag)) m_inOnSize = TRUE; -#if WXWIN_COMPATIBILITY - GetEventHandler()->OldOnSize(w, h); -#else wxSizeEvent event(wxSize(w, h), m_windowId); - event.m_eventObject = this; - GetEventHandler()->ProcessEvent(event); -#endif + event.SetEventObject(this); + if (!GetEventHandler()->ProcessEvent(event)) + Default(); m_inOnSize = FALSE; } @@ -2119,9 +1990,9 @@ void wxWindow::MSWOnWindowPosChanging(void *WXUNUSED(lpPos)) } // Deal with child commands from buttons etc. -bool wxWindow::MSWOnCommand(const WXWORD id, const WXWORD cmd, const WXHWND WXUNUSED(control)) +bool wxWindow::MSWOnCommand(WXWORD id, WXWORD cmd, WXHWND WXUNUSED(control)) { -#if DEBUG > 1 +#if WXDEBUG > 1 wxDebugMsg("wxWindow::MSWOnCommand\n"); #endif if (wxCurrentPopupMenu) @@ -2131,7 +2002,7 @@ bool wxWindow::MSWOnCommand(const WXWORD id, const WXWORD cmd, const WXHWND WXUN bool succ = popupMenu->MSWCommand(cmd, id); return succ; } -#if DEBUG > 1 +#if WXDEBUG > 1 char buf[80]; sprintf(buf, "Looking for item %d...\n", id); wxDebugMsg(buf); @@ -2141,7 +2012,7 @@ bool wxWindow::MSWOnCommand(const WXWORD id, const WXWORD cmd, const WXHWND WXUN if (item) { bool value = item->MSWCommand(cmd, id); -#if DEBUG > 1 +#if WXDEBUG > 1 if (value) wxDebugMsg("MSWCommand succeeded\n"); else @@ -2151,7 +2022,7 @@ bool wxWindow::MSWOnCommand(const WXWORD id, const WXWORD cmd, const WXHWND WXUN } else { -#if DEBUG > 1 +#if WXDEBUG > 1 wxDebugMsg("Could not find item!\n"); char buf[100]; wxDebugMsg("Item ids for this panel:\n"); @@ -2204,30 +2075,9 @@ long wxWindow::MSWOnSysCommand(WXWPARAM wParam, WXLPARAM lParam) return 0; } -void wxWindow::MSWOnLButtonDown(const int x, const int y, const WXUINT flags) +void wxWindow::MSWOnLButtonDown(int x, int y, WXUINT flags) { -#if 0 // defined(__WIN32__) && !defined(WIN95) - // DClick not clean supported on Win3.1, except if someone know - // how to emulate Sleep()... - // This means that your app will receive Down-Up-Dclick sequences - // rather than Dclick - if (m_doubleClickAllowed) - { - UINT time = GetDoubleClickTime() ; - Sleep(time) ; - MSG dummy ; - if (PeekMessage(&dummy,m_hWnd, - WM_LBUTTONDBLCLK,WM_LBUTTONDBLCLK, - PM_NOREMOVE) - ) - { - PeekMessage(&dummy,m_hWnd,WM_LBUTTONUP,WM_LBUTTONUP,PM_REMOVE); - return; - } - } -#endif - - wxMouseEvent event(wxEVENT_TYPE_LEFT_DOWN); + wxMouseEvent event(wxEVT_LEFT_DOWN); event.m_x = x; event.m_y = y; event.m_shiftDown = ((flags & MK_SHIFT) != 0); @@ -2239,12 +2089,14 @@ void wxWindow::MSWOnLButtonDown(const int x, const int y, const WXUINT flags) event.m_eventObject = this; m_lastXPos = event.m_x; m_lastYPos = event.m_y; m_lastEvent = wxEVENT_TYPE_LEFT_DOWN; - GetEventHandler()->OldOnMouseEvent(event); + + if (!GetEventHandler()->ProcessEvent(event)) + Default(); } -void wxWindow::MSWOnLButtonUp(const int x, const int y, const WXUINT flags) +void wxWindow::MSWOnLButtonUp(int x, int y, WXUINT flags) { - wxMouseEvent event(wxEVENT_TYPE_LEFT_UP); + wxMouseEvent event(wxEVT_LEFT_UP); event.m_x = x; event.m_y = y; event.m_shiftDown = ((flags & MK_SHIFT) != 0); @@ -2255,16 +2107,15 @@ void wxWindow::MSWOnLButtonUp(const int x, const int y, const WXUINT flags) event.SetTimestamp(wxApp::sm_lastMessageTime); /* MATTHEW: timeStamp */ event.m_eventObject = this; - m_lastXPos = event.m_x; m_lastYPos = event.m_y; m_lastEvent = wxEVENT_TYPE_LEFT_UP; + m_lastXPos = event.m_x; m_lastYPos = event.m_y; m_lastEvent = wxEVT_LEFT_UP; - GetEventHandler()->OldOnMouseEvent(event); + if (!GetEventHandler()->ProcessEvent(event)) + Default(); } -void wxWindow::MSWOnLButtonDClick(const int x, const int y, const WXUINT flags) +void wxWindow::MSWOnLButtonDClick(int x, int y, WXUINT flags) { - /* MATTHEW: If dclick not allowed, generate another single-click */ - wxMouseEvent event(m_doubleClickAllowed ? - wxEVENT_TYPE_LEFT_DCLICK : wxEVENT_TYPE_LEFT_DOWN); + wxMouseEvent event(wxEVT_LEFT_DCLICK); event.m_x = x; event.m_y = y; event.m_shiftDown = ((flags & MK_SHIFT) != 0); @@ -2275,36 +2126,15 @@ void wxWindow::MSWOnLButtonDClick(const int x, const int y, const WXUINT flags) event.SetTimestamp(wxApp::sm_lastMessageTime); /* MATTHEW: timeStamp */ event.m_eventObject = this; - m_lastXPos = event.m_x; m_lastYPos = event.m_y; m_lastEvent = wxEVENT_TYPE_LEFT_DCLICK; + m_lastXPos = event.m_x; m_lastYPos = event.m_y; m_lastEvent = wxEVT_LEFT_DCLICK; -// if (m_doubleClickAllowed) - GetEventHandler()->OldOnMouseEvent(event); + if (!GetEventHandler()->ProcessEvent(event)) + Default(); } -void wxWindow::MSWOnMButtonDown(const int x, const int y, const WXUINT flags) +void wxWindow::MSWOnMButtonDown(int x, int y, WXUINT flags) { -#if 0 // defined(__WIN32__) && !defined(__WIN95__) - // DClick not clean supported on Win3.1, except if someone know - // how to emulate Sleep()... - // This means that your app will receive Down-Up-Dclick sequences - // rather than Dclick - if (m_doubleClickAllowed) - { - UINT time = GetDoubleClickTime() ; - Sleep(time) ; - MSG dummy ; - if (PeekMessage(&dummy,m_hWnd, - WM_MBUTTONDBLCLK,WM_MBUTTONDBLCLK, - PM_NOREMOVE) - ) - { - PeekMessage(&dummy,m_hWnd,WM_MBUTTONUP,WM_MBUTTONUP,PM_REMOVE); - return; - } - } -#endif - - wxMouseEvent event(wxEVENT_TYPE_MIDDLE_DOWN); + wxMouseEvent event(wxEVT_MIDDLE_DOWN); event.m_x = x; event.m_y = y; event.m_shiftDown = ((flags & MK_SHIFT) != 0); @@ -2315,14 +2145,16 @@ void wxWindow::MSWOnMButtonDown(const int x, const int y, const WXUINT flags) event.SetTimestamp(wxApp::sm_lastMessageTime); /* MATTHEW: timeStamp */ event.m_eventObject = this; - m_lastXPos = event.m_x; m_lastYPos = event.m_y; m_lastEvent = wxEVENT_TYPE_LEFT_DOWN; - GetEventHandler()->OldOnMouseEvent(event); + m_lastXPos = event.m_x; m_lastYPos = event.m_y; m_lastEvent = wxEVT_MIDDLE_DOWN; + + if (!GetEventHandler()->ProcessEvent(event)) + Default(); } -void wxWindow::MSWOnMButtonUp(const int x, const int y, const WXUINT flags) +void wxWindow::MSWOnMButtonUp(int x, int y, WXUINT flags) { //wxDebugMsg("MButtonUp\n") ; - wxMouseEvent event(wxEVENT_TYPE_MIDDLE_UP); + wxMouseEvent event(wxEVT_MIDDLE_UP); event.m_x = x; event.m_y = y; event.m_shiftDown = ((flags & MK_SHIFT) != 0); @@ -2333,16 +2165,15 @@ void wxWindow::MSWOnMButtonUp(const int x, const int y, const WXUINT flags) event.SetTimestamp(wxApp::sm_lastMessageTime); /* MATTHEW: timeStamp */ event.m_eventObject = this; - m_lastXPos = event.m_x; m_lastYPos = event.m_y; m_lastEvent = wxEVENT_TYPE_LEFT_UP; - GetEventHandler()->OldOnMouseEvent(event); + m_lastXPos = event.m_x; m_lastYPos = event.m_y; m_lastEvent = wxEVT_MIDDLE_UP; + + if (!GetEventHandler()->ProcessEvent(event)) + Default(); } -void wxWindow::MSWOnMButtonDClick(const int x, const int y, const WXUINT flags) +void wxWindow::MSWOnMButtonDClick(int x, int y, WXUINT flags) { -//wxDebugMsg("MButtonDClick\n") ; - /* MATTHEW: If dclick not allowed, generate another single-click */ - wxMouseEvent event((m_doubleClickAllowed) ? - wxEVENT_TYPE_MIDDLE_DCLICK : wxEVENT_TYPE_MIDDLE_DOWN); + wxMouseEvent event(wxEVT_MIDDLE_DCLICK); event.m_x = x; event.m_y = y; event.m_shiftDown = ((flags & MK_SHIFT) != 0); @@ -2353,35 +2184,15 @@ void wxWindow::MSWOnMButtonDClick(const int x, const int y, const WXUINT flags) event.SetTimestamp(wxApp::sm_lastMessageTime); /* MATTHEW: timeStamp */ event.m_eventObject = this; - m_lastXPos = event.m_x; m_lastYPos = event.m_y; m_lastEvent = wxEVENT_TYPE_LEFT_DCLICK; -// if (m_doubleClickAllowed) - GetEventHandler()->OldOnMouseEvent(event); + m_lastXPos = event.m_x; m_lastYPos = event.m_y; m_lastEvent = wxEVT_MIDDLE_DCLICK; + + if (!GetEventHandler()->ProcessEvent(event)) + Default(); } -void wxWindow::MSWOnRButtonDown(const int x, const int y, const WXUINT flags) +void wxWindow::MSWOnRButtonDown(int x, int y, WXUINT flags) { -#if 0 // defined(__WIN32__) && !defined(__WIN95__) - // DClick not clean supported on Win3.1, except if someone know - // how to emulate Sleep()... - // This means that your app will receive Down-Up-Dclick sequences - // rather than Dclick - if (m_doubleClickAllowed) - { - UINT time = GetDoubleClickTime() ; - Sleep(time) ; - MSG dummy ; - if (PeekMessage(&dummy,m_hWnd, - WM_RBUTTONDBLCLK,WM_RBUTTONDBLCLK, - PM_NOREMOVE) - ) - { - PeekMessage(&dummy,m_hWnd,WM_RBUTTONUP,WM_RBUTTONUP,PM_REMOVE); - return; - } - } -#endif - - wxMouseEvent event(wxEVENT_TYPE_RIGHT_DOWN); + wxMouseEvent event(wxEVT_RIGHT_DOWN); event.m_x = x; event.m_y = y; event.m_shiftDown = ((flags & MK_SHIFT) != 0); @@ -2392,13 +2203,15 @@ void wxWindow::MSWOnRButtonDown(const int x, const int y, const WXUINT flags) event.SetTimestamp(wxApp::sm_lastMessageTime); /* MATTHEW: timeStamp */ event.m_eventObject = this; - m_lastXPos = event.m_x; m_lastYPos = event.m_y; m_lastEvent = wxEVENT_TYPE_RIGHT_DOWN; - GetEventHandler()->OldOnMouseEvent(event); + m_lastXPos = event.m_x; m_lastYPos = event.m_y; m_lastEvent = wxEVT_RIGHT_DOWN; + + if (!GetEventHandler()->ProcessEvent(event)) + Default(); } -void wxWindow::MSWOnRButtonUp(const int x, const int y, const WXUINT flags) +void wxWindow::MSWOnRButtonUp(int x, int y, WXUINT flags) { - wxMouseEvent event(wxEVENT_TYPE_RIGHT_UP); + wxMouseEvent event(wxEVT_RIGHT_UP); event.m_x = x; event.m_y = y; event.m_shiftDown = ((flags & MK_SHIFT) != 0); @@ -2409,15 +2222,15 @@ void wxWindow::MSWOnRButtonUp(const int x, const int y, const WXUINT flags) event.m_eventObject = this; event.SetTimestamp(wxApp::sm_lastMessageTime); /* MATTHEW: timeStamp */ - m_lastXPos = event.m_x; m_lastYPos = event.m_y; m_lastEvent = wxEVENT_TYPE_RIGHT_UP; - GetEventHandler()->OldOnMouseEvent(event); + m_lastXPos = event.m_x; m_lastYPos = event.m_y; m_lastEvent = wxEVT_RIGHT_UP; + + if (!GetEventHandler()->ProcessEvent(event)) + Default(); } -void wxWindow::MSWOnRButtonDClick(const int x, const int y, const WXUINT flags) +void wxWindow::MSWOnRButtonDClick(int x, int y, WXUINT flags) { - /* MATTHEW: If dclick not allowed, generate another single-click */ - wxMouseEvent event((m_doubleClickAllowed) ? - wxEVENT_TYPE_RIGHT_DCLICK : wxEVENT_TYPE_RIGHT_DOWN); + wxMouseEvent event(wxEVT_RIGHT_DCLICK); event.m_x = x; event.m_y = y; event.m_shiftDown = ((flags & MK_SHIFT) != 0); @@ -2428,12 +2241,13 @@ void wxWindow::MSWOnRButtonDClick(const int x, const int y, const WXUINT flags) event.SetTimestamp(wxApp::sm_lastMessageTime); /* MATTHEW: timeStamp */ event.m_eventObject = this; - m_lastXPos = event.m_x; m_lastYPos = event.m_y; m_lastEvent = wxEVENT_TYPE_RIGHT_DCLICK; -// if (m_doubleClickAllowed) - GetEventHandler()->OldOnMouseEvent(event); + m_lastXPos = event.m_x; m_lastYPos = event.m_y; m_lastEvent = wxEVT_RIGHT_DCLICK; + + if (!GetEventHandler()->ProcessEvent(event)) + Default(); } -void wxWindow::MSWOnMouseMove(const int x, const int y, const WXUINT flags) +void wxWindow::MSWOnMouseMove(int x, int y, WXUINT flags) { // 'normal' move event... // Set cursor, but only if we're not in 'busy' mode @@ -2449,7 +2263,7 @@ void wxWindow::MSWOnMouseMove(const int x, const int y, const WXUINT flags) MSWOnMouseEnter(x, y, flags); } - wxMouseEvent event(wxEVENT_TYPE_MOTION); + wxMouseEvent event(wxEVT_MOTION); event.m_x = x; event.m_y = y; event.m_shiftDown = ((flags & MK_SHIFT) != 0); @@ -2463,21 +2277,23 @@ void wxWindow::MSWOnMouseMove(const int x, const int y, const WXUINT flags) // Window gets a click down message followed by a mouse move // message even if position isn't changed! We want to discard // the trailing move event if x and y are the same. - if ((m_lastEvent == wxEVENT_TYPE_RIGHT_DOWN || m_lastEvent == wxEVENT_TYPE_LEFT_DOWN || - m_lastEvent == wxEVENT_TYPE_MIDDLE_DOWN) && + if ((m_lastEvent == wxEVT_RIGHT_DOWN || m_lastEvent == wxEVT_LEFT_DOWN || + m_lastEvent == wxEVT_MIDDLE_DOWN) && (m_lastXPos == event.m_x && m_lastYPos == event.m_y)) { m_lastXPos = event.m_x; m_lastYPos = event.m_y; - m_lastEvent = wxEVENT_TYPE_MOTION; + m_lastEvent = wxEVT_MOTION; return; } - m_lastEvent = wxEVENT_TYPE_MOTION; + m_lastEvent = wxEVT_MOTION; m_lastXPos = event.m_x; m_lastYPos = event.m_y; - GetEventHandler()->OldOnMouseEvent(event); + + if (!GetEventHandler()->ProcessEvent(event)) + Default(); } -void wxWindow::MSWOnMouseEnter(const int x, const int y, const WXUINT flags) +void wxWindow::MSWOnMouseEnter(int x, int y, WXUINT flags) { wxMouseEvent event(wxEVT_ENTER_WINDOW); @@ -2492,10 +2308,12 @@ void wxWindow::MSWOnMouseEnter(const int x, const int y, const WXUINT flags) m_lastEvent = wxEVT_ENTER_WINDOW; m_lastXPos = event.m_x; m_lastYPos = event.m_y; - GetEventHandler()->OldOnMouseEvent(event); + // No message - ensure we don't try to call the default behaviour accidentally. + m_lastMsg = 0; + GetEventHandler()->ProcessEvent(event); } -void wxWindow::MSWOnMouseLeave(const int x, const int y, const WXUINT flags) +void wxWindow::MSWOnMouseLeave(int x, int y, WXUINT flags) { wxMouseEvent event(wxEVT_LEAVE_WINDOW); @@ -2510,10 +2328,12 @@ void wxWindow::MSWOnMouseLeave(const int x, const int y, const WXUINT flags) m_lastEvent = wxEVT_LEAVE_WINDOW; m_lastXPos = event.m_x; m_lastYPos = event.m_y; - GetEventHandler()->OldOnMouseEvent(event); + // No message - ensure we don't try to call the default behaviour accidentally. + m_lastMsg = 0; + GetEventHandler()->ProcessEvent(event); } -void wxWindow::MSWOnChar(const WXWORD wParam, const WXLPARAM lParam, const bool isASCII) +void wxWindow::MSWOnChar(WXWORD wParam, WXLPARAM lParam, bool isASCII) { int id; bool tempControlDown = FALSE; @@ -2575,16 +2395,12 @@ void wxWindow::MSWOnChar(const WXWORD wParam, const WXLPARAM lParam, const bool event.m_x = pt.x; event.m_y = pt.y; -#if WXWIN_COMPATIBILITY - GetEventHandler()->OldOnChar(event); -#else if (!GetEventHandler()->ProcessEvent(event)) Default(); -#endif } } -void wxWindow::MSWOnJoyDown(const int joystick, const int x, const int y, const WXUINT flags) +void wxWindow::MSWOnJoyDown(int joystick, int x, int y, WXUINT flags) { int buttons = 0; int change = 0; @@ -2613,7 +2429,7 @@ void wxWindow::MSWOnJoyDown(const int joystick, const int x, const int y, const GetEventHandler()->ProcessEvent(event); } -void wxWindow::MSWOnJoyUp(const int joystick, const int x, const int y, const WXUINT flags) +void wxWindow::MSWOnJoyUp(int joystick, int x, int y, WXUINT flags) { int buttons = 0; int change = 0; @@ -2642,7 +2458,7 @@ void wxWindow::MSWOnJoyUp(const int joystick, const int x, const int y, const WX GetEventHandler()->ProcessEvent(event); } -void wxWindow::MSWOnJoyMove(const int joystick, const int x, const int y, const WXUINT flags) +void wxWindow::MSWOnJoyMove(int joystick, int x, int y, WXUINT flags) { int buttons = 0; if (flags & JOY_BUTTON1) @@ -2661,7 +2477,7 @@ void wxWindow::MSWOnJoyMove(const int joystick, const int x, const int y, const GetEventHandler()->ProcessEvent(event); } -void wxWindow::MSWOnJoyZMove(const int joystick, const int z, const WXUINT flags) +void wxWindow::MSWOnJoyZMove(int joystick, int z, WXUINT flags) { int buttons = 0; if (flags & JOY_BUTTON1) @@ -2680,50 +2496,50 @@ void wxWindow::MSWOnJoyZMove(const int joystick, const int z, const WXUINT flags GetEventHandler()->ProcessEvent(event); } -void wxWindow::MSWOnVScroll(const WXWORD wParam, const WXWORD pos, const WXHWND control) +void wxWindow::MSWOnVScroll(WXWORD wParam, WXWORD pos, WXHWND control) { if (control) { wxWindow *child = wxFindWinFromHandle(control); - if ( child ) - child->MSWOnVScroll(wParam, pos, control); + if ( child ) + child->MSWOnVScroll(wParam, pos, control); return; } - wxScrollEvent event; - event.SetPosition(pos); - event.SetOrientation(wxVERTICAL); - event.m_eventObject = this; + wxScrollEvent event; + event.SetPosition(pos); + event.SetOrientation(wxVERTICAL); + event.m_eventObject = this; switch ( wParam ) { case SB_TOP: - event.m_eventType = wxEVENT_TYPE_SCROLL_TOP; + event.m_eventType = wxEVT_SCROLL_TOP; break; case SB_BOTTOM: - event.m_eventType = wxEVENT_TYPE_SCROLL_BOTTOM; + event.m_eventType = wxEVT_SCROLL_BOTTOM; break; case SB_LINEUP: - event.m_eventType = wxEVENT_TYPE_SCROLL_LINEUP; + event.m_eventType = wxEVT_SCROLL_LINEUP; break; case SB_LINEDOWN: - event.m_eventType = wxEVENT_TYPE_SCROLL_LINEDOWN; + event.m_eventType = wxEVT_SCROLL_LINEDOWN; break; case SB_PAGEUP: - event.m_eventType = wxEVENT_TYPE_SCROLL_PAGEUP; + event.m_eventType = wxEVT_SCROLL_PAGEUP; break; case SB_PAGEDOWN: - event.m_eventType = wxEVENT_TYPE_SCROLL_PAGEDOWN; + event.m_eventType = wxEVT_SCROLL_PAGEDOWN; break; case SB_THUMBTRACK: case SB_THUMBPOSITION: - event.m_eventType = wxEVENT_TYPE_SCROLL_THUMBTRACK; + event.m_eventType = wxEVT_SCROLL_THUMBTRACK; break; default: @@ -2732,57 +2548,53 @@ void wxWindow::MSWOnVScroll(const WXWORD wParam, const WXWORD pos, const WXHWND } if (!GetEventHandler()->ProcessEvent(event)) -#if WXWIN_COMPATIBILITY - GetEventHandler()->OldOnScroll(event); -#else Default(); -#endif } -void wxWindow::MSWOnHScroll( const WXWORD wParam, const WXWORD pos, const WXHWND control) +void wxWindow::MSWOnHScroll( WXWORD wParam, WXWORD pos, WXHWND control) { if (control) { wxWindow *child = wxFindWinFromHandle(control); - if ( child ) - child->MSWOnHScroll(wParam, pos, control); + if ( child ) + child->MSWOnHScroll(wParam, pos, control); return; } - - wxScrollEvent event; - event.SetPosition(pos); - event.SetOrientation(wxHORIZONTAL); - event.m_eventObject = this; - - switch ( wParam ) - { + + wxScrollEvent event; + event.SetPosition(pos); + event.SetOrientation(wxHORIZONTAL); + event.m_eventObject = this; + + switch ( wParam ) + { case SB_TOP: - event.m_eventType = wxEVENT_TYPE_SCROLL_TOP; + event.m_eventType = wxEVT_SCROLL_TOP; break; case SB_BOTTOM: - event.m_eventType = wxEVENT_TYPE_SCROLL_BOTTOM; + event.m_eventType = wxEVT_SCROLL_BOTTOM; break; case SB_LINEUP: - event.m_eventType = wxEVENT_TYPE_SCROLL_LINEUP; + event.m_eventType = wxEVT_SCROLL_LINEUP; break; case SB_LINEDOWN: - event.m_eventType = wxEVENT_TYPE_SCROLL_LINEDOWN; + event.m_eventType = wxEVT_SCROLL_LINEDOWN; break; case SB_PAGEUP: - event.m_eventType = wxEVENT_TYPE_SCROLL_PAGEUP; + event.m_eventType = wxEVT_SCROLL_PAGEUP; break; case SB_PAGEDOWN: - event.m_eventType = wxEVENT_TYPE_SCROLL_PAGEDOWN; + event.m_eventType = wxEVT_SCROLL_PAGEDOWN; break; case SB_THUMBTRACK: case SB_THUMBPOSITION: - event.m_eventType = wxEVENT_TYPE_SCROLL_THUMBTRACK; + event.m_eventType = wxEVT_SCROLL_THUMBTRACK; break; default: @@ -2790,39 +2602,35 @@ void wxWindow::MSWOnHScroll( const WXWORD wParam, const WXWORD pos, const WXHWND break; } if (!GetEventHandler()->ProcessEvent(event)) -#if WXWIN_COMPATIBILITY - GetEventHandler()->OldOnScroll(event); -#else Default(); -#endif } void wxWindow::MSWOnShow(bool show, int status) { - wxShowEvent event(GetId(), show); - event.m_eventObject = this; - GetEventHandler()->ProcessEvent(event); + wxShowEvent event(GetId(), show); + event.m_eventObject = this; + GetEventHandler()->ProcessEvent(event); } bool wxWindow::MSWOnInitDialog(WXHWND WXUNUSED(hWndFocus)) { - wxInitDialogEvent event(GetId()); - event.m_eventObject = this; - GetEventHandler()->ProcessEvent(event); - return TRUE; + wxInitDialogEvent event(GetId()); + event.m_eventObject = this; + GetEventHandler()->ProcessEvent(event); + return TRUE; } void wxWindow::InitDialog(void) { - wxInitDialogEvent event(GetId()); - event.SetEventObject( this ); - GetEventHandler()->ProcessEvent(event); + wxInitDialogEvent event(GetId()); + event.SetEventObject( this ); + GetEventHandler()->ProcessEvent(event); } // Default init dialog behaviour is to transfer data to window void wxWindow::OnInitDialog(wxInitDialogEvent& event) { - TransferDataToWindow(); + TransferDataToWindow(); } void wxGetCharSize(WXHWND wnd, int *x, int *y,wxFont *the_font) @@ -2833,18 +2641,18 @@ void wxGetCharSize(WXHWND wnd, int *x, int *y,wxFont *the_font) HFONT was = 0; if (the_font) { -#if DEBUG > 1 +#if WXDEBUG > 1 wxDebugMsg("wxGetCharSize: Selecting HFONT %X\n", fnt); #endif // the_font->UseResource(); // the_font->RealizeResource(); if ((fnt=(HFONT) the_font->GetResourceHandle())) - was = SelectObject(dc,fnt) ; + was = (HFONT) SelectObject(dc,fnt) ; } GetTextMetrics(dc, &tm); if (the_font && fnt && was) { -#if DEBUG > 1 +#if WXDEBUG > 1 wxDebugMsg("wxGetCharSize: Selecting old HFONT %X\n", was); #endif SelectObject(dc,was) ; @@ -3016,7 +2824,7 @@ int wxCharCodeWXToMSW(int id, bool *isVirtual) } // Caret manipulation -void wxWindow::CreateCaret(const int w, const int h) +void wxWindow::CreateCaret(int w, int h) { m_caretWidth = w; m_caretHeight = h; @@ -3028,7 +2836,7 @@ void wxWindow::CreateCaret(const wxBitmap *WXUNUSED(bitmap)) // Not implemented } -void wxWindow::ShowCaret(const bool show) +void wxWindow::ShowCaret(bool show) { if (m_caretEnabled) { @@ -3045,7 +2853,7 @@ void wxWindow::DestroyCaret(void) m_caretEnabled = FALSE; } -void wxWindow::SetCaretPos(const int x, const int y) +void wxWindow::SetCaretPos(int x, int y) { ::SetCaretPos(x, y); } @@ -3203,10 +3011,6 @@ int APIENTRY _EXPORT /* end Albert's fix for control and shift key 26.5 */ event.SetTimestamp(wxApp::sm_lastMessageTime); /* MATTHEW: timeStamp */ -#if WXWIN_COMPATIBILITY - if ( wxTheApp && wxTheApp->OldOnCharHook(event) ) - return 1; -#endif wxWindow *win = wxGetActiveWindow(); if (win) { @@ -3223,7 +3027,7 @@ int APIENTRY _EXPORT return (int)CallNextHookEx(wxTheKeyboardHook, nCode, wParam, lParam); } -void wxWindow::SetSizeHints(const int minW, const int minH, const int maxW, const int maxH, const int WXUNUSED(incW), const int WXUNUSED(incH)) +void wxWindow::SetSizeHints(int minW, int minH, int maxW, int maxH, int WXUNUSED(incW), int WXUNUSED(incH)) { m_minSizeX = minW; m_minSizeY = minH; @@ -3231,7 +3035,7 @@ void wxWindow::SetSizeHints(const int minW, const int minH, const int maxW, cons m_maxSizeY = maxH; } -void wxWindow::Centre(const int direction) +void wxWindow::Centre(int direction) { int x, y, width, height, panel_width, panel_height, new_x, new_y; @@ -3263,7 +3067,7 @@ void wxWindow::OnPaint(void) } */ -void wxWindow::WarpPointer (const int x_pos, const int y_pos) +void wxWindow::WarpPointer (int x_pos, int y_pos) { // Move the pointer to (x_pos,y_pos) coordinates. They are expressed in // pixel coordinates, relatives to the canvas -- So, we first need to @@ -3297,7 +3101,7 @@ void wxWindow::MSWDeviceToLogical (float *x, float *y) const */ } -bool wxWindow::MSWOnEraseBkgnd (const WXHDC pDC) +bool wxWindow::MSWOnEraseBkgnd (WXHDC pDC) { wxDC dc ; @@ -3348,7 +3152,7 @@ void wxWindow::OnEraseBackground(wxEraseEvent& event) } #if WXWIN_COMPATIBILITY -void wxWindow::SetScrollRange(const int orient, const int range, const bool refresh) +void wxWindow::SetScrollRange(int orient, int range, bool refresh) { #if defined(__WIN95__) @@ -3394,7 +3198,7 @@ void wxWindow::SetScrollRange(const int orient, const int range, const bool refr #endif } -void wxWindow::SetScrollPage(const int orient, const int page, const bool refresh) +void wxWindow::SetScrollPage(int orient, int page, bool refresh) { #if defined(__WIN95__) SCROLLINFO info; @@ -3424,7 +3228,7 @@ void wxWindow::SetScrollPage(const int orient, const int page, const bool refres #endif } -int wxWindow::OldGetScrollRange(const int orient) const +int wxWindow::OldGetScrollRange(int orient) const { int wOrient ; if (orient == wxHORIZONTAL) @@ -3456,7 +3260,7 @@ int wxWindow::OldGetScrollRange(const int orient) const return 0; } -int wxWindow::GetScrollPage(const int orient) const +int wxWindow::GetScrollPage(int orient) const { if (orient == wxHORIZONTAL) return m_xThumbSize; @@ -3465,7 +3269,7 @@ int wxWindow::GetScrollPage(const int orient) const } #endif -int wxWindow::GetScrollPos(const int orient) const +int wxWindow::GetScrollPos(int orient) const { int wOrient ; if (orient == wxHORIZONTAL) @@ -3483,7 +3287,7 @@ int wxWindow::GetScrollPos(const int orient) const // This now returns the whole range, not just the number // of positions that we can scroll. -int wxWindow::GetScrollRange(const int orient) const +int wxWindow::GetScrollRange(int orient) const { int wOrient ; if (orient == wxHORIZONTAL) @@ -3518,7 +3322,7 @@ int wxWindow::GetScrollRange(const int orient) const return 0; } -int wxWindow::GetScrollThumb(const int orient) const +int wxWindow::GetScrollThumb(int orient) const { if (orient == wxHORIZONTAL) return m_xThumbSize; @@ -3526,7 +3330,7 @@ int wxWindow::GetScrollThumb(const int orient) const return m_yThumbSize; } -void wxWindow::SetScrollPos(const int orient, const int pos, const bool refresh) +void wxWindow::SetScrollPos(int orient, int pos, bool refresh) { #if defined(__WIN95__) SCROLLINFO info; @@ -3561,8 +3365,8 @@ void wxWindow::SetScrollPos(const int orient, const int pos, const bool refresh) } // New function that will replace some of the above. -void wxWindow::SetScrollbar(const int orient, const int pos, const int thumbVisible, - const int range, const bool refresh) +void wxWindow::SetScrollbar(int orient, int pos, int thumbVisible, + int range, bool refresh) { /* SetScrollPage(orient, thumbVisible, FALSE); @@ -3625,7 +3429,7 @@ void wxWindow::SetScrollbar(const int orient, const int pos, const int thumbVisi } } -void wxWindow::ScrollWindow(const int dx, const int dy, const wxRectangle *rect) +void wxWindow::ScrollWindow(int dx, int dy, const wxRectangle *rect) { RECT rect2; if ( rect ) @@ -3642,23 +3446,14 @@ void wxWindow::ScrollWindow(const int dx, const int dy, const wxRectangle *rect) ::ScrollWindow((HWND) GetHWND(), dx, dy, NULL, NULL); } -void wxWindow::OnSize(wxSizeEvent& event) -{ - Default(); -#if USE_CONSTRAINTS - if (GetAutoLayout()) - Layout(); -#endif -} - /* -void wxWindow::CalcScrolledPosition(const int x, const int y, int *xx, int *yy) const +void wxWindow::CalcScrolledPosition(int x, int y, int *xx, int *yy) const { *xx = x; *yy = y; } -void wxWindow::CalcUnscrolledPosition(const int x, const int y, float *xx, float *yy) const +void wxWindow::CalcUnscrolledPosition(int x, int y, float *xx, float *yy) const { *xx = x; *yy = y; @@ -3795,62 +3590,25 @@ WXDWORD wxWindow::Determine3DEffects(WXDWORD defaultBorderStyle, bool *want3D) return exStyle; } -#if WXWIN_COMPATIBILITY -void wxWindow::OldOnPaint(void) -{ - wxPaintEvent event(m_windowId); - event.m_eventObject = this; - if (!GetEventHandler()->ProcessEvent(event)) - Default(); -}; - -void wxWindow::OldOnSize(int w, int h) -{ - wxSizeEvent event(wxSize(w, h), m_windowId); - event.m_eventObject = this; - if (!GetEventHandler()->ProcessEvent(event)) - Default(); -}; - -void wxWindow::OldOnMouseEvent(wxMouseEvent& event) -{ - if (!GetEventHandler()->ProcessEvent(event)) - Default(); -}; - -void wxWindow::OldOnChar(wxKeyEvent& event) -{ - if (!GetEventHandler()->ProcessEvent(event)) - Default(); -}; - -void wxWindow::OldOnSetFocus(void) -{ - wxFocusEvent event(wxEVT_SET_FOCUS, m_windowId); - event.m_eventObject = this; - if (!GetEventHandler()->ProcessEvent(event)) - Default(); -}; - -void wxWindow::OldOnKillFocus(void) -{ - wxFocusEvent event(wxEVT_KILL_FOCUS, m_windowId); - event.m_eventObject = this; - if (!GetEventHandler()->ProcessEvent(event)) - Default(); -}; -#endif - void wxWindow::OnChar(wxKeyEvent& event) { - bool isVirtual; - int id = wxCharCodeWXToMSW((int)event.KeyCode(), &isVirtual); + if ( event.KeyCode() == WXK_TAB ) { + // propagate the TABs to the parent - it's up to it to decide what + // to do with it + if ( GetParent() ) { + if ( GetParent()->ProcessEvent(event) ) + return; + } + } + + bool isVirtual; + int id = wxCharCodeWXToMSW((int)event.KeyCode(), &isVirtual); - if ( id == -1 ) - id= m_lastWParam; + if ( id == -1 ) + id= m_lastWParam; if ( !event.ControlDown() ) - (void) MSWDefWindowProc(m_lastMsg, (WPARAM) id, m_lastLParam); + (void) MSWDefWindowProc(m_lastMsg, (WPARAM) id, m_lastLParam); } void wxWindow::OnPaint(wxPaintEvent& event) @@ -3963,7 +3721,7 @@ void wxWindow::DestroyChildren(void) } } -void wxWindow::MakeModal(const bool modal) +void wxWindow::MakeModal(bool modal) { // Disable all other windows if (this->IsKindOf(CLASSINFO(wxDialog)) || this->IsKindOf(CLASSINFO(wxFrame))) @@ -4164,7 +3922,7 @@ bool wxWindow::LayoutPhase2(int *noChanges) } // Do a phase of evaluating child constraints -bool wxWindow::DoPhase(const int phase) +bool wxWindow::DoPhase(int phase) { int noIterations = 0; int maxIterations = 500; @@ -4232,7 +3990,7 @@ void wxWindow::ResetConstraints(void) // Need to distinguish between setting the 'fake' size for // windows and sizers, and setting the real values. -void wxWindow::SetConstraintSizes(const bool recurse) +void wxWindow::SetConstraintSizes(bool recurse) { wxLayoutConstraints *constr = GetConstraints(); if (constr && constr->left.GetDone() && constr->right.GetDone() && @@ -4305,7 +4063,7 @@ void wxWindow::TransformSizerToActual(int *x, int *y) const *y += yp; } -void wxWindow::SizerSetSize(const int x, const int y, const int w, const int h) +void wxWindow::SizerSetSize(int x, int y, int w, int h) { int xx = x; int yy = y; @@ -4313,7 +4071,7 @@ void wxWindow::SizerSetSize(const int x, const int y, const int w, const int h) SetSize(xx, yy, w, h); } -void wxWindow::SizerMove(const int x, const int y) +void wxWindow::SizerMove(int x, int y) { int xx = x; int yy = y; @@ -4322,7 +4080,7 @@ void wxWindow::SizerMove(const int x, const int y) } // Only set the size/position of the constraint (if any) -void wxWindow::SetSizeConstraint(const int x, const int y, const int w, const int h) +void wxWindow::SetSizeConstraint(int x, int y, int w, int h) { wxLayoutConstraints *constr = GetConstraints(); if (constr) @@ -4350,7 +4108,7 @@ void wxWindow::SetSizeConstraint(const int x, const int y, const int w, const in } } -void wxWindow::MoveConstraint(const int x, const int y) +void wxWindow::MoveConstraint(int x, int y) { wxLayoutConstraints *constr = GetConstraints(); if (constr) @@ -4404,7 +4162,7 @@ void wxWindow::GetPositionConstraint(int *x, int *y) const GetPosition(x, y); } -bool wxWindow::Close(const bool force) +bool wxWindow::Close(bool force) { // Let's generalise it to work the same for any window. /* @@ -4434,7 +4192,7 @@ bool wxWindow::Close(const bool force) */ } -wxObject* wxWindow::GetChild(const int number) const +wxObject* wxWindow::GetChild(int number) const { // Return a pointer to the Nth object in the Panel if (!GetChildren()) @@ -4454,10 +4212,14 @@ wxObject* wxWindow::GetChild(const int number) const void wxWindow::OnDefaultAction(wxControl *initiatingItem) { - if (initiatingItem->IsKindOf(CLASSINFO(wxListBox)) && initiatingItem->GetCallback()) +/* This is obsolete now; if we wish to intercept listbox double-clicks, + * we explicitly intercept the wxEVT_COMMAND_LISTBOX_DOUBLECLICKED + * event. + + if (initiatingItem->IsKindOf(CLASSINFO(wxListBox))) { wxListBox *lbox = (wxListBox *)initiatingItem; - wxCommandEvent event(wxEVENT_TYPE_LISTBOX_DCLICK_COMMAND); + wxCommandEvent event(wxEVT_COMMAND_LEFT_DCLICK); event.m_commandInt = -1; if ((lbox->GetWindowStyleFlag() & wxLB_MULTIPLE) == 0) { @@ -4477,9 +4239,11 @@ void wxWindow::OnDefaultAction(wxControl *initiatingItem) wxButton *but = GetDefaultItem(); if (but) { - wxCommandEvent event(wxEVENT_TYPE_BUTTON_COMMAND); + wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED); + event.SetEventObject(but); but->Command(event); } +*/ } void wxWindow::Clear(void) @@ -4523,7 +4287,7 @@ void wxWindow::SetValidator(const wxValidator& validator) } // Find a window by id or name -wxWindow *wxWindow::FindWindow(const long id) +wxWindow *wxWindow::FindWindow(long id) { if ( GetId() == id) return this; @@ -4581,7 +4345,7 @@ void wxWindow::OnChar(wxKeyEvent& event) if (vert_units) y_pages = (int)(v_height/vert_units) - y_page; -#ifdef __WINDOWS__ +#ifdef __WXMSW__ int y = 0; #else int y = y_page-1; @@ -4718,7 +4482,6 @@ void wxWindow::OnIdle(wxIdleEvent& event) MSWOnMouseLeave(pt.x, pt.y, 0); } } - UpdateWindowUI(); } @@ -4734,3 +4497,156 @@ void wxWindow::Lower(void) ::SetWindowPos((HWND) GetHWND(), HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE); } +long wxWindow::MSWGetDlgCode() +{ + // default: just forward to def window proc (the msg has no parameters) + return MSWDefWindowProc(WM_GETDLGCODE, 0, 0); +} + +bool wxWindow::AcceptsFocus() const +{ + return IsShown() && IsEnabled(); +} + +#ifdef __WXDEBUG__ +static const char *GetMessageName(int message) +{ + switch ( message ) { + case 0x0000: return "WM_NULL"; + case 0x0001: return "WM_CREATE"; + case 0x0002: return "WM_DESTROY"; + case 0x0003: return "WM_MOVE"; + case 0x0005: return "WM_SIZE"; + case 0x0006: return "WM_ACTIVATE"; + case 0x0007: return "WM_SETFOCUS"; + case 0x0008: return "WM_KILLFOCUS"; + case 0x000A: return "WM_ENABLE"; + case 0x000B: return "WM_SETREDRAW"; + case 0x000C: return "WM_SETTEXT"; + case 0x000D: return "WM_GETTEXT"; + case 0x000E: return "WM_GETTEXTLENGTH"; + case 0x000F: return "WM_PAINT"; + case 0x0010: return "WM_CLOSE"; + case 0x0011: return "WM_QUERYENDSESSION"; + case 0x0012: return "WM_QUIT"; + case 0x0013: return "WM_QUERYOPEN"; + case 0x0014: return "WM_ERASEBKGND"; + case 0x0015: return "WM_SYSCOLORCHANGE"; + case 0x0016: return "WM_ENDSESSION"; + case 0x0017: return "WM_SYSTEMERROR"; + case 0x0018: return "WM_SHOWWINDOW"; + case 0x0019: return "WM_CTLCOLOR"; + case 0x001A: return "WM_WININICHANGE"; + case 0x001B: return "WM_DEVMODECHANGE"; + case 0x001C: return "WM_ACTIVATEAPP"; + case 0x001D: return "WM_FONTCHANGE"; + case 0x001E: return "WM_TIMECHANGE"; + case 0x001F: return "WM_CANCELMODE"; + case 0x0020: return "WM_SETCURSOR"; + case 0x0021: return "WM_MOUSEACTIVATE"; + case 0x0022: return "WM_CHILDACTIVATE"; + case 0x0023: return "WM_QUEUESYNC"; + case 0x0024: return "WM_GETMINMAXINFO"; + case 0x0026: return "WM_PAINTICON"; + case 0x0027: return "WM_ICONERASEBKGND"; + case 0x0028: return "WM_NEXTDLGCTL"; + case 0x002A: return "WM_SPOOLERSTATUS"; + case 0x002B: return "WM_DRAWITEM"; + case 0x002C: return "WM_MEASUREITEM"; + case 0x002D: return "WM_DELETEITEM"; + case 0x002E: return "WM_VKEYTOITEM"; + case 0x002F: return "WM_CHARTOITEM"; + case 0x0030: return "WM_SETFONT"; + case 0x0031: return "WM_GETFONT"; + case 0x0037: return "WM_QUERYDRAGICON"; + case 0x0039: return "WM_COMPAREITEM"; + case 0x0041: return "WM_COMPACTING"; + case 0x0044: return "WM_COMMNOTIFY"; + case 0x0046: return "WM_WINDOWPOSCHANGING"; + case 0x0047: return "WM_WINDOWPOSCHANGED"; + case 0x0048: return "WM_POWER"; + case 0x0081: return "WM_NCCREATE"; + case 0x0082: return "WM_NCDESTROY"; + case 0x0083: return "WM_NCCALCSIZE"; + case 0x0084: return "WM_NCHITTEST"; + case 0x0085: return "WM_NCPAINT"; + case 0x0086: return "WM_NCACTIVATE"; + case 0x0087: return "WM_GETDLGCODE"; + case 0x00A0: return "WM_NCMOUSEMOVE"; + case 0x00A1: return "WM_NCLBUTTONDOWN"; + case 0x00A2: return "WM_NCLBUTTONUP"; + case 0x00A3: return "WM_NCLBUTTONDBLCLK"; + case 0x00A4: return "WM_NCRBUTTONDOWN"; + case 0x00A5: return "WM_NCRBUTTONUP"; + case 0x00A6: return "WM_NCRBUTTONDBLCLK"; + case 0x00A7: return "WM_NCMBUTTONDOWN"; + case 0x00A8: return "WM_NCMBUTTONUP"; + case 0x00A9: return "WM_NCMBUTTONDBLCLK"; + case 0x0100: return "WM_KEYDOWN"; + case 0x0101: return "WM_KEYUP"; + case 0x0102: return "WM_CHAR"; + case 0x0103: return "WM_DEADCHAR"; + case 0x0104: return "WM_SYSKEYDOWN"; + case 0x0105: return "WM_SYSKEYUP"; + case 0x0106: return "WM_SYSCHAR"; + case 0x0107: return "WM_SYSDEADCHAR"; + case 0x0108: return "WM_KEYLAST"; + case 0x0110: return "WM_INITDIALOG"; + case 0x0111: return "WM_COMMAND"; + case 0x0112: return "WM_SYSCOMMAND"; + case 0x0113: return "WM_TIMER"; + case 0x0114: return "WM_HSCROLL"; + case 0x0115: return "WM_VSCROLL"; + case 0x0116: return "WM_INITMENU"; + case 0x0117: return "WM_INITMENUPOPUP"; + case 0x011F: return "WM_MENUSELECT"; + case 0x0120: return "WM_MENUCHAR"; + case 0x0121: return "WM_ENTERIDLE"; + case 0x0200: return "WM_MOUSEMOVE"; + case 0x0201: return "WM_LBUTTONDOWN"; + case 0x0202: return "WM_LBUTTONUP"; + case 0x0203: return "WM_LBUTTONDBLCLK"; + case 0x0204: return "WM_RBUTTONDOWN"; + case 0x0205: return "WM_RBUTTONUP"; + case 0x0206: return "WM_RBUTTONDBLCLK"; + case 0x0207: return "WM_MBUTTONDOWN"; + case 0x0208: return "WM_MBUTTONUP"; + case 0x0209: return "WM_MBUTTONDBLCLK"; + case 0x0210: return "WM_PARENTNOTIFY"; + case 0x0220: return "WM_MDICREATE"; + case 0x0221: return "WM_MDIDESTROY"; + case 0x0222: return "WM_MDIACTIVATE"; + case 0x0223: return "WM_MDIRESTORE"; + case 0x0224: return "WM_MDINEXT"; + case 0x0225: return "WM_MDIMAXIMIZE"; + case 0x0226: return "WM_MDITILE"; + case 0x0227: return "WM_MDICASCADE"; + case 0x0228: return "WM_MDIICONARRANGE"; + case 0x0229: return "WM_MDIGETACTIVE"; + case 0x0230: return "WM_MDISETMENU"; + case 0x0233: return "WM_DROPFILES"; + case 0x0300: return "WM_CUT"; + case 0x0301: return "WM_COPY"; + case 0x0302: return "WM_PASTE"; + case 0x0303: return "WM_CLEAR"; + case 0x0304: return "WM_UNDO"; + case 0x0305: return "WM_RENDERFORMAT"; + case 0x0306: return "WM_RENDERALLFORMATS"; + case 0x0307: return "WM_DESTROYCLIPBOARD"; + case 0x0308: return "WM_DRAWCLIPBOARD"; + case 0x0309: return "WM_PAINTCLIPBOARD"; + case 0x030A: return "WM_VSCROLLCLIPBOARD"; + case 0x030B: return "WM_SIZECLIPBOARD"; + case 0x030C: return "WM_ASKCBFORMATNAME"; + case 0x030D: return "WM_CHANGECBCHAIN"; + case 0x030E: return "WM_HSCROLLCLIPBOARD"; + case 0x030F: return "WM_QUERYNEWPALETTE"; + case 0x0310: return "WM_PALETTEISCHANGING"; + case 0x0311: return "WM_PALETTECHANGED"; + default: + static char s_szBuf[128]; + sprintf(s_szBuf, "", message); + return s_szBuf; + } +} +#endif //WXDEBUG