mirror of
https://github.com/reactos/reactos.git
synced 2024-08-01 00:58:16 +00:00
[PSDK]
Introduce GET_KEYSTATE_WPARAM, GET_NCHITTEST_WPARAM, GET_XBUTTON_WPARAM macros. [CONSRV] Fix double-click, mouse scrolling and add support for control keys. svn path=/branches/ros-csrss/; revision=58623
This commit is contained in:
parent
e1f0919480
commit
b0125170ac
|
@ -1833,17 +1833,24 @@ extern "C" {
|
||||||
#define WM_APP 32768
|
#define WM_APP 32768
|
||||||
#define WM_GETTITLEBARINFOEX 0x033F
|
#define WM_GETTITLEBARINFOEX 0x033F
|
||||||
|
|
||||||
#define XBUTTON1 0x0001
|
|
||||||
#define XBUTTON2 0x0002
|
|
||||||
|
|
||||||
#if (_WIN32_WINNT >= 0x0400)
|
#if (_WIN32_WINNT >= 0x0400)
|
||||||
#define WHEEL_DELTA 120
|
#define WHEEL_DELTA 120
|
||||||
#define GET_WHEEL_DELTA_WPARAM(wparam) ((short)HIWORD (wparam))
|
#define GET_WHEEL_DELTA_WPARAM(wParam) ((short)HIWORD(wParam))
|
||||||
#define WHEEL_PAGESCROLL UINT_MAX
|
#define WHEEL_PAGESCROLL UINT_MAX
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if (_WIN32_WINNT >= 0x0500)
|
||||||
|
#define GET_KEYSTATE_WPARAM(wParam) (LOWORD(wParam))
|
||||||
|
#define GET_NCHITTEST_WPARAM(wParam) ((short)LOWORD(wParam))
|
||||||
|
#define GET_XBUTTON_WPARAM(wParam) (HIWORD(wParam))
|
||||||
|
#define XBUTTON1 0x0001
|
||||||
|
#define XBUTTON2 0x0002
|
||||||
|
#endif
|
||||||
|
|
||||||
#if (_WIN32_WINNT >= 0x0501)
|
#if (_WIN32_WINNT >= 0x0501)
|
||||||
#define WM_THEMECHANGED 794
|
#define WM_THEMECHANGED 794
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define BM_CLICK 245
|
#define BM_CLICK 245
|
||||||
#define BM_GETCHECK 240
|
#define BM_GETCHECK 240
|
||||||
#define BM_GETIMAGE 246
|
#define BM_GETIMAGE 246
|
||||||
|
|
|
@ -102,17 +102,17 @@ ConioProcessInputEvent(PCONSOLE Console,
|
||||||
}
|
}
|
||||||
|
|
||||||
static DWORD FASTCALL
|
static DWORD FASTCALL
|
||||||
ConioGetShiftState(PBYTE KeyState)
|
ConioGetShiftState(PBYTE KeyState, LPARAM lParam)
|
||||||
{
|
{
|
||||||
DWORD ssOut = 0;
|
DWORD ssOut = 0;
|
||||||
|
|
||||||
if (KeyState[VK_CAPITAL] & 1)
|
if (KeyState[VK_CAPITAL] & 0x01)
|
||||||
ssOut |= CAPSLOCK_ON;
|
ssOut |= CAPSLOCK_ON;
|
||||||
|
|
||||||
if (KeyState[VK_NUMLOCK] & 1)
|
if (KeyState[VK_NUMLOCK] & 0x01)
|
||||||
ssOut |= NUMLOCK_ON;
|
ssOut |= NUMLOCK_ON;
|
||||||
|
|
||||||
if (KeyState[VK_SCROLL] & 1)
|
if (KeyState[VK_SCROLL] & 0x01)
|
||||||
ssOut |= SCROLLLOCK_ON;
|
ssOut |= SCROLLLOCK_ON;
|
||||||
|
|
||||||
if (KeyState[VK_SHIFT] & 0x80)
|
if (KeyState[VK_SHIFT] & 0x80)
|
||||||
|
@ -128,6 +128,10 @@ ConioGetShiftState(PBYTE KeyState)
|
||||||
if (KeyState[VK_RMENU] & 0x80)
|
if (KeyState[VK_RMENU] & 0x80)
|
||||||
ssOut |= RIGHT_ALT_PRESSED;
|
ssOut |= RIGHT_ALT_PRESSED;
|
||||||
|
|
||||||
|
/* See WM_CHAR MSDN documentation for instance */
|
||||||
|
if (lParam & 0x01000000)
|
||||||
|
ssOut |= ENHANCED_KEY;
|
||||||
|
|
||||||
return ssOut;
|
return ssOut;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -161,7 +165,7 @@ ConioProcessKey(PCONSOLE Console, MSG* msg)
|
||||||
msg->message == WM_SYSKEYDOWN || msg->message == WM_SYSCHAR;
|
msg->message == WM_SYSKEYDOWN || msg->message == WM_SYSCHAR;
|
||||||
|
|
||||||
GetKeyboardState(KeyState);
|
GetKeyboardState(KeyState);
|
||||||
ShiftState = ConioGetShiftState(KeyState);
|
ShiftState = ConioGetShiftState(KeyState, msg->lParam);
|
||||||
|
|
||||||
if (msg->message == WM_CHAR || msg->message == WM_SYSCHAR)
|
if (msg->message == WM_CHAR || msg->message == WM_SYSCHAR)
|
||||||
{
|
{
|
||||||
|
|
|
@ -950,8 +950,10 @@ GuiConsoleHandleMouse(PGUI_CONSOLE_DATA GuiData, UINT msg, WPARAM wParam, LPARAM
|
||||||
else if (Console->InputBuffer.Mode & ENABLE_MOUSE_INPUT)
|
else if (Console->InputBuffer.Mode & ENABLE_MOUSE_INPUT)
|
||||||
{
|
{
|
||||||
INPUT_RECORD er;
|
INPUT_RECORD er;
|
||||||
DWORD dwButtonState = 0;
|
WORD wKeyState = GET_KEYSTATE_WPARAM(wParam);
|
||||||
DWORD dwEventFlags = 0;
|
DWORD dwButtonState = 0;
|
||||||
|
DWORD dwControlKeyState = 0;
|
||||||
|
DWORD dwEventFlags = 0;
|
||||||
|
|
||||||
switch (msg)
|
switch (msg)
|
||||||
{
|
{
|
||||||
|
@ -960,24 +962,39 @@ GuiConsoleHandleMouse(PGUI_CONSOLE_DATA GuiData, UINT msg, WPARAM wParam, LPARAM
|
||||||
dwEventFlags = 0;
|
dwEventFlags = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case WM_MBUTTONDOWN:
|
||||||
|
dwButtonState = FROM_LEFT_2ND_BUTTON_PRESSED;
|
||||||
|
dwEventFlags = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WM_RBUTTONDOWN:
|
||||||
|
dwButtonState = RIGHTMOST_BUTTON_PRESSED;
|
||||||
|
dwEventFlags = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
case WM_LBUTTONUP:
|
case WM_LBUTTONUP:
|
||||||
dwButtonState = 0;
|
dwButtonState = 0;
|
||||||
dwEventFlags = 0;
|
dwEventFlags = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case WM_MBUTTONUP:
|
||||||
|
dwButtonState = 0;
|
||||||
|
dwEventFlags = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WM_RBUTTONUP:
|
||||||
|
dwButtonState = 0;
|
||||||
|
dwEventFlags = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
case WM_LBUTTONDBLCLK:
|
case WM_LBUTTONDBLCLK:
|
||||||
dwButtonState = FROM_LEFT_1ST_BUTTON_PRESSED;
|
dwButtonState = FROM_LEFT_1ST_BUTTON_PRESSED;
|
||||||
dwEventFlags = DOUBLE_CLICK;
|
dwEventFlags = DOUBLE_CLICK;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_RBUTTONDOWN:
|
case WM_MBUTTONDBLCLK:
|
||||||
dwButtonState = RIGHTMOST_BUTTON_PRESSED;
|
dwButtonState = FROM_LEFT_2ND_BUTTON_PRESSED;
|
||||||
dwEventFlags = 0;
|
dwEventFlags = DOUBLE_CLICK;
|
||||||
break;
|
|
||||||
|
|
||||||
case WM_RBUTTONUP:
|
|
||||||
dwButtonState = 0;
|
|
||||||
dwEventFlags = 0;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_RBUTTONDBLCLK:
|
case WM_RBUTTONDBLCLK:
|
||||||
|
@ -985,33 +1002,18 @@ GuiConsoleHandleMouse(PGUI_CONSOLE_DATA GuiData, UINT msg, WPARAM wParam, LPARAM
|
||||||
dwEventFlags = DOUBLE_CLICK;
|
dwEventFlags = DOUBLE_CLICK;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_MBUTTONDOWN:
|
|
||||||
dwButtonState = FROM_LEFT_2ND_BUTTON_PRESSED;
|
|
||||||
dwEventFlags = 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case WM_MBUTTONUP:
|
|
||||||
dwButtonState = 0;
|
|
||||||
dwEventFlags = 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case WM_MBUTTONDBLCLK:
|
|
||||||
dwButtonState = FROM_LEFT_2ND_BUTTON_PRESSED;
|
|
||||||
dwEventFlags = DOUBLE_CLICK;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case WM_MOUSEMOVE:
|
case WM_MOUSEMOVE:
|
||||||
dwButtonState = 0;
|
dwButtonState = 0;
|
||||||
dwEventFlags = MOUSE_MOVED;
|
dwEventFlags = MOUSE_MOVED;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_MOUSEWHEEL:
|
case WM_MOUSEWHEEL:
|
||||||
dwButtonState = 0;
|
dwButtonState = GET_WHEEL_DELTA_WPARAM(wParam) << 16;
|
||||||
dwEventFlags = MOUSE_WHEELED;
|
dwEventFlags = MOUSE_WHEELED;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_MOUSEHWHEEL:
|
case WM_MOUSEHWHEEL:
|
||||||
dwButtonState = 0;
|
dwButtonState = GET_WHEEL_DELTA_WPARAM(wParam) << 16;
|
||||||
dwEventFlags = MOUSE_HWHEELED;
|
dwEventFlags = MOUSE_HWHEELED;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1020,13 +1022,43 @@ GuiConsoleHandleMouse(PGUI_CONSOLE_DATA GuiData, UINT msg, WPARAM wParam, LPARAM
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
er.EventType = MOUSE_EVENT;
|
if (Ret)
|
||||||
er.Event.MouseEvent.dwMousePosition = PointToCoord(GuiData, lParam);
|
{
|
||||||
er.Event.MouseEvent.dwButtonState = dwButtonState;
|
if (wKeyState & MK_LBUTTON)
|
||||||
er.Event.MouseEvent.dwControlKeyState = 0;
|
dwButtonState |= FROM_LEFT_1ST_BUTTON_PRESSED;
|
||||||
er.Event.MouseEvent.dwEventFlags = dwEventFlags;
|
if (wKeyState & MK_MBUTTON)
|
||||||
|
dwButtonState |= FROM_LEFT_2ND_BUTTON_PRESSED;
|
||||||
|
if (wKeyState & MK_RBUTTON)
|
||||||
|
dwButtonState |= RIGHTMOST_BUTTON_PRESSED;
|
||||||
|
|
||||||
ConioProcessInputEvent(Console, &er);
|
if (GetKeyState(VK_RMENU) & 0x8000)
|
||||||
|
dwControlKeyState |= RIGHT_ALT_PRESSED;
|
||||||
|
if (GetKeyState(VK_LMENU) & 0x8000)
|
||||||
|
dwControlKeyState |= LEFT_ALT_PRESSED;
|
||||||
|
if (GetKeyState(VK_RCONTROL) & 0x8000)
|
||||||
|
dwControlKeyState |= RIGHT_CTRL_PRESSED;
|
||||||
|
if (GetKeyState(VK_LCONTROL) & 0x8000)
|
||||||
|
dwControlKeyState |= LEFT_CTRL_PRESSED;
|
||||||
|
if (GetKeyState(VK_SHIFT) & 0x8000)
|
||||||
|
dwControlKeyState |= SHIFT_PRESSED;
|
||||||
|
if (GetKeyState(VK_NUMLOCK) & 0x0001)
|
||||||
|
dwControlKeyState |= NUMLOCK_ON;
|
||||||
|
if (GetKeyState(VK_SCROLL) & 0x0001)
|
||||||
|
dwControlKeyState |= SCROLLLOCK_ON;
|
||||||
|
if (GetKeyState(VK_CAPITAL) & 0x0001)
|
||||||
|
dwControlKeyState |= CAPSLOCK_ON;
|
||||||
|
/* See WM_CHAR MSDN documentation for instance */
|
||||||
|
if (lParam & 0x01000000)
|
||||||
|
dwControlKeyState |= ENHANCED_KEY;
|
||||||
|
|
||||||
|
er.EventType = MOUSE_EVENT;
|
||||||
|
er.Event.MouseEvent.dwMousePosition = PointToCoord(GuiData, lParam);
|
||||||
|
er.Event.MouseEvent.dwButtonState = dwButtonState;
|
||||||
|
er.Event.MouseEvent.dwControlKeyState = dwControlKeyState;
|
||||||
|
er.Event.MouseEvent.dwEventFlags = dwEventFlags;
|
||||||
|
|
||||||
|
ConioProcessInputEvent(Console, &er);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LeaveCriticalSection(&Console->Lock);
|
LeaveCriticalSection(&Console->Lock);
|
||||||
|
@ -1425,14 +1457,14 @@ GuiConsoleWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_LBUTTONDOWN:
|
case WM_LBUTTONDOWN:
|
||||||
case WM_LBUTTONUP:
|
|
||||||
case WM_LBUTTONDBLCLK:
|
|
||||||
case WM_RBUTTONDOWN:
|
|
||||||
case WM_RBUTTONUP:
|
|
||||||
case WM_RBUTTONDBLCLK:
|
|
||||||
case WM_MBUTTONDOWN:
|
case WM_MBUTTONDOWN:
|
||||||
|
case WM_RBUTTONDOWN:
|
||||||
|
case WM_LBUTTONUP:
|
||||||
case WM_MBUTTONUP:
|
case WM_MBUTTONUP:
|
||||||
|
case WM_RBUTTONUP:
|
||||||
|
case WM_LBUTTONDBLCLK:
|
||||||
case WM_MBUTTONDBLCLK:
|
case WM_MBUTTONDBLCLK:
|
||||||
|
case WM_RBUTTONDBLCLK:
|
||||||
case WM_MOUSEMOVE:
|
case WM_MOUSEMOVE:
|
||||||
case WM_MOUSEWHEEL:
|
case WM_MOUSEWHEEL:
|
||||||
case WM_MOUSEHWHEEL:
|
case WM_MOUSEHWHEEL:
|
||||||
|
@ -1693,7 +1725,7 @@ GuiInit(VOID)
|
||||||
wc.cbSize = sizeof(WNDCLASSEXW);
|
wc.cbSize = sizeof(WNDCLASSEXW);
|
||||||
wc.lpszClassName = GUI_CONSOLE_WINDOW_CLASS;
|
wc.lpszClassName = GUI_CONSOLE_WINDOW_CLASS;
|
||||||
wc.lpfnWndProc = GuiConsoleWndProc;
|
wc.lpfnWndProc = GuiConsoleWndProc;
|
||||||
wc.style = 0;
|
wc.style = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
|
||||||
wc.hInstance = ConSrvDllInstance;
|
wc.hInstance = ConSrvDllInstance;
|
||||||
wc.hIcon = ghDefaultIcon;
|
wc.hIcon = ghDefaultIcon;
|
||||||
wc.hIconSm = ghDefaultIconSm;
|
wc.hIconSm = ghDefaultIconSm;
|
||||||
|
|
Loading…
Reference in a new issue