char handling fixed once again

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1970 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
1999-03-24 23:34:18 +00:00
parent dd3646fd30
commit 54bdd8b0ff

View File

@@ -1235,9 +1235,7 @@ long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
// If this has been processed by an event handler, // If this has been processed by an event handler,
// return 0 now (we've handled it). // return 0 now (we've handled it).
if ( MSWOnKeyDown((WORD) wParam, lParam) ) if ( MSWOnKeyDown((WORD) wParam, lParam) )
{ break;
return 0;
}
// we consider these message "not interesting" to OnChar // we consider these message "not interesting" to OnChar
if ( wParam == VK_SHIFT || wParam == VK_CONTROL ) if ( wParam == VK_SHIFT || wParam == VK_CONTROL )
@@ -1245,31 +1243,29 @@ long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
return Default(); return Default();
} }
// Avoid duplicate messages to OnChar for these special keys
switch ( wParam ) 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_ESCAPE:
case VK_SPACE: case VK_SPACE:
case VK_RETURN: case VK_RETURN:
case VK_BACK: case VK_BACK:
case VK_TAB: case VK_TAB:
case VK_LEFT:
case VK_RIGHT:
case VK_DOWN:
case VK_UP:
return Default(); return Default();
#ifdef VK_APPS #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 #ifndef GET_X_LPARAM
#define GET_X_LPARAM(lp) ((int)(short)LOWORD(lp)) #define GET_X_LPARAM(lp) ((int)(short)LOWORD(lp))
#define GET_Y_LPARAM(lp) ((int)(short)HIWORD(lp)) #define GET_Y_LPARAM(lp) ((int)(short)HIWORD(lp))
#endif #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 // construct the key mask
WPARAM fwKeys = MK_RBUTTON; WPARAM fwKeys = MK_RBUTTON;
if ( (::GetKeyState(VK_CONTROL) & 0x100) != 0 ) if ( (::GetKeyState(VK_CONTROL) & 0x100) != 0 )
@@ -1288,6 +1284,10 @@ long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
break; break;
#endif // VK_APPS #endif // VK_APPS
case VK_LEFT:
case VK_RIGHT:
case VK_DOWN:
case VK_UP:
default: default:
if ( !MSWOnChar((WORD)wParam, lParam) ) if ( !MSWOnChar((WORD)wParam, lParam) )
{ {
@@ -1295,20 +1295,18 @@ long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
} }
break; break;
} }
break; break;
case WM_KEYUP: case WM_KEYUP:
{
if ( !MSWOnKeyUp((WORD) wParam, lParam) ) if ( !MSWOnKeyUp((WORD) wParam, lParam) )
return Default(); return Default();
break; break;
}
case WM_CHAR: // Always an ASCII character case WM_CHAR: // Always an ASCII character
{
if ( !MSWOnChar((WORD)wParam, lParam, TRUE) ) if ( !MSWOnChar((WORD)wParam, lParam, TRUE) )
return Default(); return Default();
break; break;
}
case WM_HSCROLL: case WM_HSCROLL:
{ {
#ifdef __WIN32__ #ifdef __WIN32__
@@ -2565,6 +2563,8 @@ void wxWindow::MSWOnMouseLeave(int x, int y, WXUINT flags)
GetEventHandler()->ProcessEvent(event); 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) bool wxWindow::MSWOnChar(WXWORD wParam, WXLPARAM lParam, bool isASCII)
{ {
int id; int id;
@@ -2636,7 +2636,7 @@ bool wxWindow::MSWOnChar(WXWORD wParam, WXLPARAM lParam, bool isASCII)
return FALSE; return FALSE;
} }
bool wxWindow::MSWOnKeyDown(WXWORD wParam, WXLPARAM lParam, bool isASCII) bool wxWindow::MSWOnKeyDown(WXWORD wParam, WXLPARAM lParam)
{ {
int id; 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; int id;