X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f54f3bffcebcfe09b4cb3e78d78a0decbc542153..803bf1c5818154dbff797029441c7de0d85339d5:/src/msw/window.cpp diff --git a/src/msw/window.cpp b/src/msw/window.cpp index 3090978dc5..db9a0969bd 100644 --- a/src/msw/window.cpp +++ b/src/msw/window.cpp @@ -6,7 +6,7 @@ // Created: 04/01/98 // RCS-ID: $Id$ // Copyright: (c) Julian Smart and Markus Holzem -// Licence: wxWindows license +// Licence: wxWindows license ///////////////////////////////////////////////////////////////////////////// #ifdef __GNUG__ @@ -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__ +const char *wxGetMessageName(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; @@ -155,8 +159,8 @@ wxWindow *wxWindow::FindItemByHWND(const WXHWND hWnd, bool controlOnly) const return item; else { - if ( item->ContainsHWND(hWnd) ) - return item; + if ( item->ContainsHWND(hWnd) ) + return item; } } current = current->Next(); @@ -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)) { } @@ -186,7 +190,7 @@ WXHWND wxWindow::GetHWND(void) const void wxWindow::SetHWND(WXHWND hWnd) { - m_hWnd = hWnd; + m_hWnd = hWnd; } // Constructor @@ -241,14 +245,14 @@ wxWindow::wxWindow(void) /* wxColour(GetRValue(GetSysColor(COLOR_WINDOW)), - GetGValue(GetSysColor(COLOR_BTNFACE)), GetBValue(GetSysColor(COLOR_BTNFACE))); + GetGValue(GetSysColor(COLOR_BTNFACE)), GetBValue(GetSysColor(COLOR_BTNFACE))); */ // wxWnd m_lastMsg = 0; m_lastWParam = 0; m_lastLParam = 0; - m_acceleratorTable = 0; +// m_acceleratorTable = 0; m_hMenu = 0; m_xThumbSize = 0; @@ -277,9 +281,9 @@ wxWindow::~wxWindow(void) // Restore old Window proc, if required // UnsubclassWin(); - // Have to delete constraints/sizer FIRST otherwise - // sizers may try to look at deleted windows as they - // delete themselves. + // Have to delete constraints/sizer FIRST otherwise + // sizers may try to look at deleted windows as they + // delete themselves. #if USE_CONSTRAINTS DeleteRelatedConstraints(); if (m_constraints) @@ -303,19 +307,6 @@ wxWindow::~wxWindow(void) // wxWnd MSWDetachWindowMenu(); - // TODO for backward compatibility -#if 0 - // WX_CANVAS - if (m_windowDC) - { - HWND hWnd = (HWND) GetHWND(); - HDC dc = ::GetDC(hWnd); - m_windowDC->SelectOldObjects (dc); - ReleaseDC(hWnd, dc); - delete m_windowDC; - } -#endif - if (m_windowParent) m_windowParent->RemoveChild(this); @@ -347,11 +338,8 @@ wxWindow::~wxWindow(void) // class wxTopLevelWindows.DeleteObject(this); -// if (GetFont() && GetFont()->Ok()) -// GetFont()->ReleaseResource(); - if ( m_windowValidator ) - delete m_windowValidator; + delete m_windowValidator; // Restore old Window proc, if required // and remove hWnd <-> wxWindow association @@ -368,10 +356,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 @@ -381,10 +369,6 @@ bool wxWindow::Create(wxWindow *parent, const wxWindowID id, m_windowStyle = 0; m_windowParent = NULL; m_windowEventHandler = this; -// m_windowFont = NULL; - // We don't wish internal (potentially transient) fonts to be found - // by FindOrCreate -// wxTheFontList->RemoveFont(& m_windowFont); m_windowName = ""; m_windowCursor = *wxSTANDARD_CURSOR; m_doubleClickAllowed = 0 ; @@ -410,8 +394,6 @@ bool wxWindow::Create(wxWindow *parent, const wxWindowID id, m_minSizeY = -1; m_maxSizeX = -1; m_maxSizeY = -1; -// m_paintHDC = 0; -// m_tempHDC = 0; m_oldWndProc = 0; #ifndef __WIN32__ m_globalHandle = 0; @@ -419,7 +401,6 @@ bool wxWindow::Create(wxWindow *parent, const wxWindowID id, m_useCtl3D = FALSE; m_defaultItem = NULL; m_windowParent = NULL; -// m_windowDC = NULL; m_mouseInWindow = FALSE; if (!parent) return FALSE; @@ -430,7 +411,6 @@ bool wxWindow::Create(wxWindow *parent, const wxWindowID id, m_lastMsg = 0; m_lastWParam = 0; m_lastLParam = 0; - m_acceleratorTable = 0; m_hMenu = 0; m_xThumbSize = 0; @@ -445,9 +425,9 @@ bool wxWindow::Create(wxWindow *parent, const wxWindowID id, SetName(name); if ( id == -1 ) - m_windowId = (int)NewControlId(); + m_windowId = (int)NewControlId(); else - m_windowId = id; + m_windowId = id; int x = pos.x; int y = pos.y; @@ -460,10 +440,6 @@ bool wxWindow::Create(wxWindow *parent, const wxWindowID id, m_foregroundColour = *wxBLACK; m_defaultForegroundColour = *wxBLACK ; m_defaultBackgroundColour = settings.GetSystemColour(wxSYS_COLOUR_3DFACE) ; -/* - m_defaultBackgroundColour = wxColour(GetRValue(GetSysColor(COLOR_BTNFACE)), - GetGValue(GetSysColor(COLOR_BTNFACE)), GetBValue(GetSysColor(COLOR_BTNFACE))); -*/ m_windowStyle = style; @@ -472,11 +448,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) ; @@ -489,13 +464,8 @@ bool wxWindow::Create(wxWindow *parent, const wxWindowID id, m_mouseInWindow = FALSE ; - if ( id == -1 ) - m_windowId = (int)NewControlId(); - else - m_windowId = id; - - MSWCreate(m_windowId, (wxWindow *)parent, wxCanvasClassName, this, NULL, x, y, width, height, msflags, - NULL, exStyle); + MSWCreate(m_windowId, parent, wxCanvasClassName, this, NULL, + x, y, width, height, msflags, NULL, exStyle); return TRUE; } @@ -507,7 +477,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(); @@ -534,32 +504,38 @@ void wxWindow::ReleaseMouse(void) } } +void wxWindow::SetAcceleratorTable(const wxAcceleratorTable& accel) +{ + m_acceleratorTable = accel; +} + + // Push/pop event handler (i.e. allow a chain of event handlers // be searched) void wxWindow::PushEventHandler(wxEvtHandler *handler) { - handler->SetNextHandler(GetEventHandler()); - SetEventHandler(handler); + handler->SetNextHandler(GetEventHandler()); + SetEventHandler(handler); } wxEvtHandler *wxWindow::PopEventHandler(bool deleteHandler) { - if ( GetEventHandler() ) - { - wxEvtHandler *handlerA = GetEventHandler(); - wxEvtHandler *handlerB = handlerA->GetNextHandler(); - handlerA->SetNextHandler(NULL); - SetEventHandler(handlerB); - if ( deleteHandler ) - { - delete handlerA; - return NULL; - } - else - return handlerA; - } - else - return NULL; + if ( GetEventHandler() ) + { + wxEvtHandler *handlerA = GetEventHandler(); + wxEvtHandler *handlerB = handlerA->GetNextHandler(); + handlerA->SetNextHandler(NULL); + SetEventHandler(handlerB); + if ( deleteHandler ) + { + delete handlerA; + return NULL; + } + else + return handlerA; + } + else + return NULL; } #if USE_DRAG_AND_DROP @@ -582,7 +558,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) @@ -618,6 +594,16 @@ void wxWindow::GetPosition(int *x, int *y) const { ::ScreenToClient(hParentWnd, &point); } + + // 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 pt(GetParent()->GetClientAreaOrigin()); + point.x -= pt.x; + point.y -= pt.y; + } *x = point.x; *y = point.y; } @@ -630,6 +616,18 @@ void wxWindow::ScreenToClient(int *x, int *y) const 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; + } +*/ + *x = pt.x; *y = pt.y; } @@ -640,6 +638,19 @@ void wxWindow::ClientToScreen(int *x, int *y) const POINT pt; 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; @@ -671,7 +682,6 @@ void wxWindow::SetCursor(const wxCursor& cursor) // Get size *available for subwindows* i.e. excluding menu bar etc. -// For XView, this is the same as GetSize void wxWindow::GetClientSize(int *x, int *y) const { HWND hWnd = (HWND) GetHWND(); @@ -681,7 +691,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); @@ -694,6 +704,8 @@ void wxWindow::SetSize(const int x, const int y, const int width, const int heig if (y == -1 || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE)) actualY = currentY; + AdjustForParentClientOrigin(actualX, actualY, sizeFlags); + int currentW,currentH; GetSize(¤tW, ¤tH); if (width == -1) @@ -704,22 +716,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 +748,31 @@ 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) +// For implementation purposes - sometimes decorations make the client area +// smaller +wxPoint wxWindow::GetClientAreaOrigin() const +{ + return wxPoint(0, 0); +} + +// Makes an adjustment to the window position (for example, a frame that has +// a toolbar that it manages itself). +void wxWindow::AdjustForParentClientOrigin(int& x, int& y, int sizeFlags) +{ + if (((sizeFlags & wxSIZE_NO_ADJUSTMENTS) == 0) && GetParent()) + { + wxPoint pt(GetParent()->GetClientAreaOrigin()); + x += pt.x; y += pt.y; + } +} + +bool wxWindow::Show(bool show) { HWND hWnd = (HWND) GetHWND(); int cshow; @@ -806,7 +820,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 +833,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 +856,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,54 +876,45 @@ void wxWindow::Refresh(const bool eraseBack, const wxRectangle *rect) } } -// TODO: Are these really necessary now? -/* -WXHDC wxWindow::GetHDC(void) const +bool wxWindow::ProcessEvent(wxEvent& event) { - wxWindow *nonConst = (wxWindow *)this; - if (m_paintHDC) - return(m_paintHDC) ; - nonConst->m_tempHDC = (WXHDC) ::GetDC((HWND) GetHWND()) ; - return(m_tempHDC) ; -} + // we save here the information about the last message because it might be + // overwritten if the event handler sends any messages to our window (case + // in point: wxNotebook::OnSize) - and then if we call Default() later + // (which is done quite often if the message is not processed) it will use + // incorrect values for m_lastXXX variables + WXUINT lastMsg = m_lastMsg; + WXWPARAM lastWParam = m_lastWParam; + WXLPARAM lastLParam = m_lastLParam; -void wxWindow::ReleaseHDC(void) -{ - // We're within an OnPaint: it'll be released. - if (m_paintHDC) - return ; + // call the base version + bool bProcessed = wxEvtHandler::ProcessEvent(event); - ::ReleaseDC((HWND) GetHWND(),(HDC) m_tempHDC) ; + // restore + m_lastMsg = lastMsg; + m_lastWParam = lastWParam; + m_lastLParam = lastLParam; + + return bProcessed; } -*/ // 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); if (!wnd && wxWndHook) { - wxAssociateWinWithHandle(hWnd, wxWndHook); + wxAssociateWinWithHandle(hWnd, wxWndHook); wnd = wxWndHook; - wxWndHook = NULL; + 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 +931,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 +948,19 @@ 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 + wxASSERT( m_lastMsg == message && + m_lastWParam == wParam && + m_lastLParam == lParam ); + #ifdef __WXDEBUG__ + wxLogTrace(wxTraceMessages, "Processing %s(%lx, %lx)", + wxGetMessageName(message), wParam, lParam); + #endif // WXDEBUG HWND hWnd = (HWND)m_hWnd; switch (message) { -/* - case WM_SETFONT: - { - return 0; - } -*/ case WM_ACTIVATE: { #ifdef __WIN32__ @@ -1065,27 +996,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 ); @@ -1100,10 +1031,19 @@ long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) break; } + case WM_MOVE: + { + wxMoveEvent event(wxPoint(LOWORD(lParam), HIWORD(lParam)), + m_windowId); + event.SetEventObject(this); + if ( !GetEventHandler()->ProcessEvent(event) ) + Default(); + } + break; + case WM_WINDOWPOSCHANGING: { - WINDOWPOS *pos = (WINDOWPOS *)lParam; - MSWOnWindowPosChanging((void *)pos); + MSWOnWindowPosChanging((void *)lParam); break; } @@ -1244,7 +1184,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 +1197,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 +1235,30 @@ 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_CHAR: // Always an ASCII character - { - MSWOnChar((WORD)wParam, lParam, TRUE); - break; - } + { + MSWOnChar((WORD)wParam, lParam, TRUE); + break; + } case WM_HSCROLL: { @@ -1351,68 +1290,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: { @@ -1433,13 +1372,21 @@ long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) return MSWDefWindowProc(message, wParam, lParam ); break; } + case WM_PALETTECHANGED: + { + return MSWOnPaletteChanged((WXHWND) (HWND) wParam); + break; + } + case WM_QUERYNEWPALETTE: + { + return MSWOnQueryNewPalette(); + break; + } case WM_ERASEBKGND: { // Prevents flicker when dragging if (IsIconic(hWnd)) return 1; - // EXPERIMENTAL -// return 1; if (!MSWOnEraseBkgnd((WXHDC) (HDC)wParam)) return 0; // Default(); MSWDefWindowProc(message, wParam, lParam ); else return 1; @@ -1461,15 +1408,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,18 +1444,8 @@ long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) break; } -/* -#if HAVE_SOCKET - case WM_TIMER: - { - __ddeUnblock(hWnd, wParam); - break; - } - - case ASYNC_SELECT_MESSAGE: - return ddeWindowProc(hWnd,message,wParam,lParam); -#endif -*/ + case WM_GETDLGCODE: + return MSWGetDlgCode(); default: return MSWDefWindowProc(message, wParam, lParam ); @@ -1551,34 +1488,11 @@ void wxRemoveHandleAssociation(wxWindow *win) // (e.g. with MDI child windows) void wxWindow::MSWDestroyWindow(void) { -#if 0 - -#if DEBUG > 1 - wxDebugMsg("wxWindow::MSWDestroyWindow %d\n", handle); -#endif - MSWDetachWindowMenu(); -// SetWindowLong(handle, 0, (long)0); - HWND oldHandle = handle; - handle = NULL; - - ::DestroyWindow(oldHandle); - - // Menu is destroyed explicitly by wxMDIChild::DestroyWindow, - // or when Windows HWND is deleted if MDI parent or - // SDI frame. -/* - if (m_hMenu) - { - ::DestroyMenu(m_hMenu); - m_hMenu = 0; - } - */ -#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; @@ -1637,28 +1551,24 @@ void wxWindow::MSWCreate(const int id, wxWindow *parent, const char *wclass, wxW if (!title) title = ""; - m_hWnd = (WXHWND) CreateWindowEx(extendedStyle, wclass, + m_hWnd = (WXHWND)CreateWindowEx(extendedStyle, wclass, title, style, x1, y1, width1, height1, -// hParent, NULL, wxGetInstance(), hParent, (HMENU)controlId, wxGetInstance(), NULL); - if (m_hWnd == 0) - { - char buf[300]; - sprintf(buf, "Can't create window of class %s! Weird.\nPossible Windows 3.x compatibility problem?", - wclass); - wxFatalError(buf, - "Fatal wxWindows Error"); + if ( !m_hWnd ) { + wxLogError("Can't create window of class %s!\n" + "Possible Windows 3.x compatibility problem?", wclass); } } + wxWndHook = NULL; wxWinHandleList->Append((long)m_hWnd, this); -#if DEBUG > 1 +#if WXDEBUG > 1 wxDebugMsg("wxWindow::MSWCreate %d\n", m_hWnd); #endif } @@ -1669,7 +1579,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 +1587,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 +1605,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. @@ -1705,8 +1615,8 @@ bool wxWindow::MSWOnNotify(const WXWPARAM wParam, const WXLPARAM lParam) // So, since we don't know which hWnd or wxWindow originated the // WM_NOTIFY, we'll need to go through all the children of this window // trying out MSWNotify. - // This won't work now, though, because any number of controls - // could respond to the same generic messages :-( + // This won't work now, though, because any number of controls + // could respond to the same generic messages :-( /* This doesn't work for toolbars, but try for other controls first. */ @@ -1714,21 +1624,21 @@ bool wxWindow::MSWOnNotify(const WXWPARAM wParam, const WXLPARAM lParam) HWND hWnd = (HWND)hdr->hwndFrom; wxWindow *win = wxFindWinFromHandle((WXHWND) hWnd); - if ( win ) - return win->MSWNotify(wParam, lParam); - else - { - // Rely on MSWNotify to check whether the message - // belongs to the window or not - wxNode *node = GetChildren()->First(); - while (node) - { - wxWindow *child = (wxWindow *)node->Data(); - if ( child->MSWNotify(wParam, lParam) ) - return TRUE; - node = node->Next(); - } - } + if ( win ) + return win->MSWNotify(wParam, lParam); + else + { + // Rely on MSWNotify to check whether the message + // belongs to the window or not + wxNode *node = GetChildren()->First(); + while (node) + { + wxWindow *child = (wxWindow *)node->Data(); + if ( child->MSWNotify(wParam, lParam) ) + return TRUE; + node = node->Next(); + } + } return FALSE; @@ -1736,39 +1646,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; + m_windowId); + 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 +1683,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,29 +1701,26 @@ 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); // Get the total number of files dropped WORD gwFilesDropped = (WORD)DragQueryFile ((HDROP)hFilesInfo, - (UINT)-1, + (UINT)-1, (LPSTR)0, (UINT)0); @@ -1839,12 +1737,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 +1776,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,15 +1800,15 @@ 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) { - return OnCtlColor(pDC, pWnd, nCtlColor, message, wParam, lParam); + return OnCtlColor(pDC, pWnd, nCtlColor, message, wParam, lParam); } wxControl *item = (wxControl *)FindItemByHWND(pWnd, TRUE); @@ -1917,7 +1816,7 @@ WXHBRUSH wxWindow::MSWOnCtlColor(const WXHDC pDC, const WXHWND pWnd, const WXUIN WXHBRUSH hBrush = 0; if ( item ) - hBrush = item->OnCtlColor(pDC, pWnd, nCtlColor, message, wParam, lParam); + hBrush = item->OnCtlColor(pDC, pWnd, nCtlColor, message, wParam, lParam); // I think that even for dialogs, we may need to call DefWindowProc (?) // Or maybe just rely on the usual default behaviour. @@ -1928,37 +1827,53 @@ 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, - WXUINT message, WXWPARAM wParam, WXLPARAM lParam) +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; + event.SetEventObject(this); // Check if app handles this. if (GetEventHandler()->ProcessEvent(event)) return 0; -#if WXWIN_COMPATIBILITY - if (GetEventHandler()->OldOnSysColourChange()) - return 0; -#endif - // We didn't process it return 1; } -// Responds to colour changes: passes event on to children. -void wxWindow::OnSysColourChanged(wxSysColourChangedEvent& event) +long wxWindow::MSWOnPaletteChanged(WXHWND hWndPalChange) { - wxNode *node = GetChildren()->First(); - while ( node ) + wxPaletteChangedEvent event(GetId()); + event.SetEventObject(this); + event.SetChangedWindow(wxFindWinFromHandle(hWndPalChange)); + GetEventHandler()->ProcessEvent(event); + return 0; +} + +long wxWindow::MSWOnQueryNewPalette() +{ + wxQueryNewPaletteEvent event(GetId()); + event.SetEventObject(this); + if (!GetEventHandler()->ProcessEvent(event) || !event.GetPaletteRealized()) { - // Only propagate to non-top-level windows + return (long) FALSE; + } + else + return (long) TRUE; +} + +// Responds to colour changes: passes event on to children. +void wxWindow::OnSysColourChanged(wxSysColourChangedEvent& event) +{ + wxNode *node = GetChildren()->First(); + while ( node ) + { + // Only propagate to non-top-level windows wxWindow *win = (wxWindow *)node->Data(); if ( win->GetParent() ) { @@ -1974,40 +1889,105 @@ void wxWindow::OnSysColourChanged(wxSysColourChangedEvent& event) long wxWindow::MSWDefWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) { if ( m_oldWndProc ) - return ::CallWindowProc(CASTWNDPROC (FARPROC) m_oldWndProc, (HWND) GetHWND(), (UINT) nMsg, (WPARAM) wParam, (LPARAM) lParam); + return ::CallWindowProc(CASTWNDPROC m_oldWndProc, (HWND) GetHWND(), (UINT) nMsg, (WPARAM) wParam, (LPARAM) lParam); else - return ::DefWindowProc((HWND) GetHWND(), nMsg, wParam, lParam); + return ::DefWindowProc((HWND) GetHWND(), nMsg, wParam, 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.", + wxGetMessageName(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 = 0; + 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 ) // this is 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_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)) +bool wxWindow::MSWTranslateMessage(WXMSG* pMsg) { -#if DEBUG > 1 + if (m_acceleratorTable.Ok() && + ::TranslateAccelerator((HWND) GetHWND(), (HACCEL) m_acceleratorTable.GetHACCEL(), (MSG *)pMsg)) + return TRUE; + else + return FALSE; +} + +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; @@ -2034,67 +2014,32 @@ 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 - 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)) + HRGN hRegion = ::CreateRectRgn(0, 0, 0, 0); // Dummy call to get a handle + ::GetUpdateRgn((HWND) GetHWND(), hRegion, FALSE); + + m_updateRegion = wxRegion((WXHRGN) hRegion); #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 + RECT updateRect; + ::GetUpdateRect((HWND) GetHWND(), & updateRect, FALSE); - if (isPanel) - // Do default processing - return FALSE; - else - return TRUE; - } -#ifdef __WIN32__ - DeleteObject(tRgn); -#endif - return FALSE; + m_updateRegion = wxRegion(updateRect.left, updateRect.top, + updateRect.right - updateRect.left, updateRect.bottom - updateRect.top); #endif + + wxPaintEvent event(m_windowId); + event.SetEventObject(this); + if (!GetEventHandler()->ProcessEvent(event)) + Default(); + return TRUE; } -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 +2047,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 +2061,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 control) { -#if DEBUG > 1 +#if WXDEBUG > 1 wxDebugMsg("wxWindow::MSWOnCommand\n"); #endif if (wxCurrentPopupMenu) @@ -2131,7 +2073,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 +2083,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,27 +2093,11 @@ bool wxWindow::MSWOnCommand(const WXWORD id, const WXWORD cmd, const WXHWND WXUN } else { -#if DEBUG > 1 - wxDebugMsg("Could not find item!\n"); - char buf[100]; - wxDebugMsg("Item ids for this panel:\n"); - - wxNode *current = GetChildren()->First(); - while (current) - { - wxObject *obj = (wxObject *)current->Data() ; - if (obj->IsKindOf(CLASSINFO(wxControl))) - { - wxControl *item = (wxControl *)current->Data(); - sprintf(buf, " %d\n", (int)item->m_windowId); - wxDebugMsg(buf); - } - current = current->Next(); - } - wxYield(); -#endif - return FALSE; + wxWindow *win = wxFindWinFromHandle(control); + if (win) + return win->MSWCommand(cmd, id); } + return FALSE; } long wxWindow::MSWOnSysCommand(WXWPARAM wParam, WXLPARAM lParam) @@ -2204,30 +2130,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 +2144,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 +2162,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 +2181,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 +2200,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 +2220,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 +2239,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 +2258,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 +2277,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 +2296,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 +2318,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 +2332,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 +2363,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 +2383,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 +2450,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 + Default(); } } -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 +2484,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 +2513,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 +2532,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,149 +2551,148 @@ 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; - break; + switch ( wParam ) + { + case SB_TOP: + event.m_eventType = wxEVT_SCROLL_TOP; + break; - case SB_BOTTOM: - event.m_eventType = wxEVENT_TYPE_SCROLL_BOTTOM; - break; + case SB_BOTTOM: + event.m_eventType = wxEVT_SCROLL_BOTTOM; + break; - case SB_LINEUP: - event.m_eventType = wxEVENT_TYPE_SCROLL_LINEUP; - break; + case SB_LINEUP: + event.m_eventType = wxEVT_SCROLL_LINEUP; + break; - case SB_LINEDOWN: - event.m_eventType = wxEVENT_TYPE_SCROLL_LINEDOWN; - break; + case SB_LINEDOWN: + event.m_eventType = wxEVT_SCROLL_LINEDOWN; + break; - case SB_PAGEUP: - event.m_eventType = wxEVENT_TYPE_SCROLL_PAGEUP; - break; + case SB_PAGEUP: + event.m_eventType = wxEVT_SCROLL_PAGEUP; + break; - case SB_PAGEDOWN: - event.m_eventType = wxEVENT_TYPE_SCROLL_PAGEDOWN; - break; + case SB_PAGEDOWN: + event.m_eventType = wxEVT_SCROLL_PAGEDOWN; + break; case SB_THUMBTRACK: case SB_THUMBPOSITION: - event.m_eventType = wxEVENT_TYPE_SCROLL_THUMBTRACK; - break; + event.m_eventType = wxEVT_SCROLL_THUMBTRACK; + break; - default: + default: return; break; - } + } 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); - return; - } + if ( child ) { + child->MSWOnHScroll(wParam, pos, control); + return; + } + } + else { wxScrollEvent event; event.SetPosition(pos); event.SetOrientation(wxHORIZONTAL); event.m_eventObject = this; + + switch ( wParam ) + { + case SB_TOP: + event.m_eventType = wxEVT_SCROLL_TOP; + break; + + case SB_BOTTOM: + event.m_eventType = wxEVT_SCROLL_BOTTOM; + break; + + case SB_LINEUP: + event.m_eventType = wxEVT_SCROLL_LINEUP; + break; + + case SB_LINEDOWN: + event.m_eventType = wxEVT_SCROLL_LINEDOWN; + break; + + case SB_PAGEUP: + event.m_eventType = wxEVT_SCROLL_PAGEUP; + break; + + case SB_PAGEDOWN: + event.m_eventType = wxEVT_SCROLL_PAGEDOWN; + break; + + case SB_THUMBTRACK: + case SB_THUMBPOSITION: + event.m_eventType = wxEVT_SCROLL_THUMBTRACK; + break; + + default: + return; + } - switch ( wParam ) - { - case SB_TOP: - event.m_eventType = wxEVENT_TYPE_SCROLL_TOP; - break; - - case SB_BOTTOM: - event.m_eventType = wxEVENT_TYPE_SCROLL_BOTTOM; - break; - - case SB_LINEUP: - event.m_eventType = wxEVENT_TYPE_SCROLL_LINEUP; - break; - - case SB_LINEDOWN: - event.m_eventType = wxEVENT_TYPE_SCROLL_LINEDOWN; - break; - - case SB_PAGEUP: - event.m_eventType = wxEVENT_TYPE_SCROLL_PAGEUP; - break; - - case SB_PAGEDOWN: - event.m_eventType = wxEVENT_TYPE_SCROLL_PAGEDOWN; - break; - - case SB_THUMBTRACK: - case SB_THUMBPOSITION: - event.m_eventType = wxEVENT_TYPE_SCROLL_THUMBTRACK; - break; + if ( GetEventHandler()->ProcessEvent(event) ) + return; + } - default: - return; - break; - } - if (!GetEventHandler()->ProcessEvent(event)) -#if WXWIN_COMPATIBILITY - GetEventHandler()->OldOnScroll(event); -#else - Default(); -#endif + // call the default WM_HSCROLL handler: it's non trivial in some common + // controls (up-down control for example) + Default(); } 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 +2703,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) ; @@ -2866,70 +2736,70 @@ int wxCharCodeMSWToWX(int keySym) { case VK_CANCEL: id = WXK_CANCEL; break; case VK_BACK: id = WXK_BACK; break; - case VK_TAB: id = WXK_TAB; break; - case VK_CLEAR: id = WXK_CLEAR; break; - case VK_RETURN: id = WXK_RETURN; break; - case VK_SHIFT: id = WXK_SHIFT; break; - case VK_CONTROL: id = WXK_CONTROL; break; - case VK_MENU : id = WXK_MENU; break; - case VK_PAUSE: id = WXK_PAUSE; break; - case VK_SPACE: id = WXK_SPACE; break; - case VK_ESCAPE: id = WXK_ESCAPE; break; - case VK_PRIOR: id = WXK_PRIOR; break; - case VK_NEXT : id = WXK_NEXT; break; - case VK_END: id = WXK_END; break; - case VK_HOME : id = WXK_HOME; break; - case VK_LEFT : id = WXK_LEFT; break; - case VK_UP: id = WXK_UP; break; - case VK_RIGHT: id = WXK_RIGHT; break; - case VK_DOWN : id = WXK_DOWN; break; - case VK_SELECT: id = WXK_SELECT; break; - case VK_PRINT: id = WXK_PRINT; break; - case VK_EXECUTE: id = WXK_EXECUTE; break; - case VK_INSERT: id = WXK_INSERT; break; - case VK_DELETE: id = WXK_DELETE; break; - case VK_HELP : id = WXK_HELP; break; - case VK_NUMPAD0: id = WXK_NUMPAD0; break; - case VK_NUMPAD1: id = WXK_NUMPAD1; break; - case VK_NUMPAD2: id = WXK_NUMPAD2; break; - case VK_NUMPAD3: id = WXK_NUMPAD3; break; - case VK_NUMPAD4: id = WXK_NUMPAD4; break; - case VK_NUMPAD5: id = WXK_NUMPAD5; break; - case VK_NUMPAD6: id = WXK_NUMPAD6; break; - case VK_NUMPAD7: id = WXK_NUMPAD7; break; - case VK_NUMPAD8: id = WXK_NUMPAD8; break; - case VK_NUMPAD9: id = WXK_NUMPAD9; break; - case VK_MULTIPLY: id = WXK_MULTIPLY; break; - case VK_ADD: id = WXK_ADD; break; - case VK_SUBTRACT: id = WXK_SUBTRACT; break; - case VK_DECIMAL: id = WXK_DECIMAL; break; - case VK_DIVIDE: id = WXK_DIVIDE; break; - case VK_F1: id = WXK_F1; break; - case VK_F2: id = WXK_F2; break; - case VK_F3: id = WXK_F3; break; - case VK_F4: id = WXK_F4; break; - case VK_F5: id = WXK_F5; break; - case VK_F6: id = WXK_F6; break; - case VK_F7: id = WXK_F7; break; - case VK_F8: id = WXK_F8; break; - case VK_F9: id = WXK_F9; break; - case VK_F10: id = WXK_F10; break; - case VK_F11: id = WXK_F11; break; - case VK_F12: id = WXK_F12; break; - case VK_F13: id = WXK_F13; break; - case VK_F14: id = WXK_F14; break; - case VK_F15: id = WXK_F15; break; - case VK_F16: id = WXK_F16; break; - case VK_F17: id = WXK_F17; break; - case VK_F18: id = WXK_F18; break; - case VK_F19: id = WXK_F19; break; - case VK_F20: id = WXK_F20; break; - case VK_F21: id = WXK_F21; break; - case VK_F22: id = WXK_F22; break; - case VK_F23: id = WXK_F23; break; - case VK_F24: id = WXK_F24; break; - case VK_NUMLOCK: id = WXK_NUMLOCK; break; - case VK_SCROLL: id = WXK_SCROLL; break; + case VK_TAB: id = WXK_TAB; break; + case VK_CLEAR: id = WXK_CLEAR; break; + case VK_RETURN: id = WXK_RETURN; break; + case VK_SHIFT: id = WXK_SHIFT; break; + case VK_CONTROL: id = WXK_CONTROL; break; + case VK_MENU : id = WXK_MENU; break; + case VK_PAUSE: id = WXK_PAUSE; break; + case VK_SPACE: id = WXK_SPACE; break; + case VK_ESCAPE: id = WXK_ESCAPE; break; + case VK_PRIOR: id = WXK_PRIOR; break; + case VK_NEXT : id = WXK_NEXT; break; + case VK_END: id = WXK_END; break; + case VK_HOME : id = WXK_HOME; break; + case VK_LEFT : id = WXK_LEFT; break; + case VK_UP: id = WXK_UP; break; + case VK_RIGHT: id = WXK_RIGHT; break; + case VK_DOWN : id = WXK_DOWN; break; + case VK_SELECT: id = WXK_SELECT; break; + case VK_PRINT: id = WXK_PRINT; break; + case VK_EXECUTE: id = WXK_EXECUTE; break; + case VK_INSERT: id = WXK_INSERT; break; + case VK_DELETE: id = WXK_DELETE; break; + case VK_HELP : id = WXK_HELP; break; + case VK_NUMPAD0: id = WXK_NUMPAD0; break; + case VK_NUMPAD1: id = WXK_NUMPAD1; break; + case VK_NUMPAD2: id = WXK_NUMPAD2; break; + case VK_NUMPAD3: id = WXK_NUMPAD3; break; + case VK_NUMPAD4: id = WXK_NUMPAD4; break; + case VK_NUMPAD5: id = WXK_NUMPAD5; break; + case VK_NUMPAD6: id = WXK_NUMPAD6; break; + case VK_NUMPAD7: id = WXK_NUMPAD7; break; + case VK_NUMPAD8: id = WXK_NUMPAD8; break; + case VK_NUMPAD9: id = WXK_NUMPAD9; break; + case VK_MULTIPLY: id = WXK_MULTIPLY; break; + case VK_ADD: id = WXK_ADD; break; + case VK_SUBTRACT: id = WXK_SUBTRACT; break; + case VK_DECIMAL: id = WXK_DECIMAL; break; + case VK_DIVIDE: id = WXK_DIVIDE; break; + case VK_F1: id = WXK_F1; break; + case VK_F2: id = WXK_F2; break; + case VK_F3: id = WXK_F3; break; + case VK_F4: id = WXK_F4; break; + case VK_F5: id = WXK_F5; break; + case VK_F6: id = WXK_F6; break; + case VK_F7: id = WXK_F7; break; + case VK_F8: id = WXK_F8; break; + case VK_F9: id = WXK_F9; break; + case VK_F10: id = WXK_F10; break; + case VK_F11: id = WXK_F11; break; + case VK_F12: id = WXK_F12; break; + case VK_F13: id = WXK_F13; break; + case VK_F14: id = WXK_F14; break; + case VK_F15: id = WXK_F15; break; + case VK_F16: id = WXK_F16; break; + case VK_F17: id = WXK_F17; break; + case VK_F18: id = WXK_F18; break; + case VK_F19: id = WXK_F19; break; + case VK_F20: id = WXK_F20; break; + case VK_F21: id = WXK_F21; break; + case VK_F22: id = WXK_F22; break; + case VK_F23: id = WXK_F23; break; + case VK_F24: id = WXK_F24; break; + case VK_NUMLOCK: id = WXK_NUMLOCK; break; + case VK_SCROLL: id = WXK_SCROLL; break; default: { return 0; @@ -2945,66 +2815,66 @@ int wxCharCodeWXToMSW(int id, bool *isVirtual) switch (id) { case WXK_CANCEL: keySym = VK_CANCEL; break; - case WXK_CLEAR: keySym = VK_CLEAR; break; - case WXK_SHIFT: keySym = VK_SHIFT; break; - case WXK_CONTROL: keySym = VK_CONTROL; break; - case WXK_MENU : keySym = VK_MENU; break; - case WXK_PAUSE: keySym = VK_PAUSE; break; - case WXK_PRIOR: keySym = VK_PRIOR; break; - case WXK_NEXT : keySym = VK_NEXT; break; - case WXK_END: keySym = VK_END; break; - case WXK_HOME : keySym = VK_HOME; break; - case WXK_LEFT : keySym = VK_LEFT; break; - case WXK_UP: keySym = VK_UP; break; - case WXK_RIGHT: keySym = VK_RIGHT; break; - case WXK_DOWN : keySym = VK_DOWN; break; - case WXK_SELECT: keySym = VK_SELECT; break; - case WXK_PRINT: keySym = VK_PRINT; break; - case WXK_EXECUTE: keySym = VK_EXECUTE; break; - case WXK_INSERT: keySym = VK_INSERT; break; - case WXK_DELETE: keySym = VK_DELETE; break; - case WXK_HELP : keySym = VK_HELP; break; - case WXK_NUMPAD0: keySym = VK_NUMPAD0; break; - case WXK_NUMPAD1: keySym = VK_NUMPAD1; break; - case WXK_NUMPAD2: keySym = VK_NUMPAD2; break; - case WXK_NUMPAD3: keySym = VK_NUMPAD3; break; - case WXK_NUMPAD4: keySym = VK_NUMPAD4; break; - case WXK_NUMPAD5: keySym = VK_NUMPAD5; break; - case WXK_NUMPAD6: keySym = VK_NUMPAD6; break; - case WXK_NUMPAD7: keySym = VK_NUMPAD7; break; - case WXK_NUMPAD8: keySym = VK_NUMPAD8; break; - case WXK_NUMPAD9: keySym = VK_NUMPAD9; break; - case WXK_MULTIPLY: keySym = VK_MULTIPLY; break; - case WXK_ADD: keySym = VK_ADD; break; - case WXK_SUBTRACT: keySym = VK_SUBTRACT; break; - case WXK_DECIMAL: keySym = VK_DECIMAL; break; - case WXK_DIVIDE: keySym = VK_DIVIDE; break; - case WXK_F1: keySym = VK_F1; break; - case WXK_F2: keySym = VK_F2; break; - case WXK_F3: keySym = VK_F3; break; - case WXK_F4: keySym = VK_F4; break; - case WXK_F5: keySym = VK_F5; break; - case WXK_F6: keySym = VK_F6; break; - case WXK_F7: keySym = VK_F7; break; - case WXK_F8: keySym = VK_F8; break; - case WXK_F9: keySym = VK_F9; break; - case WXK_F10: keySym = VK_F10; break; - case WXK_F11: keySym = VK_F11; break; - case WXK_F12: keySym = VK_F12; break; - case WXK_F13: keySym = VK_F13; break; - case WXK_F14: keySym = VK_F14; break; - case WXK_F15: keySym = VK_F15; break; - case WXK_F16: keySym = VK_F16; break; - case WXK_F17: keySym = VK_F17; break; - case WXK_F18: keySym = VK_F18; break; - case WXK_F19: keySym = VK_F19; break; - case WXK_F20: keySym = VK_F20; break; - case WXK_F21: keySym = VK_F21; break; - case WXK_F22: keySym = VK_F22; break; - case WXK_F23: keySym = VK_F23; break; - case WXK_F24: keySym = VK_F24; break; - case WXK_NUMLOCK: keySym = VK_NUMLOCK; break; - case WXK_SCROLL: keySym = VK_SCROLL; break; + case WXK_CLEAR: keySym = VK_CLEAR; break; + case WXK_SHIFT: keySym = VK_SHIFT; break; + case WXK_CONTROL: keySym = VK_CONTROL; break; + case WXK_MENU : keySym = VK_MENU; break; + case WXK_PAUSE: keySym = VK_PAUSE; break; + case WXK_PRIOR: keySym = VK_PRIOR; break; + case WXK_NEXT : keySym = VK_NEXT; break; + case WXK_END: keySym = VK_END; break; + case WXK_HOME : keySym = VK_HOME; break; + case WXK_LEFT : keySym = VK_LEFT; break; + case WXK_UP: keySym = VK_UP; break; + case WXK_RIGHT: keySym = VK_RIGHT; break; + case WXK_DOWN : keySym = VK_DOWN; break; + case WXK_SELECT: keySym = VK_SELECT; break; + case WXK_PRINT: keySym = VK_PRINT; break; + case WXK_EXECUTE: keySym = VK_EXECUTE; break; + case WXK_INSERT: keySym = VK_INSERT; break; + case WXK_DELETE: keySym = VK_DELETE; break; + case WXK_HELP : keySym = VK_HELP; break; + case WXK_NUMPAD0: keySym = VK_NUMPAD0; break; + case WXK_NUMPAD1: keySym = VK_NUMPAD1; break; + case WXK_NUMPAD2: keySym = VK_NUMPAD2; break; + case WXK_NUMPAD3: keySym = VK_NUMPAD3; break; + case WXK_NUMPAD4: keySym = VK_NUMPAD4; break; + case WXK_NUMPAD5: keySym = VK_NUMPAD5; break; + case WXK_NUMPAD6: keySym = VK_NUMPAD6; break; + case WXK_NUMPAD7: keySym = VK_NUMPAD7; break; + case WXK_NUMPAD8: keySym = VK_NUMPAD8; break; + case WXK_NUMPAD9: keySym = VK_NUMPAD9; break; + case WXK_MULTIPLY: keySym = VK_MULTIPLY; break; + case WXK_ADD: keySym = VK_ADD; break; + case WXK_SUBTRACT: keySym = VK_SUBTRACT; break; + case WXK_DECIMAL: keySym = VK_DECIMAL; break; + case WXK_DIVIDE: keySym = VK_DIVIDE; break; + case WXK_F1: keySym = VK_F1; break; + case WXK_F2: keySym = VK_F2; break; + case WXK_F3: keySym = VK_F3; break; + case WXK_F4: keySym = VK_F4; break; + case WXK_F5: keySym = VK_F5; break; + case WXK_F6: keySym = VK_F6; break; + case WXK_F7: keySym = VK_F7; break; + case WXK_F8: keySym = VK_F8; break; + case WXK_F9: keySym = VK_F9; break; + case WXK_F10: keySym = VK_F10; break; + case WXK_F11: keySym = VK_F11; break; + case WXK_F12: keySym = VK_F12; break; + case WXK_F13: keySym = VK_F13; break; + case WXK_F14: keySym = VK_F14; break; + case WXK_F15: keySym = VK_F15; break; + case WXK_F16: keySym = VK_F16; break; + case WXK_F17: keySym = VK_F17; break; + case WXK_F18: keySym = VK_F18; break; + case WXK_F19: keySym = VK_F19; break; + case WXK_F20: keySym = VK_F20; break; + case WXK_F21: keySym = VK_F21; break; + case WXK_F22: keySym = VK_F22; break; + case WXK_F23: keySym = VK_F23; break; + case WXK_F24: keySym = VK_F24; break; + case WXK_NUMLOCK: keySym = VK_NUMLOCK; break; + case WXK_SCROLL: keySym = VK_SCROLL; break; default: { *isVirtual = FALSE; @@ -3016,7 +2886,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 +2898,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 +2915,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); } @@ -3058,93 +2928,6 @@ void wxWindow::GetCaretPos(int *x, int *y) const *y = point.y; } -/* - * Update iterator. Use from within OnPaint. - */ - -static RECT gs_UpdateRect; - -wxUpdateIterator::wxUpdateIterator(wxWindow* wnd) -{ - current = 0; //start somewhere... -#if defined(__WIN32__) && !defined(__win32s__) - rlist = NULL; //make sure I don't free randomly - int len = GetRegionData((HRGN) wnd->m_updateRgn,0,NULL); //Get buffer size - if (len) - { - rlist = (WXRGNDATA *) (RGNDATA *)new char[len]; - GetRegionData((HRGN) wnd->m_updateRgn,len, (RGNDATA *)rlist); - rp = (void *)(RECT*) ((RGNDATA *)rlist)->Buffer; - rects = ((RGNDATA *)rlist)->rdh.nCount; - } - else -#endif - { - gs_UpdateRect.left = wnd->m_updateRect.x; - gs_UpdateRect.top = wnd->m_updateRect.y; - gs_UpdateRect.right = wnd->m_updateRect.x + wnd->m_updateRect.width; - gs_UpdateRect.bottom = wnd->m_updateRect.y + wnd->m_updateRect.height; - rects = 1; - rp = (void *)&gs_UpdateRect; //Only one available in Win16,32s - } -} - -wxUpdateIterator::~wxUpdateIterator(void) -{ -#ifdef __WIN32__ -#ifndef __win32s__ - if (rlist) delete (RGNDATA *) rlist; -#endif -#endif -} - -wxUpdateIterator::operator int (void) -{ - if (current < rects) - { - return TRUE; - } - else - { - return FALSE; - } -} - -wxUpdateIterator* wxUpdateIterator::operator ++(int) -{ - current++; - return this; -} - -void wxUpdateIterator::GetRect(wxRect *rect) -{ - RECT *mswRect = ((RECT *)rp)+current; //ought to error check this... - rect->x = mswRect->left; - rect->y = mswRect->top; - rect->width = mswRect->right - mswRect->left; - rect->height = mswRect->bottom - mswRect->top; -} - -int wxUpdateIterator::GetX() -{ - return ((RECT*)rp)[current].left; -} - -int wxUpdateIterator::GetY() -{ - return ((RECT *)rp)[current].top; -} - -int wxUpdateIterator::GetW() -{ - return ((RECT *)rp)[current].right-GetX(); -} - -int wxUpdateIterator::GetH() -{ - return ((RECT *)rp)[current].bottom-GetY(); -} - wxWindow *wxGetActiveWindow(void) { HWND hWnd = GetActiveWindow(); @@ -3203,27 +2986,23 @@ 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) - { + wxWindow *win = wxGetActiveWindow(); + if (win) + { if (win->GetEventHandler()->ProcessEvent(event)) - return 1; - } - else - { - if ( wxTheApp && wxTheApp->ProcessEvent(event) ) - return 1; - } + return 1; + } + else + { + if ( wxTheApp && wxTheApp->ProcessEvent(event) ) + return 1; + } } } 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 +3010,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,60 +3042,46 @@ 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 - // substract origin of the window, then convert to screen position + // Move the pointer to (x_pos,y_pos) coordinates. They are expressed in + // pixel coordinates, relatives to the canvas -- So, we first need to + // substract origin of the window, then convert to screen position - int x = x_pos; int y = y_pos; -/* Leave this to the app to decide (and/or wxScrolledWindow) - x -= m_xScrollPosition * m_xScrollPixelsPerLine; - y -= m_yScrollPosition * m_yScrollPixelsPerLine; -*/ - RECT rect; - GetWindowRect ((HWND) GetHWND(), &rect); + int x = x_pos; int y = y_pos; + RECT rect; + GetWindowRect ((HWND) GetHWND(), &rect); - x += rect.left; - y += rect.top; + x += rect.left; + y += rect.top; - SetCursorPos (x, y); + SetCursorPos (x, y); } void wxWindow::MSWDeviceToLogical (float *x, float *y) const { - // TODO - // Do we have a SetUserScale in wxWindow too, so we can - // get mouse events scaled? -/* - if (m_windowDC) - { - *x = m_windowDC->DeviceToLogicalX ((int) *x); - *y = m_windowDC->DeviceToLogicalY ((int) *y); - } -*/ } -bool wxWindow::MSWOnEraseBkgnd (const WXHDC pDC) +bool wxWindow::MSWOnEraseBkgnd (WXHDC pDC) { wxDC dc ; - dc.SetHDC(pDC); - dc.SetWindow(this); - dc.BeginDrawing(); + dc.SetHDC(pDC); + dc.SetWindow(this); + dc.BeginDrawing(); wxEraseEvent event(m_windowId, &dc); event.m_eventObject = this; if (!GetEventHandler()->ProcessEvent(event)) { - dc.EndDrawing(); - dc.SelectOldObjects(pDC); + dc.EndDrawing(); + dc.SelectOldObjects(pDC); return FALSE; } else { - dc.EndDrawing(); - dc.SelectOldObjects(pDC); + dc.EndDrawing(); + dc.SelectOldObjects(pDC); } dc.SetHDC((WXHDC) NULL); @@ -3348,7 +3113,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__) @@ -3359,16 +3124,16 @@ void wxWindow::SetScrollRange(const int orient, const int range, const bool refr int pageSize = GetScrollPage(orient); if ( pageSize > 1 && range > 0) { - range1 += (pageSize - 1); + range1 += (pageSize - 1); } SCROLLINFO info; int dir; if (orient == wxHORIZONTAL) { - dir = SB_HORZ; + dir = SB_HORZ; } else { - dir = SB_VERT; + dir = SB_VERT; } info.cbSize = sizeof(SCROLLINFO); @@ -3394,17 +3159,17 @@ 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; int dir; if (orient == wxHORIZONTAL) { - dir = SB_HORZ; + dir = SB_HORZ; m_xThumbSize = page; } else { - dir = SB_VERT; + dir = SB_VERT; m_yThumbSize = page; } @@ -3424,7 +3189,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) @@ -3447,7 +3212,7 @@ int wxWindow::OldGetScrollRange(const int orient) const int pageSize = GetScrollPage(orient); if ( pageSize > 1 ) { - maxPos -= (pageSize - 1); + maxPos -= (pageSize - 1); } #endif return maxPos; @@ -3456,7 +3221,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 +3230,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 +3248,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) @@ -3506,7 +3271,7 @@ int wxWindow::GetScrollRange(const int orient) const int pageSize = GetScrollPage(orient); if ( pageSize > 1 ) { - maxPos -= (pageSize - 1); + maxPos -= (pageSize - 1); } // October 10th: new range concept. maxPos += pageSize; @@ -3518,7 +3283,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,16 +3291,16 @@ 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; int dir; if (orient == wxHORIZONTAL) { - dir = SB_HORZ; + dir = SB_HORZ; } else { - dir = SB_VERT; + dir = SB_VERT; } info.cbSize = sizeof(SCROLLINFO); @@ -3561,8 +3326,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); @@ -3582,16 +3347,16 @@ void wxWindow::SetScrollbar(const int orient, const int pos, const int thumbVisi int pageSize = thumbVisible; if ( pageSize > 1 && range > 0) { - range1 += (pageSize - 1); + range1 += (pageSize - 1); } SCROLLINFO info; int dir; if (orient == wxHORIZONTAL) { - dir = SB_HORZ; + dir = SB_HORZ; } else { - dir = SB_VERT; + dir = SB_VERT; } info.cbSize = sizeof(SCROLLINFO); @@ -3625,65 +3390,33 @@ void wxWindow::SetScrollbar(const int orient, const int pos, const int thumbVisi } } -void wxWindow::ScrollWindow(const int dx, const int dy, const wxRectangle *rect) -{ - RECT rect2; - if ( rect ) - { - rect2.left = rect->x; - rect2.top = rect->y; - rect2.right = rect->x + rect->width; - rect2.bottom = rect->y + rect->height; - } - - if ( rect ) - ::ScrollWindow((HWND) GetHWND(), dx, dy, &rect2, NULL); - else - ::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::ScrollWindow(int dx, int dy, const wxRectangle *rect) { - *xx = x; - *yy = y; -} + RECT rect2; + if ( rect ) + { + rect2.left = rect->x; + rect2.top = rect->y; + rect2.right = rect->x + rect->width; + rect2.bottom = rect->y + rect->height; + } -void wxWindow::CalcUnscrolledPosition(const int x, const int y, float *xx, float *yy) const -{ - *xx = x; - *yy = y; + if ( rect ) + ::ScrollWindow((HWND) GetHWND(), dx, dy, &rect2, NULL); + else + ::ScrollWindow((HWND) GetHWND(), dx, dy, NULL, NULL); } -*/ void wxWindow::SetFont(const wxFont& font) { - // Decrement the usage count of the old label font - // (we may be able to free it up) -// if (GetFont()->Ok()) -// GetFont()->ReleaseResource(); - m_windowFont = font; if (!m_windowFont.Ok()) - return; - -// m_windowFont.UseResource(); + return; HWND hWnd = (HWND) GetHWND(); if (hWnd != 0) { -// m_windowFont.RealizeResource(); - if (m_windowFont.GetResourceHandle()) SendMessage(hWnd, WM_SETFONT, (WPARAM)m_windowFont.GetResourceHandle(),TRUE); @@ -3692,6 +3425,8 @@ void wxWindow::SetFont(const wxFont& font) void wxWindow::SubclassWin(WXHWND hWnd) { + wxASSERT_MSG( !m_oldWndProc, "subclassing window twice?" ); + wxAssociateWinWithHandle((HWND)hWnd, this); m_oldWndProc = (WXFARPROC) GetWindowLong((HWND) hWnd, GWL_WNDPROC); @@ -3700,38 +3435,38 @@ void wxWindow::SubclassWin(WXHWND hWnd) void wxWindow::UnsubclassWin(void) { - wxRemoveHandleAssociation(this); + wxRemoveHandleAssociation(this); // Restore old Window proc if ((HWND) GetHWND()) { FARPROC farProc = (FARPROC) GetWindowLong((HWND) GetHWND(), GWL_WNDPROC); if ((m_oldWndProc != 0) && (farProc != (FARPROC) m_oldWndProc)) - { + { SetWindowLong((HWND) GetHWND(), GWL_WNDPROC, (LONG) m_oldWndProc); - m_oldWndProc = 0; - } + m_oldWndProc = 0; + } } } // Make a Windows extended style from the given wxWindows window style WXDWORD wxWindow::MakeExtendedStyle(long style, bool eliminateBorders) { - WXDWORD exStyle = 0; - if ( style & wxTRANSPARENT_WINDOW ) - exStyle |= WS_EX_TRANSPARENT ; + WXDWORD exStyle = 0; + if ( style & wxTRANSPARENT_WINDOW ) + exStyle |= WS_EX_TRANSPARENT ; if ( !eliminateBorders ) { - if ( style & wxSUNKEN_BORDER ) - exStyle |= WS_EX_CLIENTEDGE ; - if ( style & wxDOUBLE_BORDER ) - exStyle |= WS_EX_DLGMODALFRAME ; + if ( style & wxSUNKEN_BORDER ) + exStyle |= WS_EX_CLIENTEDGE ; + if ( style & wxDOUBLE_BORDER ) + exStyle |= WS_EX_DLGMODALFRAME ; #if defined(__WIN95__) - if ( style & wxRAISED_BORDER ) - exStyle |= WS_EX_WINDOWEDGE ; - if ( style & wxSTATIC_BORDER ) - exStyle |= WS_EX_STATICEDGE ; + if ( style & wxRAISED_BORDER ) + exStyle |= WS_EX_WINDOWEDGE ; + if ( style & wxSTATIC_BORDER ) + exStyle |= WS_EX_STATICEDGE ; #endif } return exStyle; @@ -3746,8 +3481,8 @@ WXDWORD wxWindow::Determine3DEffects(WXDWORD defaultBorderStyle, bool *want3D) // unless specifically requested (dealt with in MakeExtendedStyle) if ( !GetParent() || !IsKindOf(CLASSINFO(wxControl)) || (m_windowStyle & wxNO_BORDER) ) { - *want3D = FALSE; - return MakeExtendedStyle(m_windowStyle, FALSE); + *want3D = FALSE; + return MakeExtendedStyle(m_windowStyle, FALSE); } // Determine whether we should be using 3D effects or not. @@ -3759,26 +3494,26 @@ WXDWORD wxWindow::Determine3DEffects(WXDWORD defaultBorderStyle, bool *want3D) // 2) If the parent is being drawn with user colours, or simple border specified, // switch effects off. TODO: replace wxUSER_COLOURS with wxNO_3D if (GetParent() && (GetParent()->GetWindowStyleFlag() & wxUSER_COLOURS) || (m_windowStyle & wxSIMPLE_BORDER)) - *want3D = FALSE; + *want3D = FALSE; // 3) Control can override this global setting by defining // a border style, e.g. wxSUNKEN_BORDER if (m_windowStyle & wxSUNKEN_BORDER ) - *want3D = TRUE; + *want3D = TRUE; // 4) If it's a special border, CTL3D can't cope so we want a native border if ( (m_windowStyle & wxDOUBLE_BORDER) || (m_windowStyle & wxRAISED_BORDER) || (m_windowStyle & wxSTATIC_BORDER) ) { - *want3D = TRUE; - nativeBorder = TRUE; + *want3D = TRUE; + nativeBorder = TRUE; } // 5) If this isn't a Win95 app, and we are using CTL3D, remove border // effects from extended style #if CTL3D if ( *want3D ) - nativeBorder = FALSE; + nativeBorder = FALSE; #endif DWORD exStyle = MakeExtendedStyle(m_windowStyle, !nativeBorder); @@ -3789,78 +3524,41 @@ WXDWORD wxWindow::Determine3DEffects(WXDWORD defaultBorderStyle, bool *want3D) #if defined(__WIN95__) && !CTL3D if (defaultBorderStyle && (*want3D) && ! ((m_windowStyle & wxDOUBLE_BORDER) || (m_windowStyle & wxRAISED_BORDER) || (m_windowStyle & wxSTATIC_BORDER) || (m_windowStyle & wxSIMPLE_BORDER) )) - exStyle |= defaultBorderStyle; // WS_EX_CLIENTEDGE ; + exStyle |= defaultBorderStyle; // WS_EX_CLIENTEDGE ; #endif 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) { - Default(); + Default(); } bool wxWindow::IsEnabled(void) const { - return (::IsWindowEnabled((HWND) GetHWND()) != 0); + return (::IsWindowEnabled((HWND) GetHWND()) != 0); } // Dialog support: override these and call @@ -3874,54 +3572,54 @@ bool wxWindow::IsEnabled(void) const // it's an application error (pops up a dialog) bool wxWindow::TransferDataToWindow(void) { - wxNode *node = GetChildren()->First(); - while ( node ) - { - wxWindow *child = (wxWindow *)node->Data(); - if ( child->GetValidator() && /* child->GetValidator()->Ok() && */ - !child->GetValidator()->TransferToWindow() ) - { - wxMessageBox("Application Error", "Could not transfer data to window", wxOK|wxICON_EXCLAMATION); - return FALSE; - } + wxNode *node = GetChildren()->First(); + while ( node ) + { + wxWindow *child = (wxWindow *)node->Data(); + if ( child->GetValidator() && /* child->GetValidator()->Ok() && */ + !child->GetValidator()->TransferToWindow() ) + { + wxMessageBox("Application Error", "Could not transfer data to window", wxOK|wxICON_EXCLAMATION); + return FALSE; + } - node = node->Next(); - } - return TRUE; + node = node->Next(); + } + return TRUE; } // Transfer values from controls. If returns FALSE, // validation failed: don't quit bool wxWindow::TransferDataFromWindow(void) { - wxNode *node = GetChildren()->First(); - while ( node ) - { - wxWindow *child = (wxWindow *)node->Data(); - if ( child->GetValidator() && /* child->GetValidator()->Ok() && */ !child->GetValidator()->TransferFromWindow() ) - { - return FALSE; - } + wxNode *node = GetChildren()->First(); + while ( node ) + { + wxWindow *child = (wxWindow *)node->Data(); + if ( child->GetValidator() && /* child->GetValidator()->Ok() && */ !child->GetValidator()->TransferFromWindow() ) + { + return FALSE; + } - node = node->Next(); - } - return TRUE; + node = node->Next(); + } + return TRUE; } bool wxWindow::Validate(void) { - wxNode *node = GetChildren()->First(); - while ( node ) - { - wxWindow *child = (wxWindow *)node->Data(); - if ( child->GetValidator() && /* child->GetValidator()->Ok() && */ !child->GetValidator()->Validate(this) ) - { - return FALSE; - } + wxNode *node = GetChildren()->First(); + while ( node ) + { + wxWindow *child = (wxWindow *)node->Data(); + if ( child->GetValidator() && /* child->GetValidator()->Ok() && */ !child->GetValidator()->Validate(this) ) + { + return FALSE; + } - node = node->Next(); - } - return TRUE; + node = node->Next(); + } + return TRUE; } // Get the window with the focus @@ -3956,14 +3654,14 @@ void wxWindow::DestroyChildren(void) wxWindow *child; if ((child = (wxWindow *)node->Data()) != (wxWindow *)NULL) { delete child; - if ( GetChildren()->Member(child) ) - delete node; + if ( GetChildren()->Member(child) ) + delete node; } } /* while */ } } -void wxWindow::MakeModal(const bool modal) +void wxWindow::MakeModal(bool modal) { // Disable all other windows if (this->IsKindOf(CLASSINFO(wxDialog)) || this->IsKindOf(CLASSINFO(wxFrame))) @@ -3986,7 +3684,7 @@ void wxWindow::MakeModal(const bool modal) void wxWindow::OnCommand(wxWindow& win, wxCommandEvent& event) { if (GetEventHandler()->ProcessEvent(event) ) - return; + return; if (m_windowParent) m_windowParent->GetEventHandler()->OnCommand(win, event); } @@ -4164,7 +3862,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 +3930,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() && @@ -4261,10 +3959,10 @@ void wxWindow::SetConstraintSizes(const bool recurse) char *windowClass = this->GetClassInfo()->GetClassName(); wxString winName; - if (GetName() == "") - winName = "unnamed"; - else - winName = GetName(); + if (GetName() == "") + winName = "unnamed"; + else + winName = GetName(); wxDebugMsg("Constraint(s) not satisfied for window of type %s, name %s:\n", (const char *)windowClass, (const char *)winName); if (!constr->left.GetDone()) wxDebugMsg(" unsatisfied 'left' constraint.\n"); @@ -4295,7 +3993,7 @@ void wxWindow::SetConstraintSizes(const bool recurse) void wxWindow::TransformSizerToActual(int *x, int *y) const { if (!m_sizerParent || m_sizerParent->IsKindOf(CLASSINFO(wxDialog)) || - m_sizerParent->IsKindOf(CLASSINFO(wxFrame)) ) + m_sizerParent->IsKindOf(CLASSINFO(wxFrame)) ) return; int xp, yp; @@ -4305,24 +4003,24 @@ 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; + int xx = x; + int yy = y; TransformSizerToActual(&xx, &yy); 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; + int xx = x; + int yy = y; TransformSizerToActual(&xx, &yy); Move(xx, yy); } // 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 +4048,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 +4102,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 +4132,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 +4152,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,14 +4179,16 @@ 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) { - wxClientDC dc(this); + wxClientDC dc(this); wxBrush brush(GetBackgroundColour(), wxSOLID); dc.SetBackground(brush); dc.Clear(); @@ -4493,68 +4197,68 @@ void wxWindow::Clear(void) // Fits the panel around the items void wxWindow::Fit(void) { - int maxX = 0; - int maxY = 0; - wxNode *node = GetChildren()->First(); - while ( node ) - { - wxWindow *win = (wxWindow *)node->Data(); - int wx, wy, ww, wh; - win->GetPosition(&wx, &wy); - win->GetSize(&ww, &wh); - if ( wx + ww > maxX ) - maxX = wx + ww; - if ( wy + wh > maxY ) - maxY = wy + wh; - - node = node->Next(); - } - SetClientSize(maxX + 5, maxY + 5); + int maxX = 0; + int maxY = 0; + wxNode *node = GetChildren()->First(); + while ( node ) + { + wxWindow *win = (wxWindow *)node->Data(); + int wx, wy, ww, wh; + win->GetPosition(&wx, &wy); + win->GetSize(&ww, &wh); + if ( wx + ww > maxX ) + maxX = wx + ww; + if ( wy + wh > maxY ) + maxY = wy + wh; + + node = node->Next(); + } + SetClientSize(maxX + 5, maxY + 5); } void wxWindow::SetValidator(const wxValidator& validator) { - if ( m_windowValidator ) - delete m_windowValidator; - m_windowValidator = validator.Clone(); + if ( m_windowValidator ) + delete m_windowValidator; + m_windowValidator = validator.Clone(); - if ( m_windowValidator ) - m_windowValidator->SetWindow(this) ; + if ( m_windowValidator ) + m_windowValidator->SetWindow(this) ; } // Find a window by id or name -wxWindow *wxWindow::FindWindow(const long id) +wxWindow *wxWindow::FindWindow(long id) { - if ( GetId() == id) - return this; + if ( GetId() == id) + return this; - wxNode *node = GetChildren()->First(); - while ( node ) - { - wxWindow *child = (wxWindow *)node->Data(); - wxWindow *found = child->FindWindow(id); - if ( found ) - return found; - node = node->Next(); - } - return NULL; + wxNode *node = GetChildren()->First(); + while ( node ) + { + wxWindow *child = (wxWindow *)node->Data(); + wxWindow *found = child->FindWindow(id); + if ( found ) + return found; + node = node->Next(); + } + return NULL; } wxWindow *wxWindow::FindWindow(const wxString& name) { - if ( GetName() == name) - return this; + if ( GetName() == name) + return this; - wxNode *node = GetChildren()->First(); - while ( node ) - { - wxWindow *child = (wxWindow *)node->Data(); - wxWindow *found = child->FindWindow(name); - if ( found ) - return found; - node = node->Next(); - } - return NULL; + wxNode *node = GetChildren()->First(); + while ( node ) + { + wxWindow *child = (wxWindow *)node->Data(); + wxWindow *found = child->FindWindow(name); + if ( found ) + return found; + node = node->Next(); + } + return NULL; } /* TODO @@ -4579,9 +4283,9 @@ void wxWindow::OnChar(wxKeyEvent& event) ViewStart(&start_x, &start_y); // Bugfix begin if (vert_units) - y_pages = (int)(v_height/vert_units) - y_page; + y_pages = (int)(v_height/vert_units) - y_page; -#ifdef __WINDOWS__ +#ifdef __WXMSW__ int y = 0; #else int y = y_page-1; @@ -4589,72 +4293,72 @@ void wxWindow::OnChar(wxKeyEvent& event) // Bugfix End switch (event.keyCode) { - case WXK_PRIOR: - { - // BugFix Begin - if (y_page > 0) - { - if (start_y - y_page > 0) - Scroll(start_x, start_y - y_page); - else - Scroll(start_x, 0); - } - // Bugfix End - break; - } - case WXK_NEXT: - { - // Bugfix Begin - if ((y_page > 0) && (start_y <= y_pages-y-1)) - { - if (y_pages + y < start_y + y_page) - Scroll(start_x, y_pages + y); - else - Scroll(start_x, start_y + y_page); - } - // Bugfix End - break; - } - case WXK_UP: - { - if ((y_page > 0) && (start_y >= 1)) - Scroll(start_x, start_y - 1); - break; - } - case WXK_DOWN: - { - // Bugfix Begin - if ((y_page > 0) && (start_y <= y_pages-y-1)) - // Bugfix End - { - Scroll(start_x, start_y + 1); - } - break; - } - case WXK_LEFT: - { - if ((x_page > 0) && (start_x >= 1)) - Scroll(start_x - 1, start_y); - break; - } - case WXK_RIGHT: - { - if (x_page > 0) - Scroll(start_x + 1, start_y); - break; - } - case WXK_HOME: - { - Scroll(0, 0); - break; - } - // This is new - case WXK_END: - { - Scroll(start_x, y_pages+y); - break; - } - // end + case WXK_PRIOR: + { + // BugFix Begin + if (y_page > 0) + { + if (start_y - y_page > 0) + Scroll(start_x, start_y - y_page); + else + Scroll(start_x, 0); + } + // Bugfix End + break; + } + case WXK_NEXT: + { + // Bugfix Begin + if ((y_page > 0) && (start_y <= y_pages-y-1)) + { + if (y_pages + y < start_y + y_page) + Scroll(start_x, y_pages + y); + else + Scroll(start_x, start_y + y_page); + } + // Bugfix End + break; + } + case WXK_UP: + { + if ((y_page > 0) && (start_y >= 1)) + Scroll(start_x, start_y - 1); + break; + } + case WXK_DOWN: + { + // Bugfix Begin + if ((y_page > 0) && (start_y <= y_pages-y-1)) + // Bugfix End + { + Scroll(start_x, start_y + 1); + } + break; + } + case WXK_LEFT: + { + if ((x_page > 0) && (start_x >= 1)) + Scroll(start_x - 1, start_y); + break; + } + case WXK_RIGHT: + { + if (x_page > 0) + Scroll(start_x + 1, start_y); + break; + } + case WXK_HOME: + { + Scroll(0, 0); + break; + } + // This is new + case WXK_END: + { + Scroll(start_x, y_pages+y); + break; + } + // end } } */ @@ -4662,46 +4366,8 @@ void wxWindow::OnChar(wxKeyEvent& event) // Setup background and foreground colours correctly void wxWindow::SetupColours(void) { - if (GetParent()) - SetBackgroundColour(GetParent()->GetBackgroundColour()); -} - -// Do Update UI processing for child controls - -// TODO: should this be implemented for the child window rather -// than the parent? Then you can override it e.g. for wxCheckBox -// to do the Right Thing rather than having to assume a fixed number -// of control classes. - -void wxWindow::UpdateWindowUI(void) -{ - wxWindowID id = GetId(); - if (id > 0) - { - wxUpdateUIEvent event(id); - event.m_eventObject = this; - - if (this->GetEventHandler()->ProcessEvent(event)) - { - if (event.GetSetEnabled()) - this->Enable(event.GetEnabled()); - - if (event.GetSetText() && this->IsKindOf(CLASSINFO(wxControl))) - ((wxControl*)this)->SetLabel(event.GetText()); - - if (this->IsKindOf(CLASSINFO(wxCheckBox))) - { - if (event.GetSetChecked()) - ((wxCheckBox *) this)->SetValue(event.GetChecked()); - } - else if (this->IsKindOf(CLASSINFO(wxRadioButton))) - { - if (event.GetSetChecked()) - ((wxRadioButton *) this)->SetValue(event.GetChecked()); - } - } - } - + if (GetParent()) + SetBackgroundColour(GetParent()->GetBackgroundColour()); } void wxWindow::OnIdle(wxIdleEvent& event) @@ -4715,11 +4381,21 @@ void wxWindow::OnIdle(wxIdleEvent& event) { // Generate a LEAVE event m_mouseInWindow = FALSE; - MSWOnMouseLeave(pt.x, pt.y, 0); + + int state; + if (::GetKeyState(VK_SHIFT) != 0) + state |= MK_SHIFT; + if (::GetKeyState(VK_CONTROL) != 0) + state |= MK_CONTROL; + + // Unfortunately the mouse button and keyboard state may have changed + // by the time the OnIdle function is called, so 'state' may be + // meaningless. + + MSWOnMouseLeave(pt.x, pt.y, state); } } - - UpdateWindowUI(); + UpdateWindowUI(); } // Raise the window to the top of the Z order @@ -4734,3 +4410,452 @@ 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(); +} + +// Update region access +wxRegion wxWindow::GetUpdateRegion() const +{ + return m_updateRegion; +} + +bool wxWindow::IsExposed(int x, int y, int w, int h) const +{ + return (m_updateRegion.Contains(x, y, w, h) != wxOutRegion); +} + +bool wxWindow::IsExposed(const wxPoint& pt) const +{ + return (m_updateRegion.Contains(pt) != wxOutRegion); +} + +bool wxWindow::IsExposed(const wxRect& rect) const +{ + return (m_updateRegion.Contains(rect) != wxOutRegion); +} + +#ifdef __WXDEBUG__ +const char *wxGetMessageName(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"; + +#ifdef __WIN32__ + case 0x004A: return "WM_COPYDATA"; + case 0x004B: return "WM_CANCELJOURNAL"; + case 0x004E: return "WM_NOTIFY"; + case 0x0050: return "WM_INPUTLANGCHANGEREQUEST"; + case 0x0051: return "WM_INPUTLANGCHANGE"; + case 0x0052: return "WM_TCARD"; + case 0x0053: return "WM_HELP"; + case 0x0054: return "WM_USERCHANGED"; + case 0x0055: return "WM_NOTIFYFORMAT"; + case 0x007B: return "WM_CONTEXTMENU"; + case 0x007C: return "WM_STYLECHANGING"; + case 0x007D: return "WM_STYLECHANGED"; + case 0x007E: return "WM_DISPLAYCHANGE"; + case 0x007F: return "WM_GETICON"; + case 0x0080: return "WM_SETICON"; +#endif //WIN32 + + 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"; + +#ifdef __WIN32__ + case 0x010D: return "WM_IME_STARTCOMPOSITION"; + case 0x010E: return "WM_IME_ENDCOMPOSITION"; + case 0x010F: return "WM_IME_COMPOSITION"; +#endif //WIN32 + + 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 0x0211: return "WM_ENTERMENULOOP"; + case 0x0212: return "WM_EXITMENULOOP"; + +#ifdef __WIN32__ + case 0x0213: return "WM_NEXTMENU"; + case 0x0214: return "WM_SIZING"; + case 0x0215: return "WM_CAPTURECHANGED"; + case 0x0216: return "WM_MOVING"; + case 0x0218: return "WM_POWERBROADCAST"; + case 0x0219: return "WM_DEVICECHANGE"; +#endif //WIN32 + + 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"; + +#ifdef __WIN32__ + case 0x0281: return "WM_IME_SETCONTEXT"; + case 0x0282: return "WM_IME_NOTIFY"; + case 0x0283: return "WM_IME_CONTROL"; + case 0x0284: return "WM_IME_COMPOSITIONFULL"; + case 0x0285: return "WM_IME_SELECT"; + case 0x0286: return "WM_IME_CHAR"; + case 0x0290: return "WM_IME_KEYDOWN"; + case 0x0291: return "WM_IME_KEYUP"; +#endif //WIN32 + + 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"; + +#ifdef __WIN32__ + // common controls messages - although they're not strictly speaking + // standard, it's nice to decode them nevertheless + + // listview + case 0x1000 + 0: return "LVM_GETBKCOLOR"; + case 0x1000 + 1: return "LVM_SETBKCOLOR"; + case 0x1000 + 2: return "LVM_GETIMAGELIST"; + case 0x1000 + 3: return "LVM_SETIMAGELIST"; + case 0x1000 + 4: return "LVM_GETITEMCOUNT"; + case 0x1000 + 5: return "LVM_GETITEMA"; + case 0x1000 + 75: return "LVM_GETITEMW"; + case 0x1000 + 6: return "LVM_SETITEMA"; + case 0x1000 + 76: return "LVM_SETITEMW"; + case 0x1000 + 7: return "LVM_INSERTITEMA"; + case 0x1000 + 77: return "LVM_INSERTITEMW"; + case 0x1000 + 8: return "LVM_DELETEITEM"; + case 0x1000 + 9: return "LVM_DELETEALLITEMS"; + case 0x1000 + 10: return "LVM_GETCALLBACKMASK"; + case 0x1000 + 11: return "LVM_SETCALLBACKMASK"; + case 0x1000 + 12: return "LVM_GETNEXTITEM"; + case 0x1000 + 13: return "LVM_FINDITEMA"; + case 0x1000 + 83: return "LVM_FINDITEMW"; + case 0x1000 + 14: return "LVM_GETITEMRECT"; + case 0x1000 + 15: return "LVM_SETITEMPOSITION"; + case 0x1000 + 16: return "LVM_GETITEMPOSITION"; + case 0x1000 + 17: return "LVM_GETSTRINGWIDTHA"; + case 0x1000 + 87: return "LVM_GETSTRINGWIDTHW"; + case 0x1000 + 18: return "LVM_HITTEST"; + case 0x1000 + 19: return "LVM_ENSUREVISIBLE"; + case 0x1000 + 20: return "LVM_SCROLL"; + case 0x1000 + 21: return "LVM_REDRAWITEMS"; + case 0x1000 + 22: return "LVM_ARRANGE"; + case 0x1000 + 23: return "LVM_EDITLABELA"; + case 0x1000 + 118: return "LVM_EDITLABELW"; + case 0x1000 + 24: return "LVM_GETEDITCONTROL"; + case 0x1000 + 25: return "LVM_GETCOLUMNA"; + case 0x1000 + 95: return "LVM_GETCOLUMNW"; + case 0x1000 + 26: return "LVM_SETCOLUMNA"; + case 0x1000 + 96: return "LVM_SETCOLUMNW"; + case 0x1000 + 27: return "LVM_INSERTCOLUMNA"; + case 0x1000 + 97: return "LVM_INSERTCOLUMNW"; + case 0x1000 + 28: return "LVM_DELETECOLUMN"; + case 0x1000 + 29: return "LVM_GETCOLUMNWIDTH"; + case 0x1000 + 30: return "LVM_SETCOLUMNWIDTH"; + case 0x1000 + 31: return "LVM_GETHEADER"; + case 0x1000 + 33: return "LVM_CREATEDRAGIMAGE"; + case 0x1000 + 34: return "LVM_GETVIEWRECT"; + case 0x1000 + 35: return "LVM_GETTEXTCOLOR"; + case 0x1000 + 36: return "LVM_SETTEXTCOLOR"; + case 0x1000 + 37: return "LVM_GETTEXTBKCOLOR"; + case 0x1000 + 38: return "LVM_SETTEXTBKCOLOR"; + case 0x1000 + 39: return "LVM_GETTOPINDEX"; + case 0x1000 + 40: return "LVM_GETCOUNTPERPAGE"; + case 0x1000 + 41: return "LVM_GETORIGIN"; + case 0x1000 + 42: return "LVM_UPDATE"; + case 0x1000 + 43: return "LVM_SETITEMSTATE"; + case 0x1000 + 44: return "LVM_GETITEMSTATE"; + case 0x1000 + 45: return "LVM_GETITEMTEXTA"; + case 0x1000 + 115: return "LVM_GETITEMTEXTW"; + case 0x1000 + 46: return "LVM_SETITEMTEXTA"; + case 0x1000 + 116: return "LVM_SETITEMTEXTW"; + case 0x1000 + 47: return "LVM_SETITEMCOUNT"; + case 0x1000 + 48: return "LVM_SORTITEMS"; + case 0x1000 + 49: return "LVM_SETITEMPOSITION32"; + case 0x1000 + 50: return "LVM_GETSELECTEDCOUNT"; + case 0x1000 + 51: return "LVM_GETITEMSPACING"; + case 0x1000 + 52: return "LVM_GETISEARCHSTRINGA"; + case 0x1000 + 117: return "LVM_GETISEARCHSTRINGW"; + case 0x1000 + 53: return "LVM_SETICONSPACING"; + case 0x1000 + 54: return "LVM_SETEXTENDEDLISTVIEWSTYLE"; + case 0x1000 + 55: return "LVM_GETEXTENDEDLISTVIEWSTYLE"; + case 0x1000 + 56: return "LVM_GETSUBITEMRECT"; + case 0x1000 + 57: return "LVM_SUBITEMHITTEST"; + case 0x1000 + 58: return "LVM_SETCOLUMNORDERARRAY"; + case 0x1000 + 59: return "LVM_GETCOLUMNORDERARRAY"; + case 0x1000 + 60: return "LVM_SETHOTITEM"; + case 0x1000 + 61: return "LVM_GETHOTITEM"; + case 0x1000 + 62: return "LVM_SETHOTCURSOR"; + case 0x1000 + 63: return "LVM_GETHOTCURSOR"; + case 0x1000 + 64: return "LVM_APPROXIMATEVIEWRECT"; + case 0x1000 + 65: return "LVM_SETWORKAREA"; + + // tree view + case 0x1100 + 0: return "TVM_INSERTITEMA"; + case 0x1100 + 50: return "TVM_INSERTITEMW"; + case 0x1100 + 1: return "TVM_DELETEITEM"; + case 0x1100 + 2: return "TVM_EXPAND"; + case 0x1100 + 4: return "TVM_GETITEMRECT"; + case 0x1100 + 5: return "TVM_GETCOUNT"; + case 0x1100 + 6: return "TVM_GETINDENT"; + case 0x1100 + 7: return "TVM_SETINDENT"; + case 0x1100 + 8: return "TVM_GETIMAGELIST"; + case 0x1100 + 9: return "TVM_SETIMAGELIST"; + case 0x1100 + 10: return "TVM_GETNEXTITEM"; + case 0x1100 + 11: return "TVM_SELECTITEM"; + case 0x1100 + 12: return "TVM_GETITEMA"; + case 0x1100 + 62: return "TVM_GETITEMW"; + case 0x1100 + 13: return "TVM_SETITEMA"; + case 0x1100 + 63: return "TVM_SETITEMW"; + case 0x1100 + 14: return "TVM_EDITLABELA"; + case 0x1100 + 65: return "TVM_EDITLABELW"; + case 0x1100 + 15: return "TVM_GETEDITCONTROL"; + case 0x1100 + 16: return "TVM_GETVISIBLECOUNT"; + case 0x1100 + 17: return "TVM_HITTEST"; + case 0x1100 + 18: return "TVM_CREATEDRAGIMAGE"; + case 0x1100 + 19: return "TVM_SORTCHILDREN"; + case 0x1100 + 20: return "TVM_ENSUREVISIBLE"; + case 0x1100 + 21: return "TVM_SORTCHILDRENCB"; + case 0x1100 + 22: return "TVM_ENDEDITLABELNOW"; + case 0x1100 + 23: return "TVM_GETISEARCHSTRINGA"; + case 0x1100 + 64: return "TVM_GETISEARCHSTRINGW"; + case 0x1100 + 24: return "TVM_SETTOOLTIPS"; + case 0x1100 + 25: return "TVM_GETTOOLTIPS"; + + // header + case 0x1200 + 0: return "HDM_GETITEMCOUNT"; + case 0x1200 + 1: return "HDM_INSERTITEMA"; + case 0x1200 + 10: return "HDM_INSERTITEMW"; + case 0x1200 + 2: return "HDM_DELETEITEM"; + case 0x1200 + 3: return "HDM_GETITEMA"; + case 0x1200 + 11: return "HDM_GETITEMW"; + case 0x1200 + 4: return "HDM_SETITEMA"; + case 0x1200 + 12: return "HDM_SETITEMW"; + case 0x1200 + 5: return "HDM_LAYOUT"; + case 0x1200 + 6: return "HDM_HITTEST"; + case 0x1200 + 7: return "HDM_GETITEMRECT"; + case 0x1200 + 8: return "HDM_SETIMAGELIST"; + case 0x1200 + 9: return "HDM_GETIMAGELIST"; + case 0x1200 + 15: return "HDM_ORDERTOINDEX"; + case 0x1200 + 16: return "HDM_CREATEDRAGIMAGE"; + case 0x1200 + 17: return "HDM_GETORDERARRAY"; + case 0x1200 + 18: return "HDM_SETORDERARRAY"; + case 0x1200 + 19: return "HDM_SETHOTDIVIDER"; + + // tab control + case 0x1300 + 2: return "TCM_GETIMAGELIST"; + case 0x1300 + 3: return "TCM_SETIMAGELIST"; + case 0x1300 + 4: return "TCM_GETITEMCOUNT"; + case 0x1300 + 5: return "TCM_GETITEMA"; + case 0x1300 + 60: return "TCM_GETITEMW"; + case 0x1300 + 6: return "TCM_SETITEMA"; + case 0x1300 + 61: return "TCM_SETITEMW"; + case 0x1300 + 7: return "TCM_INSERTITEMA"; + case 0x1300 + 62: return "TCM_INSERTITEMW"; + case 0x1300 + 8: return "TCM_DELETEITEM"; + case 0x1300 + 9: return "TCM_DELETEALLITEMS"; + case 0x1300 + 10: return "TCM_GETITEMRECT"; + case 0x1300 + 11: return "TCM_GETCURSEL"; + case 0x1300 + 12: return "TCM_SETCURSEL"; + case 0x1300 + 13: return "TCM_HITTEST"; + case 0x1300 + 14: return "TCM_SETITEMEXTRA"; + case 0x1300 + 40: return "TCM_ADJUSTRECT"; + case 0x1300 + 41: return "TCM_SETITEMSIZE"; + case 0x1300 + 42: return "TCM_REMOVEIMAGE"; + case 0x1300 + 43: return "TCM_SETPADDING"; + case 0x1300 + 44: return "TCM_GETROWCOUNT"; + case 0x1300 + 45: return "TCM_GETTOOLTIPS"; + case 0x1300 + 46: return "TCM_SETTOOLTIPS"; + case 0x1300 + 47: return "TCM_GETCURFOCUS"; + case 0x1300 + 48: return "TCM_SETCURFOCUS"; + case 0x1300 + 49: return "TCM_SETMINTABWIDTH"; + case 0x1300 + 50: return "TCM_DESELECTALL"; + + // toolbar + case WM_USER+1: return "TB_ENABLEBUTTON"; + case WM_USER+2: return "TB_CHECKBUTTON"; + case WM_USER+3: return "TB_PRESSBUTTON"; + case WM_USER+4: return "TB_HIDEBUTTON"; + case WM_USER+5: return "TB_INDETERMINATE"; + case WM_USER+9: return "TB_ISBUTTONENABLED"; + case WM_USER+10: return "TB_ISBUTTONCHECKED"; + case WM_USER+11: return "TB_ISBUTTONPRESSED"; + case WM_USER+12: return "TB_ISBUTTONHIDDEN"; + case WM_USER+13: return "TB_ISBUTTONINDETERMINATE"; + case WM_USER+17: return "TB_SETSTATE"; + case WM_USER+18: return "TB_GETSTATE"; + case WM_USER+19: return "TB_ADDBITMAP"; + case WM_USER+20: return "TB_ADDBUTTONS"; + case WM_USER+21: return "TB_INSERTBUTTON"; + case WM_USER+22: return "TB_DELETEBUTTON"; + case WM_USER+23: return "TB_GETBUTTON"; + case WM_USER+24: return "TB_BUTTONCOUNT"; + case WM_USER+25: return "TB_COMMANDTOINDEX"; + case WM_USER+26: return "TB_SAVERESTOREA"; + case WM_USER+76: return "TB_SAVERESTOREW"; + case WM_USER+27: return "TB_CUSTOMIZE"; + case WM_USER+28: return "TB_ADDSTRINGA"; + case WM_USER+77: return "TB_ADDSTRINGW"; + case WM_USER+29: return "TB_GETITEMRECT"; + case WM_USER+30: return "TB_BUTTONSTRUCTSIZE"; + case WM_USER+31: return "TB_SETBUTTONSIZE"; + case WM_USER+32: return "TB_SETBITMAPSIZE"; + case WM_USER+33: return "TB_AUTOSIZE"; + case WM_USER+35: return "TB_GETTOOLTIPS"; + case WM_USER+36: return "TB_SETTOOLTIPS"; + case WM_USER+37: return "TB_SETPARENT"; + case WM_USER+39: return "TB_SETROWS"; + case WM_USER+40: return "TB_GETROWS"; + case WM_USER+42: return "TB_SETCMDID"; + case WM_USER+43: return "TB_CHANGEBITMAP"; + case WM_USER+44: return "TB_GETBITMAP"; + case WM_USER+45: return "TB_GETBUTTONTEXTA"; + case WM_USER+75: return "TB_GETBUTTONTEXTW"; + case WM_USER+46: return "TB_REPLACEBITMAP"; + case WM_USER+47: return "TB_SETINDENT"; + case WM_USER+48: return "TB_SETIMAGELIST"; + case WM_USER+49: return "TB_GETIMAGELIST"; + case WM_USER+50: return "TB_LOADIMAGES"; + case WM_USER+51: return "TB_GETRECT"; + case WM_USER+52: return "TB_SETHOTIMAGELIST"; + case WM_USER+53: return "TB_GETHOTIMAGELIST"; + case WM_USER+54: return "TB_SETDISABLEDIMAGELIST"; + case WM_USER+55: return "TB_GETDISABLEDIMAGELIST"; + case WM_USER+56: return "TB_SETSTYLE"; + case WM_USER+57: return "TB_GETSTYLE"; + case WM_USER+58: return "TB_GETBUTTONSIZE"; + case WM_USER+59: return "TB_SETBUTTONWIDTH"; + case WM_USER+60: return "TB_SETMAXTEXTROWS"; + case WM_USER+61: return "TB_GETTEXTROWS"; + case WM_USER+41: return "TB_GETBITMAPFLAGS"; + +#endif //WIN32 + + default: + static char s_szBuf[128]; + sprintf(s_szBuf, "", message); + return s_szBuf; + } +} +#endif //WXDEBUG \ No newline at end of file