From: Vadim Zeitlin Date: Wed, 24 Mar 1999 23:34:18 +0000 (+0000) Subject: char handling fixed once again X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/54bdd8b0ff56a753ec41a31c8cec5cccf70a9ec5?ds=sidebyside char handling fixed once again git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1970 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/msw/window.cpp b/src/msw/window.cpp index 404ae402a7..93396297f8 100644 --- a/src/msw/window.cpp +++ b/src/msw/window.cpp @@ -1234,10 +1234,8 @@ long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) case WM_KEYDOWN: // If this has been processed by an event handler, // return 0 now (we've handled it). - if (MSWOnKeyDown((WORD) wParam, lParam)) - { - return 0; - } + if ( MSWOnKeyDown((WORD) wParam, lParam) ) + break; // we consider these message "not interesting" to OnChar if ( wParam == VK_SHIFT || wParam == VK_CONTROL ) @@ -1245,31 +1243,29 @@ long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) return Default(); } - // Avoid duplicate messages to OnChar for these special keys switch ( wParam ) { + // avoid duplicate messages to OnChar for these ASCII keys: they + // will be translated by TranslateMessage() and received in WM_CHAR case VK_ESCAPE: case VK_SPACE: case VK_RETURN: case VK_BACK: case VK_TAB: - case VK_LEFT: - case VK_RIGHT: - case VK_DOWN: - case VK_UP: return Default(); #ifdef VK_APPS - // special case of VK_APPS: treat it the same as right mouse click - // because both usually pop up a context menu - case VK_APPS: - { + // normally these macros would be defined in windows.h #ifndef GET_X_LPARAM -#define GET_X_LPARAM(lp) ((int)(short)LOWORD(lp)) -#define GET_Y_LPARAM(lp) ((int)(short)HIWORD(lp)) + #define GET_X_LPARAM(lp) ((int)(short)LOWORD(lp)) + #define GET_Y_LPARAM(lp) ((int)(short)HIWORD(lp)) #endif + // special case of VK_APPS: treat it the same as right mouse click + // because both usually pop up a context menu + case VK_APPS: + { // construct the key mask WPARAM fwKeys = MK_RBUTTON; if ( (::GetKeyState(VK_CONTROL) & 0x100) != 0 ) @@ -1288,27 +1284,29 @@ long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) break; #endif // VK_APPS + case VK_LEFT: + case VK_RIGHT: + case VK_DOWN: + case VK_UP: default: - if (!MSWOnChar((WORD)wParam, lParam)) + if ( !MSWOnChar((WORD)wParam, lParam) ) { return Default(); } break; } - break; + case WM_KEYUP: - { - if (!MSWOnKeyUp((WORD) wParam, lParam)) + if ( !MSWOnKeyUp((WORD) wParam, lParam) ) return Default(); break; - } + case WM_CHAR: // Always an ASCII character - { - if (!MSWOnChar((WORD)wParam, lParam, TRUE)) - return Default(); - break; - } + if ( !MSWOnChar((WORD)wParam, lParam, TRUE) ) + return Default(); + break; + case WM_HSCROLL: { #ifdef __WIN32__ @@ -2565,6 +2563,8 @@ void wxWindow::MSWOnMouseLeave(int x, int y, WXUINT flags) GetEventHandler()->ProcessEvent(event); } +// isASCII is TRUE only when we're called from WM_CHAR handler and not from +// WM_KEYDOWN one bool wxWindow::MSWOnChar(WXWORD wParam, WXLPARAM lParam, bool isASCII) { int id; @@ -2636,7 +2636,7 @@ bool wxWindow::MSWOnChar(WXWORD wParam, WXLPARAM lParam, bool isASCII) return FALSE; } -bool wxWindow::MSWOnKeyDown(WXWORD wParam, WXLPARAM lParam, bool isASCII) +bool wxWindow::MSWOnKeyDown(WXWORD wParam, WXLPARAM lParam) { int id; @@ -2677,7 +2677,7 @@ bool wxWindow::MSWOnKeyDown(WXWORD wParam, WXLPARAM lParam, bool isASCII) } } -bool wxWindow::MSWOnKeyUp(WXWORD wParam, WXLPARAM lParam, bool isASCII) +bool wxWindow::MSWOnKeyUp(WXWORD wParam, WXLPARAM lParam) { int id;