X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/839b865d081f1410a8508b22f11a4f028d14daf9..aeab6775d8db7da3b52c16ae6f2f8e3604f6f101:/src/msw/window.cpp diff --git a/src/msw/window.cpp b/src/msw/window.cpp index 750f5c7c53..404ae402a7 100644 --- a/src/msw/window.cpp +++ b/src/msw/window.cpp @@ -59,6 +59,8 @@ #include "wx/msw/private.h" +#include "wx/textctrl.h" + #include #ifndef __GNUWIN32__ @@ -234,6 +236,7 @@ void wxWindow::Init() m_isWindow = TRUE; // Generic +// m_windowCursor = * wxSTANDARD_CURSOR; m_windowId = 0; m_isShown = TRUE; m_windowStyle = 0; @@ -938,7 +941,7 @@ LRESULT APIENTRY _EXPORT wxWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA #define DIMENSION_TYPE int #endif -// Main Windows 3 window proc +// Main Windows window proc long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) { wxASSERT( m_lastMsg == message && @@ -1176,6 +1179,7 @@ long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) return MSWOnSysCommand(wParam, lParam); break; } + case WM_COMMAND: { #ifdef __WIN32__ @@ -1227,7 +1231,6 @@ long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) return MSWOnMeasureItem((int)wParam, (WXMEASUREITEMSTRUCT *)lParam); break; } - case WM_KEYDOWN: // If this has been processed by an event handler, // return 0 now (we've handled it). @@ -1261,6 +1264,12 @@ long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) // because both usually pop up a context menu case VK_APPS: { + +#ifndef GET_X_LPARAM +#define GET_X_LPARAM(lp) ((int)(short)LOWORD(lp)) +#define GET_Y_LPARAM(lp) ((int)(short)HIWORD(lp)) +#endif + // construct the key mask WPARAM fwKeys = MK_RBUTTON; if ( (::GetKeyState(VK_CONTROL) & 0x100) != 0 ) @@ -1288,7 +1297,6 @@ long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) } break; - case WM_KEYUP: { if (!MSWOnKeyUp((WORD) wParam, lParam)) @@ -1301,7 +1309,6 @@ long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) return Default(); break; } - case WM_HSCROLL: { #ifdef __WIN32__ @@ -1479,7 +1486,6 @@ long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) return 1L; break; } - case WM_GETMINMAXINFO: { MINMAXINFO *info = (MINMAXINFO *)lParam; @@ -1494,55 +1500,63 @@ long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) return MSWDefWindowProc(message, wParam, lParam ); break; } - case WM_GETDLGCODE: - return MSWGetDlgCode(); - + { + return MSWGetDlgCode(); + } case WM_SETCURSOR: { - // don't set cursor when the mouse is not in the client part - short nHitTest = LOWORD(lParam); - if ( nHitTest == HTCLIENT || nHitTest == HTERROR ) + // don't set cursor for other windows, only for this one: this + // prevents children of this window from gettign the same cursor + // as the parent has (don't forget that this message is propagated + // by default up the window parent-child hierarchy) + if ( (HWND)wParam == hWnd ) { - HCURSOR hcursor = 0; - if ( wxIsBusy() ) - { - extern HCURSOR gs_wxBusyCursor; // from msw\utils.cpp - - hcursor = gs_wxBusyCursor; - } - else + // don't set cursor when the mouse is not in the client part + short nHitTest = LOWORD(lParam); + if ( nHitTest == HTCLIENT || nHitTest == HTERROR ) { - wxCursor *cursor = NULL; - - if ( m_windowCursor.Ok() ) + HCURSOR hcursor = 0; + if ( wxIsBusy() ) { - cursor = &m_windowCursor; + // from msw\utils.cpp + extern HCURSOR gs_wxBusyCursor; + + hcursor = gs_wxBusyCursor; } else { - extern wxCursor *g_globalCursor; // from msw\data.cpp + wxCursor *cursor = NULL; - if ( g_globalCursor && g_globalCursor->Ok() ) - cursor = g_globalCursor; - } + if ( m_windowCursor.Ok() ) + { + cursor = &m_windowCursor; + } + else + { + // from msw\data.cpp + extern wxCursor *g_globalCursor; - if ( cursor ) - hcursor = (HCURSOR)cursor->GetHCURSOR(); - } + if ( g_globalCursor && g_globalCursor->Ok() ) + cursor = g_globalCursor; + } - if ( hcursor ) - { - ::SetCursor(hcursor); + if ( cursor ) + hcursor = (HCURSOR)cursor->GetHCURSOR(); + } - // returning TRUE stops the DefWindowProc() from further - // processing this message - exactly what we need because we've - // just set the cursor. - return TRUE; + if ( hcursor ) + { + ::SetCursor(hcursor); + + // returning TRUE stops the DefWindowProc() from + // further processing this message - exactly what we + // need because we've just set the cursor. + return TRUE; + } } } } - return MSWDefWindowProc(message, wParam, lParam ); default: @@ -2138,6 +2152,7 @@ bool wxWindow::MSWProcessMessage(WXMSG* pMsg) if ( ::IsDialogMessage((HWND)GetHWND(), msg) ) return TRUE; } + #if wxUSE_TOOLTIPS if ( m_tooltip ) { @@ -2148,6 +2163,19 @@ bool wxWindow::MSWProcessMessage(WXMSG* pMsg) } #endif // wxUSE_TOOLTIPS +/* This code manages to disable character input completely. Nice one! + * Probably because the dialog is requesting all char input. Or, + * it gets called by non-dialog windows. + + // In case we don't have wxTAB_TRAVERSAL style on. + // If we don't call this, we may never process Enter correctly. + if ( m_hWnd != 0 && (GetWindowStyleFlag() & wxTAB_TRAVERSAL) == 0 ) + { + MSG *msg = (MSG *)pMsg; + if ( ::IsDialogMessage((HWND)GetHWND(), msg) ) + return TRUE; + } +*/ return FALSE; }