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:
@@ -1234,10 +1234,8 @@ long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
|
|||||||
case WM_KEYDOWN:
|
case WM_KEYDOWN:
|
||||||
// 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
|
||||||
|
|
||||||
|
// 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))
|
||||||
|
#endif
|
||||||
|
|
||||||
// special case of VK_APPS: treat it the same as right mouse click
|
// special case of VK_APPS: treat it the same as right mouse click
|
||||||
// because both usually pop up a context menu
|
// because both usually pop up a context menu
|
||||||
case VK_APPS:
|
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
|
// 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,27 +1284,29 @@ 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) )
|
||||||
{
|
{
|
||||||
return Default();
|
return Default();
|
||||||
}
|
}
|
||||||
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;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user