X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1a784dfc808db85f5e2616c014ea2ecd23c6a3c1..9175b26272dc4f9062bf268fa916f5b7a21d1dc6:/src/msw/window.cpp diff --git a/src/msw/window.cpp b/src/msw/window.cpp index 58d2235f7b..76b0b095ed 100644 --- a/src/msw/window.cpp +++ b/src/msw/window.cpp @@ -218,6 +218,18 @@ static void EnsureParentHasControlParentStyle(wxWindow *parent) #endif // !__WXWINCE__ +#ifdef __WXWINCE__ +// On Windows CE, GetCursorPos can return an error, so use this function +// instead +bool GetCursorPosWinCE(POINT* pt) +{ + DWORD pos = GetMessagePos(); + pt->x = LOWORD(pos); + pt->y = HIWORD(pos); + return true; +} +#endif + // --------------------------------------------------------------------------- // event tables // --------------------------------------------------------------------------- @@ -470,7 +482,12 @@ wxWindowMSW::~wxWindowMSW() { frame->SetLastFocus(NULL); } - break; + + // apparently sometimes we can end up with our grand parent + // pointing to us as well: this is surely a bug in focus handling + // code but it's not clear where it happens so for now just try to + // fix it here by not breaking out of the loop + //break; } } #endif // __WXUNIVERSAL__ @@ -757,7 +774,11 @@ bool wxWindowMSW::SetCursor(const wxCursor& cursor) // Change the cursor NOW if we're within the correct window POINT point; +#ifdef __WXWINCE__ + ::GetCursorPosWinCE(&point); +#else ::GetCursorPos(&point); +#endif RECT rect = wxGetWindowRect(hWnd); @@ -1235,7 +1256,11 @@ bool wxWindowMSW::IsMouseInWindow() const { // get the mouse position POINT pt; +#ifdef __WXWINCE__ + ::GetCursorPosWinCE(&pt); +#else ::GetCursorPos(&pt); +#endif // find the window which currently has the cursor and go up the window // chain until we find this window - or exhaust it @@ -3490,7 +3515,11 @@ bool wxWindowMSW::HandleSetCursor(WXHWND WXUNUSED(hWnd), // first ask the user code - it may wish to set the cursor in some very // specific way (for example, depending on the current position) POINT pt; +#ifdef __WXWINCE__ + if ( !::GetCursorPosWinCE(&pt) ) +#else if ( !::GetCursorPos(&pt) ) +#endif { wxLogLastError(wxT("GetCursorPos")); } @@ -3695,7 +3724,7 @@ bool wxWindowMSW::HandleDisplayChange() bool wxWindowMSW::HandleCtlColor(WXHBRUSH *brush, WXHDC hDC, WXHWND hWnd) { #if !wxUSE_CONTROLS || defined(__WXUNIVERSAL__) - wxUnusedVar(pDC); + wxUnusedVar(hDC); wxUnusedVar(hWnd); #else wxControl *item = wxDynamicCast(FindItemByHWND(hWnd, true), wxControl); @@ -4529,7 +4558,11 @@ void wxWindowMSW::GenerateMouseLeave() state |= MK_RBUTTON; POINT pt; +#ifdef __WXWINCE__ + if ( !::GetCursorPosWinCE(&pt) ) +#else if ( !::GetCursorPos(&pt) ) +#endif { wxLogLastError(_T("GetCursorPos")); } @@ -4576,7 +4609,11 @@ wxKeyEvent wxWindowMSW::CreateKeyEvent(wxEventType evType, // translate the position to client coords POINT pt; +#ifdef __WXWINCE__ + GetCursorPosWinCE(&pt); +#else GetCursorPos(&pt); +#endif RECT rect; GetWindowRect(GetHwnd(),&rect); pt.x -= rect.left; @@ -5797,7 +5834,11 @@ wxWindow* wxFindWindowAtPoint(const wxPoint& pt) wxPoint wxGetMousePosition() { POINT pt; +#ifdef __WXWINCE__ + GetCursorPosWinCE(&pt); +#else GetCursorPos( & pt ); +#endif return wxPoint(pt.x, pt.y); }