X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c0aadc6f40301f99cbdcc345807b808737a492bf..499bbaeba33ed77d8a43817de6713ba3f70b018d:/src/msw/window.cpp diff --git a/src/msw/window.cpp b/src/msw/window.cpp index 9888a26491..605d60812d 100644 --- a/src/msw/window.cpp +++ b/src/msw/window.cpp @@ -118,9 +118,13 @@ #include "wx/msw/missing.h" #if defined(__WXWINCE__) -#include "wx/msw/wince/missing.h" + #include "wx/msw/wince/missing.h" #endif +#if defined(TME_LEAVE) && defined(WM_MOUSELEAVE) + #define HAVE_TRACKMOUSEEVENT +#endif // everything needed for TrackMouseEvent() + // --------------------------------------------------------------------------- // global variables // --------------------------------------------------------------------------- @@ -288,7 +292,7 @@ wxBEGIN_PROPERTIES_TABLE(wxWindow) // Always constructor Properties first wxREADONLY_PROPERTY( Parent,wxWindow*, GetParent, EMPTY_MACROVALUE , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) - wxPROPERTY( Id,wxWindowID, SetId, GetId, wxID_ANY, 0 /*flags*/ , wxT("Helpstring") , wxT("group") ) + wxPROPERTY( Id,wxWindowID, SetId, GetId, -1 /*wxID_ANY*/ , 0 /*flags*/ , wxT("Helpstring") , wxT("group") ) wxPROPERTY( Position,wxPoint, SetPosition , GetPosition, wxDefaultPosition , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // pos wxPROPERTY( Size,wxSize, SetSize, GetSize, wxDefaultSize , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // size wxPROPERTY( WindowStyle , long , SetWindowStyleFlag , GetWindowStyleFlag , EMPTY_MACROVALUE , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // style @@ -1246,7 +1250,7 @@ bool wxWindowMSW::IsMouseInWindow() const void wxWindowMSW::OnInternalIdle() { -#ifdef __WXWINCE__ +#ifndef HAVE_TRACKMOUSEEVENT // Check if we need to send a LEAVE event if ( m_mouseInWindow ) { @@ -1257,7 +1261,7 @@ void wxWindowMSW::OnInternalIdle() GenerateMouseLeave(); } } -#endif // !__WXWINCE__ +#endif // !HAVE_TRACKMOUSEEVENT if (wxUpdateUIEvent::CanUpdate(this)) UpdateWindowUI(wxUPDATE_UI_FROMIDLE); @@ -1523,7 +1527,7 @@ void wxWindowMSW::DoMoveWindow(int x, int y, int width, int height) // otherwise (or if deferring failed) move the window in place immediately if ( !hdwp ) { - if ( !::MoveWindow(GetHwnd(), x, y, width, height, TRUE) ) + if ( !::MoveWindow(GetHwnd(), x, y, width, height, IsShown()) ) { wxLogLastError(wxT("MoveWindow")); } @@ -1828,7 +1832,8 @@ bool wxWindowMSW::MSWProcessMessage(WXMSG* pMsg) } bool bForward = true, - bWindowChange = false; + bWindowChange = false, + bFromTab = false; // should we process this message specially? bool bProcess = true; @@ -1842,6 +1847,7 @@ bool wxWindowMSW::MSWProcessMessage(WXMSG* pMsg) // Ctrl-Tab cycles thru notebook pages bWindowChange = bCtrlDown; bForward = !bShiftDown; + bFromTab = true; } break; @@ -1966,6 +1972,7 @@ bool wxWindowMSW::MSWProcessMessage(WXMSG* pMsg) wxNavigationKeyEvent event; event.SetDirection(bForward); event.SetWindowChange(bWindowChange); + event.SetFromTab(bFromTab); event.SetEventObject(this); if ( GetEventHandler()->ProcessEvent(event) ) @@ -2311,23 +2318,26 @@ WXLRESULT wxWindowMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM l break; } -#ifndef __WXWINCE__ - case WM_PRINT: +#ifdef WM_PRINT + case WM_PRINTCLIENT: + if ( GetParent() && + GetParent()->MSWPrintChild((wxWindow *)this, wParam, lParam) ) { -#if wxUSE_LISTCTRL - // Don't call the wx handlers in this case - if ( wxIsKindOf(this, wxListCtrl) ) - break; -#endif + processed = true; + } + break; + case WM_PRINT: + { if ( lParam & PRF_ERASEBKGND ) HandleEraseBkgnd((WXHDC)(HDC)wParam); wxPaintDCEx dc((wxWindow *)this, (WXHDC)wParam); + processed = HandlePaint(); } break; -#endif +#endif // WM_PRINT case WM_CLOSE: #ifdef __WXUNIVERSAL__ @@ -2354,23 +2364,20 @@ WXLRESULT wxWindowMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM l wParam); break; -#ifdef WM_MOUSELEAVE +#ifdef HAVE_TRACKMOUSEEVENT case WM_MOUSELEAVE: + // filter out excess WM_MOUSELEAVE events sent after PopupMenu() (on XP at least) + if ( m_mouseInWindow ) { - // filter out excess WM_MOUSELEAVE events sent after PopupMenu() (on XP at least) - if ( m_mouseInWindow ) - { - GenerateMouseLeave(); - } - - // always pass processed back as false, this allows the window - // manager to process the message too. This is needed to - // ensure windows XP themes work properly as the mouse moves - // over widgets like buttons. - processed = false; + GenerateMouseLeave(); } + + // always pass processed back as false, this allows the window + // manager to process the message too. This is needed to + // ensure windows XP themes work properly as the mouse moves + // over widgets like buttons. So don't set processed to true here. break; -#endif // WM_MOUSELEAVE +#endif // HAVE_TRACKMOUSEEVENT #if wxUSE_MOUSEWHEEL case WM_MOUSEWHEEL: @@ -2782,7 +2789,7 @@ WXLRESULT wxWindowMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM l wxHelpEvent helpEvent(wxEVT_HELP, subjectOfHelp->GetId(), #ifdef __WXWINCE__ - wxPoint() + wxPoint(0,0) #else wxPoint(info->MousePos.x, info->MousePos.y) #endif @@ -4034,13 +4041,21 @@ WXHBRUSH wxWindowMSW::MSWGetBgBrush(WXHDC hDC) // windows for which a custom colour had been explicitly set with // SetOwnBackgroundColour() and so shouldn't affect its children if ( win->ProvidesBackground() || - (win->m_hasBgCol && !win->m_inheritBgCol) ) + (win->UseBgCol() && !win->InheritsBackgroundColour()) ) break; } return 0; } +bool +wxWindowMSW::MSWPrintChild(wxWindow * WXUNUSED(win), + WXWPARAM WXUNUSED(wParam), + WXLPARAM WXUNUSED(lParam)) +{ + return false; +} + // --------------------------------------------------------------------------- // moving and resizing // --------------------------------------------------------------------------- @@ -4404,17 +4419,18 @@ bool wxWindowMSW::HandleMouseMove(int x, int y, WXUINT flags) { // Generate an ENTER event m_mouseInWindow = true; -#ifndef __WXWINCE__ - TRACKMOUSEEVENT trackinfo; - trackinfo.cbSize = sizeof(trackinfo); +#ifdef HAVE_TRACKMOUSEEVENT + WinStruct trackinfo; + trackinfo.dwFlags = TME_LEAVE; trackinfo.hwndTrack = GetHwnd(); - //Use the commctrl.h _TrackMouseEvent, which will call the - // appropriate TrackMouseEvent or emulate it ( win95 ) - // else we need _WIN32_WINNT >= 0x0400 + + // Use the commctrl.h _TrackMouseEvent(), which will call the real + // TrackMouseEvent() if available or emulate it _TrackMouseEvent(&trackinfo); -#endif // __WXWINCE__ +#endif // HAVE_TRACKMOUSEEVENT + wxMouseEvent event(wxEVT_ENTER_WINDOW); InitMouseEvent(event, x, y, flags); @@ -4940,7 +4956,7 @@ int wxCharCodeMSWToWX(int keySym, WXLPARAM lParam) case VK_CLEAR: id = WXK_CLEAR; break; case VK_SHIFT: id = WXK_SHIFT; break; case VK_CONTROL: id = WXK_CONTROL; break; - case VK_MENU : id = WXK_MENU; break; + case VK_MENU : id = WXK_ALT; break; case VK_PAUSE: id = WXK_PAUSE; break; case VK_CAPITAL: id = WXK_CAPITAL; break; case VK_SPACE: id = WXK_SPACE; break; @@ -5046,7 +5062,6 @@ WXWORD wxCharCodeWXToMSW(int id, bool *isVirtual) case WXK_SHIFT: keySym = VK_SHIFT; break; case WXK_CONTROL: keySym = VK_CONTROL; break; case WXK_ALT: keySym = VK_MENU; break; - case WXK_MENU : keySym = VK_MENU; break; case WXK_PAUSE: keySym = VK_PAUSE; break; case WXK_CAPITAL: keySym = VK_CAPITAL; break; case WXK_PRIOR: keySym = VK_PRIOR; break;