ReactOS 0.4.16-dev-2104-gb84fa49
graphctl.c
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS Task Manager
3 * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
4 * PURPOSE: Graph Plotting controls.
5 * COPYRIGHT: Copyright 2002 Robert Dickenson <robd@reactos.org>
6 * Copyright 2021 Wu Haotian <rigoligo03@gmail.com>
7 * Copyright 2021 Valerij Zaporogeci <vlrzprgts@gmail.com>
8 */
9
10#include "precomp.h"
11
12#include <math.h>
13
15
16BOOL
18{
19 HDC hdc, hdcg;
20 HBITMAP hbmOld;
21 UINT Size;
22 INT p;
23 RECT rc;
24
25 inst->hParentWnd = hParentWnd;
26 inst->hWnd = hWnd;
27
29 inst->BitmapWidth = Size;
32 if (!inst->PointBuffer)
33 {
34 goto fail;
35 }
36
37 inst->NumberOfPoints = Size;
38 inst->CurrIndex = 0;
39
40 /* Styling */
41 inst->hPenGrid = CreatePen(PS_SOLID, 0, fmt->clrGrid);
42 inst->hPen0 = CreatePen(PS_SOLID, 0, fmt->clrPlot0);
43 inst->hPen1 = CreatePen(PS_SOLID, 0, fmt->clrPlot1);
44 inst->hBrushBack = CreateSolidBrush(fmt->clrBack);
45
46 if (!inst->hPenGrid ||
47 !inst->hPen0 ||
48 !inst->hPen1 ||
49 !inst->hBrushBack)
50 {
51 goto fail;
52 }
53
54 if (fmt->GridCellWidth >= PLOT_SHIFT << 2)
55 inst->GridCellWidth = fmt->GridCellWidth;
56 else
57 inst->GridCellWidth = PLOT_SHIFT << 2;
58 if (fmt->GridCellHeight >= PLOT_SHIFT << 2)
59 inst->GridCellHeight = fmt->GridCellHeight;
60 else
61 inst->GridCellHeight = PLOT_SHIFT << 2;
62
63 inst->DrawSecondaryPlot = fmt->DrawSecondaryPlot;
64
65 GetClientRect(hWnd, &rc);
66 inst->BitmapHeight = rc.bottom;
67 inst->ftPixelsPerPercent = (FLOAT)(inst->BitmapHeight) / 100.00f;
68
69 hdc = GetDC(hParentWnd);
70 if (!hdc)
71 goto fail;
72
73 inst->hdcGraph = hdcg = CreateCompatibleDC(hdc);
75 ReleaseDC(hParentWnd, hdc);
76 if (!hdcg || !inst->hbmGraph)
77 goto fail;
78
79 hbmOld = (HBITMAP)SelectObject(hdcg, inst->hbmGraph);
80 DeleteObject(hbmOld);
81
82 SetBkColor(hdcg, fmt->clrBack);
83 rc.right = inst->BitmapWidth;
84 FillRect(hdcg, &rc, inst->hBrushBack);
85
86 inst->CurrShift = 0;
87 SelectObject(hdcg, inst->hPenGrid);
88 for (p = inst->GridCellHeight - 1;
89 p < inst->BitmapHeight;
90 p += inst->GridCellHeight)
91 {
92 MoveToEx(hdcg, 0, p, NULL);
93 LineTo(hdcg, inst->BitmapWidth, p);
94 }
95 for (p = inst->BitmapWidth - 1;
96 p > 0;
97 p -= inst->GridCellWidth)
98 {
99 MoveToEx(hdcg, p, 0, NULL);
100 LineTo(hdcg, p, inst->BitmapHeight);
101 }
102 SelectObject(hdcg, inst->hPen0);
103
104 return TRUE;
105
106fail:
107 GraphCtrl_Dispose(inst);
108 return FALSE;
109}
110
111void
113{
114 if (inst->PointBuffer)
116
117 if (inst->hdcGraph)
118 DeleteDC(inst->hdcGraph);
119
120 if (inst->hPenGrid)
121 DeleteObject(inst->hPenGrid);
122
123 if (inst->hPen0)
124 DeleteObject(inst->hPen0);
125
126 if (inst->hPen1)
127 DeleteObject(inst->hPen1);
128
129 if (inst->hBrushBack)
131
132 if (inst->hbmGraph)
133 DeleteObject(inst->hbmGraph);
134}
135
136void
138{
139 HDC hdcg;
140 PBYTE t;
141 RECT rcDirt;
142
143 UINT Prev0, Prev1, RetainingWidth;
144 INT PrevY, CurrY, p, v;
145
146 hdcg = inst->hdcGraph;
147 RetainingWidth = inst->BitmapWidth - PLOT_SHIFT;
148 t = inst->PointBuffer;
149 Prev0 = *(t + inst->CurrIndex);
150 Prev1 = *(t + inst->CurrIndex + inst->NumberOfPoints);
151 if (inst->CurrIndex < inst->NumberOfPoints - 1)
152 {
153 inst->CurrIndex++;
154 }
155 else
156 {
157 inst->CurrIndex = 0;
158 }
159 *(t + inst->CurrIndex) = val0;
160 *(t + inst->CurrIndex + inst->NumberOfPoints) = val1;
161
162 /* Drawing points, first shifting the plot left */
163 BitBlt(hdcg, 0, 0, RetainingWidth, inst->BitmapHeight, hdcg, PLOT_SHIFT, 0, SRCCOPY);
164
165 rcDirt.left = RetainingWidth;
166 rcDirt.top = 0;
167 rcDirt.right = inst->BitmapWidth;
168 rcDirt.bottom = inst->BitmapHeight;
169 FillRect(hdcg, &rcDirt, inst->hBrushBack);
170
171 SelectObject(hdcg, inst->hPenGrid);
172 for (p = inst->GridCellHeight - 1;
173 p < inst->BitmapHeight;
174 p += inst->GridCellHeight)
175 {
176 MoveToEx(hdcg, RetainingWidth, p, NULL);
177 LineTo(hdcg, inst->BitmapWidth, p);
178 }
179 v = inst->CurrShift + PLOT_SHIFT;
180 if (v >= inst->GridCellWidth)
181 {
182 v -= inst->GridCellWidth;
183 p = inst->BitmapWidth - v - 1;
184 MoveToEx(hdcg, p, 0, NULL);
185 LineTo(hdcg, p, inst->BitmapHeight);
186 }
187 inst->CurrShift = v;
188
189 if (inst->DrawSecondaryPlot)
190 {
191 SelectObject(inst->hdcGraph, inst->hPen1);
192
193 PrevY = inst->BitmapHeight - Prev1 * inst->ftPixelsPerPercent;
194 MoveToEx(inst->hdcGraph, RetainingWidth - 1, PrevY, NULL);
195 CurrY = inst->BitmapHeight - val1 * inst->ftPixelsPerPercent;
196 LineTo(inst->hdcGraph, inst->BitmapWidth - 1, CurrY);
197 }
198
199 SelectObject(inst->hdcGraph, inst->hPen0);
200 PrevY = inst->BitmapHeight - Prev0 * inst->ftPixelsPerPercent;
201 MoveToEx(inst->hdcGraph, RetainingWidth - 1, PrevY, NULL);
202 CurrY = inst->BitmapHeight - val0 * inst->ftPixelsPerPercent;
203 LineTo(inst->hdcGraph, inst->BitmapWidth - 1, CurrY);
204}
205
206inline void
208{
209 HDC hdcg;
210 PBYTE t;
211 RECT rc;
212 INT i, j, y, x, p;
213 FLOAT coef;
214
215 hdcg = inst->hdcGraph;
216 rc.left = 0; rc.top = 0;
217 rc.right = inst->BitmapWidth; rc.bottom = h;
218 FillRect(hdcg, &rc, inst->hBrushBack);
219
220 SelectObject(hdcg, inst->hPenGrid);
221
222 for (p = inst->GridCellHeight - 1;
223 p < inst->BitmapHeight;
224 p += inst->GridCellHeight)
225 {
226 MoveToEx(hdcg, 0, p, NULL);
227 LineTo(hdcg, inst->BitmapWidth, p);
228 }
229
230 for (p = inst->BitmapWidth - inst->CurrShift - 1;
231 p > 0;
232 p -= inst->GridCellWidth)
233 {
234 MoveToEx(hdcg, p, 0, NULL);
235 LineTo(hdcg, p, inst->BitmapHeight);
236 }
237
238 coef = inst->ftPixelsPerPercent;
239
240 if (inst->DrawSecondaryPlot)
241 {
242 SelectObject(hdcg, inst->hPen1);
243 t = inst->PointBuffer + inst->NumberOfPoints;
244 x = inst->BitmapWidth - 1;
245 j = inst->CurrIndex;
246 y = h - *(t + j) * coef;
247 MoveToEx(hdcg, x, y, NULL);
248 for (i = 0; i < inst->NumberOfPoints; i++)
249 {
250 j = (j ? j : inst->NumberOfPoints) - 1;
251 y = h - *(t + j) * coef;
252 x -= PLOT_SHIFT;
253 LineTo(hdcg, x, y);
254 }
255 }
256
257 SelectObject(hdcg, inst->hPen0);
258 t = inst->PointBuffer;
259 x = inst->BitmapWidth - 1;
260 j = inst->CurrIndex;
261 y = h - *(t + j) * coef;
262 MoveToEx(hdcg, x, y, NULL);
263
264 for (i = 0; i < inst->NumberOfPoints; i++)
265 {
266 j = (j ? j : inst->NumberOfPoints) - 1;
267 y = h - *(t + j) * coef;
268 x -= PLOT_SHIFT;
269 LineTo(hdcg, x, y);
270 }
271}
272
273inline void
275{
276 HDC hdc;
277 HBITMAP hbmOld;
278
279 inst->BitmapHeight = nh;
280 inst->ftPixelsPerPercent = (FLOAT)nh / 100.00f;
281
282 hdc = GetDC(inst->hParentWnd);
283 hbmOld = inst->hbmGraph;
285 SelectObject(inst->hdcGraph, inst->hbmGraph);
286 DeleteObject(hbmOld);
287 ReleaseDC(inst->hParentWnd, hdc);
288
289 GraphCtrl_RedrawBitmap(inst, nh);
290}
291
296
299{
300 PTM_GRAPH_CONTROL graph;
301
302 switch (message)
303 {
304 case WM_ERASEBKGND:
305 return TRUE;
306 /*
307 * Filter out mouse & keyboard messages
308 */
309 // case WM_APPCOMMAND:
311 case WM_LBUTTONDBLCLK:
312 case WM_LBUTTONDOWN:
313 case WM_LBUTTONUP:
314 case WM_MBUTTONDBLCLK:
315 case WM_MBUTTONDOWN:
316 case WM_MBUTTONUP:
317 case WM_MOUSEACTIVATE:
318 case WM_MOUSEHOVER:
319 case WM_MOUSELEAVE:
320 case WM_MOUSEMOVE:
321 // case WM_MOUSEWHEEL:
322 case WM_NCHITTEST:
324 case WM_NCLBUTTONDOWN:
325 case WM_NCLBUTTONUP:
327 case WM_NCMBUTTONDOWN:
328 case WM_NCMBUTTONUP:
329 // case WM_NCMOUSEHOVER:
330 // case WM_NCMOUSELEAVE:
331 case WM_NCMOUSEMOVE:
333 case WM_NCRBUTTONDOWN:
334 case WM_NCRBUTTONUP:
335 // case WM_NCXBUTTONDBLCLK:
336 // case WM_NCXBUTTONDOWN:
337 // case WM_NCXBUTTONUP:
338 case WM_RBUTTONDBLCLK:
339 case WM_RBUTTONDOWN:
340 case WM_RBUTTONUP:
341 // case WM_XBUTTONDBLCLK:
342 // case WM_XBUTTONDOWN:
343 // case WM_XBUTTONUP:
344 case WM_ACTIVATE:
345 case WM_CHAR:
346 case WM_DEADCHAR:
347 case WM_GETHOTKEY:
348 case WM_HOTKEY:
349 case WM_KEYDOWN:
350 case WM_KEYUP:
351 case WM_KILLFOCUS:
352 case WM_SETFOCUS:
353 case WM_SETHOTKEY:
354 case WM_SYSCHAR:
355 case WM_SYSDEADCHAR:
356 case WM_SYSKEYDOWN:
357 case WM_SYSKEYUP:
358 return 0;
359
360 case WM_NCCALCSIZE:
361 return 0;
362
363 case WM_SIZE:
364 {
369 else
370 return 0;
371
372 if (HIWORD(lParam) != graph->BitmapHeight)
373 {
375 }
377
378 return 0;
379 }
380
381 case WM_PAINT:
382 {
383 RECT rcClient;
384 HDC hdc;
385 PAINTSTRUCT ps;
386
391 else
392 return 0;
393
394 hdc = BeginPaint(hWnd, &ps);
395 GetClientRect(hWnd, &rcClient);
396 BitBlt(hdc, 0, 0,
397 rcClient.right,
398 rcClient.bottom,
399 graph->hdcGraph,
400 graph->BitmapWidth - rcClient.right,
401 0,
402 SRCCOPY);
403 EndPaint(hWnd, &ps);
404 return 0;
405 }
406 }
407
408 /*
409 * We pass on all non-handled messages
410 */
412}
HWND hWnd
Definition: settings.c:17
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
#define CALLBACK
Definition: compat.h:35
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
static VOID BitBlt(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Width, _In_ ULONG Height, _In_reads_bytes_(Delta *Height) PUCHAR Buffer, _In_ ULONG BitsPerPixel, _In_ ULONG Delta)
Definition: common.c:42
unsigned int BOOL
Definition: ntddk_ex.h:94
pKey DeleteObject()
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
const GLdouble * v
Definition: gl.h:2040
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
GLdouble GLdouble t
Definition: gl.h:2047
GLfloat GLfloat p
Definition: glext.h:8902
GLfloat GLfloat GLfloat GLfloat h
Definition: glext.h:7723
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
HWND hPerformancePageMemUsageHistoryGraph
Definition: perfpage.c:18
HWND hPerformancePageCpuUsageHistoryGraph
Definition: perfpage.c:17
WNDPROC OldGraphCtrlWndProc
Definition: graphctl.c:14
TM_GRAPH_CONTROL PerformancePageMemUsageHistoryGraph
Definition: perfpage.c:12
void GraphCtrl_AddPoint(PTM_GRAPH_CONTROL inst, BYTE val0, BYTE val1)
Definition: graphctl.c:137
BOOL GraphCtrl_Create(PTM_GRAPH_CONTROL inst, HWND hWnd, HWND hParentWnd, PTM_FORMAT fmt)
Definition: graphctl.c:17
TM_GRAPH_CONTROL PerformancePageCpuUsageHistoryGraph
Definition: perfpage.c:11
void GraphCtrl_RedrawBitmap(PTM_GRAPH_CONTROL inst, INT h)
Definition: graphctl.c:207
void GraphCtrl_Dispose(PTM_GRAPH_CONTROL inst)
Definition: graphctl.c:112
INT_PTR CALLBACK GraphCtrl_WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
Definition: graphctl.c:298
void GraphCtrl_RedrawOnHeightChange(PTM_GRAPH_CONTROL inst, INT nh)
Definition: graphctl.c:274
#define NUM_PLOTS
Definition: graphctl.h:12
#define PLOT_SHIFT
Definition: graphctl.h:13
#define FLOAT
Definition: i386-dis.c:525
LONG_PTR LPARAM
Definition: minwindef.h:175
UINT_PTR WPARAM
Definition: minwindef.h:174
HDC hdc
Definition: main.c:9
static HBITMAP
Definition: button.c:44
static HDC
Definition: imagelist.c:88
unsigned int UINT
Definition: ndis.h:50
BYTE * PBYTE
Definition: pedump.c:66
#define WM_MOUSELEAVE
Definition: commctrl.h:4992
#define WM_MOUSEHOVER
Definition: commctrl.h:4991
FLOAT ftPixelsPerPercent
Definition: graphctl.h:40
UINT32 CurrIndex
Definition: graphctl.h:38
BOOL DrawSecondaryPlot
Definition: graphctl.h:41
PBYTE PointBuffer
Definition: graphctl.h:36
HBRUSH hBrushBack
Definition: graphctl.h:28
HBITMAP hbmGraph
Definition: graphctl.h:24
UINT32 NumberOfPoints
Definition: graphctl.h:37
Definition: dsound.c:943
Definition: tftpd.h:60
Definition: windef.h:99
LONG right
Definition: windef.h:102
LONG bottom
Definition: windef.h:103
LONG top
Definition: windef.h:101
LONG left
Definition: windef.h:100
int32_t INT_PTR
Definition: typedefs.h:64
float FLOAT
Definition: typedefs.h:69
int32_t INT
Definition: typedefs.h:58
#define HIWORD(l)
Definition: typedefs.h:247
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4539
COLORREF WINAPI SetBkColor(_In_ HDC, _In_ COLORREF)
Definition: dc.c:999
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1546
BOOL WINAPI MoveToEx(_In_ HDC, _In_ int, _In_ int, _Out_opt_ LPPOINT)
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
#define SRCCOPY
Definition: wingdi.h:333
HBITMAP WINAPI CreateCompatibleBitmap(_In_ HDC hdc, _In_ INT cx, _In_ INT cy)
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)
HBRUSH WINAPI CreateSolidBrush(_In_ COLORREF)
BOOL WINAPI DeleteDC(_In_ HDC)
HPEN WINAPI CreatePen(_In_ int, _In_ int, _In_ COLORREF)
BOOL WINAPI LineTo(_In_ HDC, _In_ int, _In_ int)
#define PS_SOLID
Definition: wingdi.h:586
#define WM_PAINT
Definition: winuser.h:1648
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
#define WM_ERASEBKGND
Definition: winuser.h:1653
#define WM_GETHOTKEY
Definition: winuser.h:1681
#define WM_KEYUP
Definition: winuser.h:1744
#define WM_SETHOTKEY
Definition: winuser.h:1680
#define WM_CAPTURECHANGED
Definition: winuser.h:1836
#define WM_SIZE
Definition: winuser.h:1639
#define WM_LBUTTONDBLCLK
Definition: winuser.h:1806
#define WM_NCHITTEST
Definition: winuser.h:1714
#define WM_RBUTTONUP
Definition: winuser.h:1808
#define WM_NCRBUTTONDBLCLK
Definition: winuser.h:1725
#define WM_RBUTTONDBLCLK
Definition: winuser.h:1809
#define WM_SETFOCUS
Definition: winuser.h:1641
#define WM_MOUSEMOVE
Definition: winuser.h:1803
#define WM_NCMBUTTONUP
Definition: winuser.h:1727
#define WM_LBUTTONDOWN
Definition: winuser.h:1804
#define WM_NCLBUTTONDBLCLK
Definition: winuser.h:1722
#define WM_ACTIVATE
Definition: winuser.h:1640
#define WM_RBUTTONDOWN
Definition: winuser.h:1807
#define WM_NCMOUSEMOVE
Definition: winuser.h:1719
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define WM_SYSCHAR
Definition: winuser.h:1749
#define WM_SYSDEADCHAR
Definition: winuser.h:1750
#define WM_NCMBUTTONDOWN
Definition: winuser.h:1726
BOOL WINAPI EndPaint(_In_ HWND, _In_ const PAINTSTRUCT *)
#define WM_MBUTTONDBLCLK
Definition: winuser.h:1812
#define WM_SYSKEYUP
Definition: winuser.h:1748
HDC WINAPI GetDC(_In_opt_ HWND)
#define WM_MOUSEACTIVATE
Definition: winuser.h:1665
#define WM_LBUTTONUP
Definition: winuser.h:1805
#define WM_CHAR
Definition: winuser.h:1745
#define WM_NCLBUTTONUP
Definition: winuser.h:1721
#define WM_HOTKEY
Definition: winuser.h:1907
#define WM_NCRBUTTONUP
Definition: winuser.h:1724
#define SM_CXSCREEN
Definition: winuser.h:970
#define WM_KEYDOWN
Definition: winuser.h:1743
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
Definition: winuser.h:3008
#define WM_NCMBUTTONDBLCLK
Definition: winuser.h:1728
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)
LRESULT WINAPI CallWindowProcW(_In_ WNDPROC, _In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define WM_NCCALCSIZE
Definition: winuser.h:1713
#define WM_MBUTTONUP
Definition: winuser.h:1811
#define WM_DEADCHAR
Definition: winuser.h:1746
#define WM_KILLFOCUS
Definition: winuser.h:1642
int WINAPI GetSystemMetrics(_In_ int)
#define WM_SYSKEYDOWN
Definition: winuser.h:1747
#define WM_NCLBUTTONDOWN
Definition: winuser.h:1720
#define WM_MBUTTONDOWN
Definition: winuser.h:1810
#define WM_NCRBUTTONDOWN
Definition: winuser.h:1723
unsigned char BYTE
Definition: xxhash.c:193