Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#include "stdafx.h"
#include "Lava.h"
#include "MsgHelp.h"
/***************************************************************************\
* * GdConvertMouseMessage (Public) * * GdConvertMouseMessage converts from an HWND mouse event into a Gadget * mouse event. * \***************************************************************************/
void SetStandardInputFields( IN OUT GMSG_INPUT * pmsg, IN UINT cbSize) { ZeroMemory(pmsg, cbSize); pmsg->cbSize = cbSize; pmsg->lTime = GetMessageTime(); pmsg->nModifiers = 0;
//
// todo -- measure perf
//
BYTE bKeys[256]; if (GetKeyboardState(bKeys)) { if (bKeys[VK_LBUTTON] & 0x80) pmsg->nModifiers |= GMODIFIER_LBUTTON; if (bKeys[VK_RBUTTON] & 0x80) pmsg->nModifiers |= GMODIFIER_RBUTTON; if (bKeys[VK_MBUTTON] & 0x80) pmsg->nModifiers |= GMODIFIER_MBUTTON; if (bKeys[VK_LSHIFT] & 0x80) pmsg->nModifiers |= GMODIFIER_LSHIFT; if (bKeys[VK_RSHIFT] & 0x80) pmsg->nModifiers |= GMODIFIER_RSHIFT; if (bKeys[VK_LCONTROL] & 0x80) pmsg->nModifiers |= GMODIFIER_LCONTROL; if (bKeys[VK_RCONTROL] & 0x80) pmsg->nModifiers |= GMODIFIER_RCONTROL; if (bKeys[VK_LMENU] & 0x80) pmsg->nModifiers |= GMODIFIER_LALT; if (bKeys[VK_RMENU] & 0x80) pmsg->nModifiers |= GMODIFIER_RALT; } }
void GdConvertMouseClickMessage( IN OUT GMSG_MOUSECLICK * pmsg, IN UINT nMsg, IN WPARAM wParam) { SetStandardInputFields(pmsg, sizeof(GMSG_MOUSECLICK)); pmsg->nFlags = LOWORD(wParam); pmsg->cClicks = 0;
switch (nMsg) { case WM_LBUTTONDBLCLK: case WM_LBUTTONDOWN: pmsg->bButton = GBUTTON_LEFT; pmsg->nCode = GMOUSE_DOWN; break;
case WM_RBUTTONDBLCLK: case WM_RBUTTONDOWN: pmsg->bButton = GBUTTON_RIGHT; pmsg->nCode = GMOUSE_DOWN; break;
case WM_MBUTTONDBLCLK: case WM_MBUTTONDOWN: pmsg->bButton = GBUTTON_MIDDLE; pmsg->nCode = GMOUSE_DOWN; break;
case WM_LBUTTONUP: pmsg->bButton = GBUTTON_LEFT; pmsg->nCode = GMOUSE_UP; break;
case WM_RBUTTONUP: pmsg->bButton = GBUTTON_RIGHT; pmsg->nCode = GMOUSE_UP; break;
case WM_MBUTTONUP: pmsg->bButton = GBUTTON_MIDDLE; pmsg->nCode = GMOUSE_UP; break;
default: AssertMsg(0, "Unknown message or should needs different convertor"); } }
void GdConvertMouseWheelMessage( IN OUT GMSG_MOUSEWHEEL * pmsg, IN WPARAM wParam) { SetStandardInputFields(pmsg, sizeof(GMSG_MOUSEWHEEL)); pmsg->nCode = GMOUSE_WHEEL; pmsg->bButton = GBUTTON_NONE; pmsg->nFlags = LOWORD(wParam); pmsg->sWheel = GET_WHEEL_DELTA_WPARAM(wParam); }
void GdConvertMouseMessage( IN OUT GMSG_MOUSE * pmsg, UINT nMsg, WPARAM wParam) { SetStandardInputFields(pmsg, sizeof(GMSG_MOUSE)); pmsg->nFlags = LOWORD(wParam); switch (nMsg) { case WM_MOUSEMOVE: pmsg->bButton = GBUTTON_NONE; pmsg->nCode = GMOUSE_MOVE; break;
case WM_MOUSEHOVER: pmsg->bButton = GBUTTON_NONE; pmsg->nCode = GMOUSE_HOVER; break; case WM_MOUSELEAVE: AssertMsg(0, "Must call RootGadget::xdHandleMouseLeaveMessage() directly"); break;
default: AssertMsg(0, "Unknown message or should needs different convertor"); } }
/***************************************************************************\
* * GdConvertKeyboardMessage (Public) * * GdConvertKeyboardMessage converts from an HWND keyboard event into a * Gadget mouse event. * \***************************************************************************/
void GdConvertKeyboardMessage( IN OUT GMSG_KEYBOARD * pmsg, IN UINT nMsg, IN WPARAM wParam, IN LPARAM lParam) { SetStandardInputFields(pmsg, sizeof(GMSG_KEYBOARD)); pmsg->ch = (WCHAR) wParam; pmsg->cRep = LOWORD(lParam); pmsg->wFlags = HIWORD(lParam); switch (nMsg) { case WM_CHAR: pmsg->nCode = GKEY_CHAR; break;
case WM_KEYDOWN: pmsg->nCode = GKEY_DOWN; break;
case WM_KEYUP: pmsg->nCode = GKEY_UP; break;
case WM_SYSCHAR: pmsg->nCode = GKEY_SYSCHAR; break;
case WM_SYSKEYDOWN: pmsg->nCode = GKEY_SYSDOWN; break;
case WM_SYSKEYUP: pmsg->nCode = GKEY_SYSUP; break;
default: AssertMsg(0, "Unknown message or should needs different convertor"); } }
|