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_GETTITLEBARINFOEX 0x033F
|
||||
|
||||
#define XBUTTON1 0x0001
|
||||
#define XBUTTON2 0x0002
|
||||
|
||||
#if (_WIN32_WINNT >= 0x0400)
|
||||
#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
|
||||
#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)
|
||||
#define WM_THEMECHANGED 794
|
||||
#endif
|
||||
|
||||
#define BM_CLICK 245
|
||||
#define BM_GETCHECK 240
|
||||
#define BM_GETIMAGE 246
|
||||
|
|
|
@ -102,17 +102,17 @@ ConioProcessInputEvent(PCONSOLE Console,
|
|||
}
|
||||
|
||||
static DWORD FASTCALL
|
||||
ConioGetShiftState(PBYTE KeyState)
|
||||
ConioGetShiftState(PBYTE KeyState, LPARAM lParam)
|
||||
{
|
||||
DWORD ssOut = 0;
|
||||
|
||||
if (KeyState[VK_CAPITAL] & 1)
|
||||
if (KeyState[VK_CAPITAL] & 0x01)
|
||||
ssOut |= CAPSLOCK_ON;
|
||||
|
||||
if (KeyState[VK_NUMLOCK] & 1)
|
||||
if (KeyState[VK_NUMLOCK] & 0x01)
|
||||
ssOut |= NUMLOCK_ON;
|
||||
|
||||
if (KeyState[VK_SCROLL] & 1)
|
||||
if (KeyState[VK_SCROLL] & 0x01)
|
||||
ssOut |= SCROLLLOCK_ON;
|
||||
|
||||
if (KeyState[VK_SHIFT] & 0x80)
|
||||
|
@ -128,6 +128,10 @@ ConioGetShiftState(PBYTE KeyState)
|
|||
if (KeyState[VK_RMENU] & 0x80)
|
||||
ssOut |= RIGHT_ALT_PRESSED;
|
||||
|
||||
/* See WM_CHAR MSDN documentation for instance */
|
||||
if (lParam & 0x01000000)
|
||||
ssOut |= ENHANCED_KEY;
|
||||
|
||||
return ssOut;
|
||||
}
|
||||
|
||||
|
@ -161,7 +165,7 @@ ConioProcessKey(PCONSOLE Console, MSG* msg)
|
|||
msg->message == WM_SYSKEYDOWN || msg->message == WM_SYSCHAR;
|
||||
|
||||
GetKeyboardState(KeyState);
|
||||
ShiftState = ConioGetShiftState(KeyState);
|
||||
ShiftState = ConioGetShiftState(KeyState, msg->lParam);
|
||||
|
||||
if (msg->message == WM_CHAR || msg->message == WM_SYSCHAR)
|
||||
{
|
||||
|
|
|
@ -950,7 +950,9 @@ GuiConsoleHandleMouse(PGUI_CONSOLE_DATA GuiData, UINT msg, WPARAM wParam, LPARAM
|
|||
else if (Console->InputBuffer.Mode & ENABLE_MOUSE_INPUT)
|
||||
{
|
||||
INPUT_RECORD er;
|
||||
WORD wKeyState = GET_KEYSTATE_WPARAM(wParam);
|
||||
DWORD dwButtonState = 0;
|
||||
DWORD dwControlKeyState = 0;
|
||||
DWORD dwEventFlags = 0;
|
||||
|
||||
switch (msg)
|
||||
|
@ -960,24 +962,39 @@ GuiConsoleHandleMouse(PGUI_CONSOLE_DATA GuiData, UINT msg, WPARAM wParam, LPARAM
|
|||
dwEventFlags = 0;
|
||||
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:
|
||||
dwButtonState = 0;
|
||||
dwEventFlags = 0;
|
||||
break;
|
||||
|
||||
case WM_MBUTTONUP:
|
||||
dwButtonState = 0;
|
||||
dwEventFlags = 0;
|
||||
break;
|
||||
|
||||
case WM_RBUTTONUP:
|
||||
dwButtonState = 0;
|
||||
dwEventFlags = 0;
|
||||
break;
|
||||
|
||||
case WM_LBUTTONDBLCLK:
|
||||
dwButtonState = FROM_LEFT_1ST_BUTTON_PRESSED;
|
||||
dwEventFlags = DOUBLE_CLICK;
|
||||
break;
|
||||
|
||||
case WM_RBUTTONDOWN:
|
||||
dwButtonState = RIGHTMOST_BUTTON_PRESSED;
|
||||
dwEventFlags = 0;
|
||||
break;
|
||||
|
||||
case WM_RBUTTONUP:
|
||||
dwButtonState = 0;
|
||||
dwEventFlags = 0;
|
||||
case WM_MBUTTONDBLCLK:
|
||||
dwButtonState = FROM_LEFT_2ND_BUTTON_PRESSED;
|
||||
dwEventFlags = DOUBLE_CLICK;
|
||||
break;
|
||||
|
||||
case WM_RBUTTONDBLCLK:
|
||||
|
@ -985,33 +1002,18 @@ GuiConsoleHandleMouse(PGUI_CONSOLE_DATA GuiData, UINT msg, WPARAM wParam, LPARAM
|
|||
dwEventFlags = DOUBLE_CLICK;
|
||||
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:
|
||||
dwButtonState = 0;
|
||||
dwEventFlags = MOUSE_MOVED;
|
||||
break;
|
||||
|
||||
case WM_MOUSEWHEEL:
|
||||
dwButtonState = 0;
|
||||
dwButtonState = GET_WHEEL_DELTA_WPARAM(wParam) << 16;
|
||||
dwEventFlags = MOUSE_WHEELED;
|
||||
break;
|
||||
|
||||
case WM_MOUSEHWHEEL:
|
||||
dwButtonState = 0;
|
||||
dwButtonState = GET_WHEEL_DELTA_WPARAM(wParam) << 16;
|
||||
dwEventFlags = MOUSE_HWHEELED;
|
||||
break;
|
||||
|
||||
|
@ -1020,14 +1022,44 @@ GuiConsoleHandleMouse(PGUI_CONSOLE_DATA GuiData, UINT msg, WPARAM wParam, LPARAM
|
|||
break;
|
||||
}
|
||||
|
||||
if (Ret)
|
||||
{
|
||||
if (wKeyState & MK_LBUTTON)
|
||||
dwButtonState |= FROM_LEFT_1ST_BUTTON_PRESSED;
|
||||
if (wKeyState & MK_MBUTTON)
|
||||
dwButtonState |= FROM_LEFT_2ND_BUTTON_PRESSED;
|
||||
if (wKeyState & MK_RBUTTON)
|
||||
dwButtonState |= RIGHTMOST_BUTTON_PRESSED;
|
||||
|
||||
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 = 0;
|
||||
er.Event.MouseEvent.dwControlKeyState = dwControlKeyState;
|
||||
er.Event.MouseEvent.dwEventFlags = dwEventFlags;
|
||||
|
||||
ConioProcessInputEvent(Console, &er);
|
||||
}
|
||||
}
|
||||
|
||||
LeaveCriticalSection(&Console->Lock);
|
||||
|
||||
|
@ -1425,14 +1457,14 @@ GuiConsoleWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|||
break;
|
||||
|
||||
case WM_LBUTTONDOWN:
|
||||
case WM_LBUTTONUP:
|
||||
case WM_LBUTTONDBLCLK:
|
||||
case WM_RBUTTONDOWN:
|
||||
case WM_RBUTTONUP:
|
||||
case WM_RBUTTONDBLCLK:
|
||||
case WM_MBUTTONDOWN:
|
||||
case WM_RBUTTONDOWN:
|
||||
case WM_LBUTTONUP:
|
||||
case WM_MBUTTONUP:
|
||||
case WM_RBUTTONUP:
|
||||
case WM_LBUTTONDBLCLK:
|
||||
case WM_MBUTTONDBLCLK:
|
||||
case WM_RBUTTONDBLCLK:
|
||||
case WM_MOUSEMOVE:
|
||||
case WM_MOUSEWHEEL:
|
||||
case WM_MOUSEHWHEEL:
|
||||
|
@ -1693,7 +1725,7 @@ GuiInit(VOID)
|
|||
wc.cbSize = sizeof(WNDCLASSEXW);
|
||||
wc.lpszClassName = GUI_CONSOLE_WINDOW_CLASS;
|
||||
wc.lpfnWndProc = GuiConsoleWndProc;
|
||||
wc.style = 0;
|
||||
wc.style = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
|
||||
wc.hInstance = ConSrvDllInstance;
|
||||
wc.hIcon = ghDefaultIcon;
|
||||
wc.hIconSm = ghDefaultIconSm;
|
||||
|
|
Loading…
Reference in a new issue