ReactOS 0.4.16-dev-320-g3bd9ddc
GridView.cpp
Go to the documentation of this file.
1/*
2* PROJECT: ReactOS Character Map
3* LICENSE: GPL - See COPYING in the top level directory
4* FILE: base/applications/charmap/GridView.cpp
5* PURPOSE: Class for for the window which contains the font matrix
6* COPYRIGHT: Copyright 2015 Ged Murphy <gedmurphy@reactos.org>
7*/
8
9
10#include "precomp.h"
11#include "GridView.h"
12#include "Cell.h"
13
14
15/* DATA *****************************************************/
16
18
19
20/* PUBLIC METHODS **********************************************/
21
23 m_xNumCells(20),
24 m_yNumCells(10),
25 m_ScrollPosition(0),
26 m_NumRows(0)
27{
28 m_szMapWndClass = L"CharGridWClass";
29}
30
32{
33}
34
35bool
37 _In_ HWND hParent
38 )
39{
40 WNDCLASSW wc = { 0 };
41 wc.style = CS_DBLCLKS;
43 wc.cbWndExtra = sizeof(CGridView *);
46 wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
48
49 if (RegisterClassW(&wc))
50 {
53 NULL,
55 0,0,0,0,
56 hParent,
57 NULL,
59 this);
60
61 }
62
63 return !!(m_hwnd != NULL);
64}
65
66bool
68 _In_ CAtlString& FontName
69 )
70{
71
72 // Create a temporary container for the new font
73 CurrentFont NewFont = { 0 };
74 NewFont.FontName = FontName;
75
76 // Get the DC for the full grid window
77 HDC hdc;
78 hdc = GetDC(m_hwnd);
79 if (hdc == NULL) return false;
80
81 // Setup the logfont structure
82 NewFont.Font.lfHeight = 0; // This is set in WM_SIZE
84 StringCchCopyW(NewFont.Font.lfFaceName, LF_FACESIZE, FontName);
85
86 // Get a handle to the new font
87 NewFont.hFont = CreateFontIndirectW(&NewFont.Font);
88 if (NewFont.hFont == NULL)
89 {
91 return false;
92 }
93
94 // Setup an array of all possible non-BMP indices
95 WCHAR ch[MAX_GLYPHS];
96 for (int i = 0; i < MAX_GLYPHS; i++)
97 ch[i] = (WCHAR)i;
98
99 HFONT hOldFont;
100 hOldFont = (HFONT)SelectObject(hdc, NewFont.hFont);
101
102 // Translate all the indices into glyphs
106 ch,
108 out,
111 if (Status == GDI_ERROR)
112 {
113 SelectObject(hdc, hOldFont);
114 return false;
115 }
116
117 // Loop all the glyphs looking for valid ones
118 // and store those in our font data
119 int j = 0;
120 for (int i = 0; i < MAX_GLYPHS; i++)
121 {
122 if (out[i] != 0xffff)
123 {
124 NewFont.ValidGlyphs[j] = ch[i];
125 j++;
126 }
127 }
128 NewFont.NumValidGlyphs = j;
129
130 // Calculate the number of rows required to hold all glyphs
132 if (NewFont.NumValidGlyphs % m_xNumCells)
133 m_NumRows += 1;
134
135 // Set the scrollbar in relation to the rows
137
138 // We're done, update the current font
139 m_CurrentFont = NewFont;
140
141 // We changed the font, we'll need to repaint the whole window
143 NULL,
144 TRUE);
145
146 return true;
147}
148
149
150
151/* PRIVATE METHODS **********************************************/
152
153bool
155 )
156{
157 // Go through all the cells and calculate
158 // their coordinates within the grid
159 for (int y = 0; y < m_yNumCells; y++)
160 for (int x = 0; x < m_xNumCells; x++)
161 {
162 RECT CellCoordinates;
163 CellCoordinates.left = x * m_CellSize.cx;
164 CellCoordinates.top = y * m_CellSize.cy;
165 CellCoordinates.right = (x + 1) * m_CellSize.cx + 1;
166 CellCoordinates.bottom = (y + 1) * m_CellSize.cy + 1;
167
168 m_Cells[y][x]->SetCellCoordinates(CellCoordinates);
169 }
170
171 return true;
172}
173
176 _In_ HWND hwnd,
177 _In_ HWND hParent
178 )
179{
180 m_hwnd = hwnd;
181 m_hParent = hParent;
182
183 // C++ doesn't allow : "CCells ***C = new CCell***[x * y]"
184 // so we have to build the 2d array up manually
185 m_Cells = new CCell**[m_yNumCells]; // rows
186 for (int i = 0; i < m_yNumCells; i++)
187 m_Cells[i] = new CCell*[m_xNumCells]; // columns
188
189 for (int y = 0; y < m_yNumCells; y++)
190 for (int x = 0; x < m_xNumCells; x++)
191 {
192 m_Cells[y][x] = new CCell(m_hwnd);
193 }
194
195 // Give the first cell focus
196 SetCellFocus(m_Cells[0][0]);
197
198 return 0;
199}
200
203 _In_ INT Width,
205 )
206{
207 // Get the client area of the main dialog
208 RECT ParentRect;
209 GetClientRect(m_hParent, &ParentRect);
210
211 // Calculate the grid size using the parent
212 m_ClientCoordinates.left = ParentRect.left + 25;
213 m_ClientCoordinates.top = ParentRect.top + 50;
216
217 // Resize the grid window
219 NULL,
225
226 // Get the client area we can draw on. The position we set above includes
227 // a scrollbar which we obviously can't draw on. GetClientRect gives us
228 // the size without the scroll, and it's more efficient than getting the
229 // scroll metrics and calculating the size from that
230 RECT ClientRect;
231 GetClientRect(m_hwnd, &ClientRect);
232 m_CellSize.cx = ClientRect.right / m_xNumCells;
233 m_CellSize.cy = ClientRect.bottom / m_yNumCells;
234
235 // Let all the cells know about their new coords
237
238 // We scale the font size up or down depending on the cell size
240 {
241 // Delete the existing font
243
244 HDC hdc;
245 hdc = GetDC(m_hwnd);
246 if (hdc)
247 {
248 // Update the font size with respect to the cell size
252 }
253 }
254
255 // Redraw the whole grid
256 InvalidateRect(m_hwnd, &ClientRect, TRUE);
257
258 return 0;
259}
260
261VOID
263 _In_ INT Pos)
264{
265 INT PrevScrollPosition = m_ScrollPosition;
266
267 switch (Value)
268 {
269 case SB_LINEUP:
270 m_ScrollPosition -= 1;
271 break;
272
273 case SB_LINEDOWN:
274 m_ScrollPosition += 1;
275 break;
276
277 case SB_PAGEUP:
279 break;
280
281 case SB_PAGEDOWN:
283 break;
284
285 case SB_THUMBTRACK:
287 break;
288
289 default:
290 break;
291 }
292
293 // Make sure we don't scroll past row 0 or max rows
296
297 // Check if there's a difference from the previous position
298 INT ScrollDiff;
299 ScrollDiff = PrevScrollPosition - m_ScrollPosition;
300 if (ScrollDiff)
301 {
302 // Set the new scrollbar position in the scroll box
304 SB_VERT,
306 TRUE);
307
308 // Check if the scrollbar has moved more than the
309 // number of visible rows (draged or paged)
310 if (abs(ScrollDiff) < m_yNumCells)
311 {
312 RECT rect;
314
315 // Scroll the visible cells which remain within the grid
316 // and invalidate any new ones which appear from the top / bottom
318 0,
319 ScrollDiff * m_CellSize.cy,
320 &rect,
321 &rect,
322 NULL,
323 NULL,
325 }
326 else
327 {
328 // All the cells need to be redrawn
330 NULL,
331 TRUE);
332 }
333 }
334}
335
339 )
340{
341 PAINTSTRUCT PaintStruct = { 0 };
342 HDC LocalHdc = NULL;
344
345 // Check if we were passed a DC
346 if (hdc == NULL)
347 {
348 // We weren't, let's get one
349 LocalHdc = BeginPaint(m_hwnd, &PaintStruct);
350 if (LocalHdc) bSuccess = TRUE;
351 }
352 else
353 {
354 // Use the existing DC and just get the region to paint
356 &PaintStruct.rcPaint,
357 TRUE);
358 if (bSuccess)
359 {
360 // Update the struct with the DC we were passed
361 PaintStruct.hdc = (HDC)hdc;
362 }
363 }
364
365 // Make sure we have a valid DC
366 if (bSuccess)
367 {
368 // Paint the grid and chars
369 DrawGrid(&PaintStruct);
370
371 if (LocalHdc)
372 {
373 EndPaint(m_hwnd, &PaintStruct);
374 }
375 }
376
377 return 0;
378}
379
383 HWND hwnd,
384 UINT uMsg,
387 )
388{
390 LRESULT RetCode = 0;
391
392 // Get the object pointer from window context
394 if (This == NULL)
395 {
396 // Check that this isn't a create message
397 if (uMsg != WM_CREATE)
398 {
399 // Don't handle null info pointer
400 goto HandleDefaultMessage;
401 }
402 }
403
404 switch (uMsg)
405 {
406 case WM_CREATE:
407 {
408 // Get the object pointer from the create param
409 This = (CGridView *)((LPCREATESTRUCT)lParam)->lpCreateParams;
410
411 // Store the pointer in the window's global user data
413
414 This->OnCreate(hwnd, ((LPCREATESTRUCTW)lParam)->hwndParent);
415 break;
416 }
417
418 case WM_SIZE:
419 {
423
424 This->OnSize(Width, Height);
425 break;
426 }
427
428 case WM_VSCROLL:
429 {
430 INT Value, Pos;
432 Pos = HIWORD(wParam);
433
434 This->OnVScroll(Value, Pos);
435 break;
436 }
437
438 case WM_PAINT:
439 {
440 This->OnPaint((HDC)wParam);
441 break;
442 }
443
444 case WM_DESTROY:
445 {
446 This->DeleteCells();
447 break;
448 }
449
450 default:
451 {
452HandleDefaultMessage:
453 RetCode = DefWindowProcW(hwnd, uMsg, wParam, lParam);
454 break;
455 }
456 }
457
458 return RetCode;
459}
460
461
462void
464 _In_ LPPAINTSTRUCT PaintStruct
465 )
466{
467 // Calculate which glyph to start at based on scroll position
468 int i;
470
471 // Make sure we have the correct font on the DC
472 HFONT hOldFont;
473 hOldFont = (HFONT)SelectFont(PaintStruct->hdc,
475
476 // Traverse all the cells
477 for (int y = 0; y < m_yNumCells; y++)
478 for (int x = 0; x < m_xNumCells; x++)
479 {
480 // Update the glyph for this cell
482 m_Cells[y][x]->SetChar(ch);
483
484 // Tell it to paint itself
485 m_Cells[y][x]->OnPaint(*PaintStruct);
486 i++;
487 }
488
489 SelectObject(PaintStruct->hdc, hOldFont);
490
491}
492
493void
495{
496 if (m_Cells == nullptr)
497 return;
498
499 // Free cells withing the 2d array
500 for (int i = 0; i < m_yNumCells; i++)
501 delete[] m_Cells[i];
502 delete[] m_Cells;
503
504 m_Cells = nullptr;
505}
506
507void
509 _In_ CCell* NewActiveCell
510 )
511{
512 if (m_ActiveCell)
513 {
514 // Remove focus from any existing cell
515 m_ActiveCell->SetFocus(false);
517 }
518
519 // Set the new active cell and give it focus
520 m_ActiveCell = NewActiveCell;
521 m_ActiveCell->SetFocus(true);
522}
HINSTANCE g_hInstance
Definition: MainWindow.cpp:18
#define MAX_GLYPHS
Definition: GridView.h:4
Definition: Cell.h:3
bool OnPaint(_In_ PAINTSTRUCT &PaintStruct)
Definition: Cell.cpp:43
LPRECT GetCellCoordinates()
Definition: Cell.h:24
void SetCellCoordinates(_In_ RECT &Coordinates)
Definition: Cell.cpp:89
void SetFocus(_In_ bool HasFocus)
Definition: Cell.h:25
void SetChar(_In_ WCHAR ch)
Definition: Cell.h:27
void DrawGrid(_In_ LPPAINTSTRUCT PaintStruct)
Definition: GridView.cpp:463
LRESULT OnPaint(_In_opt_ HDC hdc)
Definition: GridView.cpp:337
CCell * m_ActiveCell
Definition: GridView.h:30
CurrentFont m_CurrentFont
Definition: GridView.h:35
CAtlStringW m_szMapWndClass
Definition: GridView.h:19
int m_yNumCells
Definition: GridView.h:25
HWND m_hwnd
Definition: GridView.h:21
INT m_ScrollPosition
Definition: GridView.h:32
RECT m_ClientCoordinates
Definition: GridView.h:27
int m_NumRows
Definition: GridView.h:33
LRESULT OnCreate(_In_ HWND hwnd, _In_ HWND hParent)
Definition: GridView.cpp:175
CCell *** m_Cells
Definition: GridView.h:29
HWND m_hParent
Definition: GridView.h:22
SIZE m_CellSize
Definition: GridView.h:28
~CGridView()
Definition: GridView.cpp:31
static LRESULT CALLBACK MapWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: GridView.cpp:382
void DeleteCells()
Definition: GridView.cpp:494
VOID OnVScroll(_In_ INT Value, _In_ INT Pos)
Definition: GridView.cpp:262
void SetCellFocus(_In_ CCell *NewActiveCell)
Definition: GridView.cpp:508
LRESULT OnSize(_In_ INT Width, _In_ INT Height)
Definition: GridView.cpp:202
bool SetFont(_In_ CAtlString &FontName)
Definition: GridView.cpp:67
bool UpdateCellCoordinates()
Definition: GridView.cpp:154
int m_xNumCells
Definition: GridView.h:24
bool Create(_In_ HWND hParent)
Definition: GridView.cpp:36
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
static HWND hwndParent
Definition: cryptui.c:300
ush Pos
Definition: deflate.h:92
#define LF_FACESIZE
Definition: dimm.idl:39
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define CALLBACK
Definition: compat.h:35
static BOOLEAN bSuccess
Definition: drive.cpp:355
#define abs(i)
Definition: fconv.c:206
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned short WORD
Definition: ntddk_ex.h:93
pKey DeleteObject()
Status
Definition: gdiplustypes.h:25
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
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
HDC hdc
Definition: main.c:9
static HDC
Definition: imagelist.c:88
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
#define min(a, b)
Definition: monoChain.cc:55
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
unsigned int UINT
Definition: ndis.h:50
#define _In_
Definition: no_sal2.h:158
#define _In_opt_
Definition: no_sal2.h:212
#define L(x)
Definition: ntvdm.h:50
#define LOWORD(l)
Definition: pedump.c:82
#define WS_CHILD
Definition: pedump.c:617
#define WS_TABSTOP
Definition: pedump.c:634
#define WS_VSCROLL
Definition: pedump.c:627
#define WS_VISIBLE
Definition: pedump.c:620
static FILE * out
Definition: regtests2xml.c:44
& rect
Definition: startmenu.cpp:1413
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:149
HFONT hFont
Definition: GridView.h:10
USHORT ValidGlyphs[MAX_GLYPHS]
Definition: GridView.h:11
LOGFONTW Font
Definition: GridView.h:9
CAtlStringW FontName
Definition: GridView.h:8
USHORT NumValidGlyphs
Definition: GridView.h:12
LONG lfHeight
Definition: dimm.idl:59
WCHAR lfFaceName[LF_FACESIZE]
Definition: dimm.idl:72
BYTE lfCharSet
Definition: dimm.idl:67
LONG cx
Definition: kdterminal.h:27
LONG cy
Definition: kdterminal.h:28
LPCWSTR lpszClassName
Definition: winuser.h:3188
HBRUSH hbrBackground
Definition: winuser.h:3186
HINSTANCE hInstance
Definition: winuser.h:3183
UINT style
Definition: winuser.h:3179
WNDPROC lpfnWndProc
Definition: winuser.h:3180
int cbWndExtra
Definition: winuser.h:3182
HCURSOR hCursor
Definition: winuser.h:3185
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
#define max(a, b)
Definition: svc.c:63
#define GetWindowLongPtr
Definition: treelist.c:73
#define SetWindowLongPtr
Definition: treelist.c:70
#define GWLP_USERDATA
Definition: treelist.c:63
int32_t INT
Definition: typedefs.h:58
#define HIWORD(l)
Definition: typedefs.h:247
_In_ HFONT _Out_ PUINT _Out_ PUINT Width
Definition: font.h:89
_In_ HFONT _Out_ PUINT Height
Definition: font.h:88
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
Definition: wdfregistry.h:413
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
LONG_PTR LPARAM
Definition: windef.h:208
LONG_PTR LRESULT
Definition: windef.h:209
UINT_PTR WPARAM
Definition: windef.h:207
#define SelectFont(hdc, hfont)
Definition: windowsx.h:516
DWORD WINAPI GetGlyphIndicesW(_In_ HDC hdc, _In_reads_(c) LPCWSTR lpstr, _In_ int c, _Out_writes_(c) LPWORD pgi, _In_ DWORD fl)
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1546
#define DEFAULT_CHARSET
Definition: wingdi.h:384
#define GDI_ERROR
Definition: wingdi.h:1309
HFONT WINAPI CreateFontIndirectW(_In_ const LOGFONTW *)
#define GGI_MARK_NONEXISTING_GLYPHS
Definition: wingdi.h:1085
#define WM_PAINT
Definition: winuser.h:1623
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
#define SB_THUMBTRACK
Definition: winuser.h:573
#define SB_LINEUP
Definition: winuser.h:564
#define COLOR_WINDOW
Definition: winuser.h:921
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define WM_VSCROLL
Definition: winuser.h:1747
#define WM_CREATE
Definition: winuser.h:1611
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
#define WM_SIZE
Definition: winuser.h:1614
#define SB_VERT
Definition: winuser.h:553
#define SW_INVALIDATE
Definition: winuser.h:2582
ATOM WINAPI RegisterClassW(_In_ CONST WNDCLASSW *)
#define IDC_ARROW
Definition: winuser.h:687
#define CS_DBLCLKS
Definition: winuser.h:651
HCURSOR WINAPI LoadCursorW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2157
int WINAPI SetScrollPos(_In_ HWND, _In_ int, _In_ int, _In_ BOOL)
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
BOOL WINAPI SetScrollRange(_In_ HWND, _In_ int, _In_ int, _In_ int, _In_ BOOL)
HWND WINAPI CreateWindowExW(_In_ DWORD dwExStyle, _In_opt_ LPCWSTR lpClassName, _In_opt_ LPCWSTR lpWindowName, _In_ DWORD dwStyle, _In_ int X, _In_ int Y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam)
BOOL WINAPI EndPaint(_In_ HWND, _In_ const PAINTSTRUCT *)
#define SB_PAGEDOWN
Definition: winuser.h:569
#define SWP_SHOWWINDOW
Definition: winuser.h:1251
HDC WINAPI GetDC(_In_opt_ HWND)
#define SB_LINEDOWN
Definition: winuser.h:565
#define WM_DESTROY
Definition: winuser.h:1612
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
#define SWP_NOZORDER
Definition: winuser.h:1250
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)
BOOL WINAPI GetUpdateRect(_In_ HWND, _Out_opt_ LPRECT, _In_ BOOL)
int WINAPI ScrollWindowEx(_In_ HWND, _In_ int, _In_ int, _In_opt_ LPCRECT, _In_opt_ LPCRECT, _In_opt_ HRGN, _Out_opt_ LPRECT, _In_ UINT)
#define SB_PAGEUP
Definition: winuser.h:568
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184