-
-
Notifications
You must be signed in to change notification settings - Fork 62
/
Copy pathInputHook.cpp
49 lines (43 loc) · 1.45 KB
/
InputHook.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include "stdafx.h"
#include "InputHook.h"
using namespace ImGui;
WNDPROC oWndProc;
void InputHook::Init(HWND hWindow)
{
oWndProc = (WNDPROC)SetWindowLongPtr(hWindow, GWLP_WNDPROC, (__int3264)(LONG_PTR)WndProc);
}
void InputHook::Remove(HWND hWindow)
{
SetWindowLongPtr(hWindow, GWLP_WNDPROC, (LONG_PTR)oWndProc);
}
LRESULT APIENTRY WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_LBUTTONDOWN:
GetIO().MouseDown[0] = true; return DefWindowProc(hwnd, uMsg, wParam, lParam);
break;
case WM_LBUTTONUP:
GetIO().MouseDown[0] = false; return DefWindowProc(hwnd, uMsg, wParam, lParam);
break;
case WM_RBUTTONDOWN:
GetIO().MouseDown[1] = true; return DefWindowProc(hwnd, uMsg, wParam, lParam);
break;
case WM_RBUTTONUP:
GetIO().MouseDown[1] = false; return DefWindowProc(hwnd, uMsg, wParam, lParam);
break;
case WM_MBUTTONDOWN:
GetIO().MouseDown[2] = true; return DefWindowProc(hwnd, uMsg, wParam, lParam);
break;
case WM_MBUTTONUP:
GetIO().MouseDown[2] = false; return DefWindowProc(hwnd, uMsg, wParam, lParam);
break;
case WM_MOUSEWHEEL:
GetIO().MouseWheel += GET_WHEEL_DELTA_WPARAM(wParam) > 0 ? +1.0f : -1.0f; return DefWindowProc(hwnd, uMsg, wParam, lParam);
break;
case WM_MOUSEMOVE:
GetIO().MousePos.x = (signed short)(lParam); GetIO().MousePos.y = (signed short)(lParam >> 16); return DefWindowProc(hwnd, uMsg, wParam, lParam);
break;
}
return CallWindowProc(oWndProc, hwnd, uMsg, wParam, lParam);
}