ReactOS 0.4.16-dev-847-g386fccd
ipaddress.c
Go to the documentation of this file.
1/*
2 * IP Address control
3 *
4 * Copyright 2002 Dimitrie O. Paun
5 * Copyright 1999 Chris Morgan<cmorgan@wpi.edu>
6 * Copyright 1999 James Abbatiello<abbeyj@wpi.edu>
7 * Copyright 1998, 1999 Eric Kohl
8 * Copyright 1998 Alex Priem <alexp@sci.kun.nl>
9 *
10 * This library is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU Lesser General Public
12 * License as published by the Free Software Foundation; either
13 * version 2.1 of the License, or (at your option) any later version.
14 *
15 * This library is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 * Lesser General Public License for more details.
19 *
20 * You should have received a copy of the GNU Lesser General Public
21 * License along with this library; if not, write to the Free Software
22 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
23 */
24
25#include <ctype.h>
26#include <stdlib.h>
27#include <stdarg.h>
28#include <stdio.h>
29#include <string.h>
30
31#include "windef.h"
32#include "winbase.h"
33#include "wingdi.h"
34#include "winuser.h"
35#include "winnls.h"
36#include "commctrl.h"
37#include "comctl32.h"
38#include "uxtheme.h"
39#include "vsstyle.h"
40#include "vssym32.h"
41#include "wine/debug.h"
42#include "wine/heap.h"
43
45
46typedef struct
47{
53
54typedef struct
55{
59 IPPART_INFO Part[4];
61
62static const WCHAR IP_SUBCLASS_PROP[] =
63 { 'C', 'C', 'I', 'P', '3', '2', 'S', 'u', 'b', 'c', 'l', 'a', 's', 's', 'I', 'n', 'f', 'o', 0 };
64
65#define POS_DEFAULT 0
66#define POS_LEFT 1
67#define POS_RIGHT 2
68#define POS_SELALL 3
69
70static LRESULT CALLBACK
72
73static void IPADDRESS_UpdateText (const IPADDRESS_INFO *infoPtr)
74{
75 static const WCHAR zero[] = {'0', 0};
76 static const WCHAR dot[] = {'.', 0};
77 WCHAR field[4];
78 WCHAR ip[16];
79 INT i;
80
81 ip[0] = 0;
82
83 for (i = 0; i < 4; i++) {
84 if (GetWindowTextW (infoPtr->Part[i].EditHwnd, field, 4))
86 else
87 /* empty edit treated as zero */
89 if (i != 3)
90 lstrcatW(ip, dot);
91 }
92
93 SetWindowTextW(infoPtr->Self, ip);
94}
95
97{
98 HWND hwnd = infoPtr->Self;
99
100 TRACE("(command=%x)\n", command);
101
102 return SendMessageW (infoPtr->Notify, WM_COMMAND,
104}
105
107{
108 NMIPADDRESS nmip;
109
110 TRACE("(field=%x, value=%d)\n", field, value);
111
112 nmip.hdr.hwndFrom = infoPtr->Self;
113 nmip.hdr.idFrom = GetWindowLongPtrW (infoPtr->Self, GWLP_ID);
115
116 nmip.iField = field;
117 nmip.iValue = value;
118
119 SendMessageW (infoPtr->Notify, WM_NOTIFY, nmip.hdr.idFrom, (LPARAM)&nmip);
120
121 TRACE("<-- %d\n", nmip.iValue);
122
123 return nmip.iValue;
124}
125
126
128{
129 int i;
130
131 TRACE("(hwnd=%p)\n", hwnd);
132
133 for (i = 0; i < 4; i++)
134 if (infoPtr->Part[i].EditHwnd == hwnd) return i;
135
136 ERR("We subclassed the wrong window! (hwnd=%p)\n", hwnd);
137 return -1;
138}
139
140
142{
143 static const WCHAR dotW[] = { '.', 0 };
144 RECT rect, rcPart;
145 COLORREF bgCol, fgCol;
146 HTHEME theme;
147 int i, state = ETS_NORMAL;
148
149 TRACE("\n");
150
151 GetClientRect (infoPtr->Self, &rect);
152
153 theme = OpenThemeData(infoPtr->Self, WC_EDITW);
154
155 if (theme) {
156 DWORD dwStyle = GetWindowLongW (infoPtr->Self, GWL_STYLE);
157
158 if (!infoPtr->Enabled)
160 else if (dwStyle & ES_READONLY)
162 else if (GetFocus() == infoPtr->Self)
164
167
171 } else {
172 if (infoPtr->Enabled) {
175 } else {
178 }
179
180#ifdef __REACTOS__
181 {
182 HBRUSH brush = CreateSolidBrush(bgCol);
183 FillRect(hdc, &rect, brush);
184 DeleteObject(brush);
185 }
186#else
187 FillRect (hdc, &rect, (HBRUSH)(DWORD_PTR)(bgCol+1));
188#endif
190 }
191
192 SetBkColor (hdc, bgCol);
193 SetTextColor(hdc, fgCol);
194
195 for (i = 0; i < 3; i++) {
196 GetWindowRect (infoPtr->Part[i].EditHwnd, &rcPart);
197 MapWindowPoints( 0, infoPtr->Self, (POINT *)&rcPart, 2 );
198 rect.left = rcPart.right;
199 GetWindowRect (infoPtr->Part[i+1].EditHwnd, &rcPart);
200 MapWindowPoints( 0, infoPtr->Self, (POINT *)&rcPart, 2 );
201 rect.right = rcPart.left;
202
203 if (theme)
205 else
207 }
208
209 if (theme)
210 CloseThemeData(theme);
211
212 return 0;
213}
214
215
217{
218 IPADDRESS_INFO *infoPtr;
219 RECT rcClient, edit;
220 int i, fieldsize;
221 HFONT hFont, hSysFont;
222 LOGFONTW logFont, logSysFont;
223
224 TRACE("\n");
225
228
229 infoPtr = heap_alloc_zero (sizeof(*infoPtr));
230 if (!infoPtr) return -1;
231 SetWindowLongPtrW (hwnd, 0, (DWORD_PTR)infoPtr);
232
233 GetClientRect (hwnd, &rcClient);
234
235 fieldsize = (rcClient.right - rcClient.left) / 4;
236
237 edit.top = rcClient.top + 2;
238 edit.bottom = rcClient.bottom - 2;
239
240 infoPtr->Self = hwnd;
241 infoPtr->Enabled = TRUE;
242 infoPtr->Notify = lpCreate->hwndParent;
243
244 hSysFont = GetStockObject(ANSI_VAR_FONT);
245 GetObjectW(hSysFont, sizeof(LOGFONTW), &logSysFont);
247 lstrcpyW(logFont.lfFaceName, logSysFont.lfFaceName);
248 hFont = CreateFontIndirectW(&logFont);
249
250 for (i = 0; i < 4; i++) {
251 IPPART_INFO* part = &infoPtr->Part[i];
252
253 part->LowerLimit = 0;
254 part->UpperLimit = 255;
255 edit.left = rcClient.left + i*fieldsize + 6;
256 edit.right = rcClient.left + (i+1)*fieldsize - 2;
257 part->EditHwnd =
259 edit.left, edit.top, edit.right - edit.left,
260 edit.bottom - edit.top, hwnd, (HMENU) 1,
264 part->OrigProc = (WNDPROC)
267 EnableWindow(part->EditHwnd, infoPtr->Enabled);
268 }
269
270 IPADDRESS_UpdateText (infoPtr);
271
272 return 0;
273}
274
275
277{
278 int i;
279
280 TRACE("\n");
281
282 for (i = 0; i < 4; i++) {
283 IPPART_INFO* part = &infoPtr->Part[i];
285 }
286
287 SetWindowLongPtrW (infoPtr->Self, 0, 0);
288 heap_free (infoPtr);
289 return 0;
290}
291
292
294{
295 int i;
296
297 infoPtr->Enabled = enabled;
298
299 for (i = 0; i < 4; i++)
300 EnableWindow(infoPtr->Part[i].EditHwnd, enabled);
301
302 InvalidateRgn(infoPtr->Self, NULL, FALSE);
303 return 0;
304}
305
306
308{
309 PAINTSTRUCT ps;
310
311 TRACE("\n");
312
313 if (hdc) return IPADDRESS_Draw (infoPtr, hdc);
314
315 hdc = BeginPaint (infoPtr->Self, &ps);
316 IPADDRESS_Draw (infoPtr, hdc);
317 EndPaint (infoPtr->Self, &ps);
318 return 0;
319}
320
321
322static BOOL IPADDRESS_IsBlank (const IPADDRESS_INFO *infoPtr)
323{
324 int i;
325
326 TRACE("\n");
327
328 for (i = 0; i < 4; i++)
329 if (GetWindowTextLengthW (infoPtr->Part[i].EditHwnd)) return FALSE;
330
331 return TRUE;
332}
333
334
335static int IPADDRESS_GetAddress (const IPADDRESS_INFO *infoPtr, LPDWORD ip_address)
336{
337 WCHAR field[5];
338 int i, invalid = 0;
339 DWORD ip_addr = 0;
340
341 TRACE("\n");
342
343 for (i = 0; i < 4; i++) {
344 ip_addr *= 256;
345 if (GetWindowTextW (infoPtr->Part[i].EditHwnd, field, 4))
346 ip_addr += wcstol(field, NULL, 10);
347 else
348 invalid++;
349 }
350 *ip_address = ip_addr;
351
352 return 4 - invalid;
353}
354
355
357{
358 TRACE("\n");
359
360 if ( (index < 0) || (index > 3) ) return FALSE;
361
362 infoPtr->Part[index].LowerLimit = range & 0xFF;
363 infoPtr->Part[index].UpperLimit = (range >> 8) & 0xFF;
364
365 return TRUE;
366}
367
368
369static void IPADDRESS_ClearAddress (const IPADDRESS_INFO *infoPtr)
370{
371 static const WCHAR nil[] = { 0 };
372 int i;
373
374 TRACE("\n");
375
376 for (i = 0; i < 4; i++)
377 SetWindowTextW (infoPtr->Part[i].EditHwnd, nil);
378}
379
380
381static LRESULT IPADDRESS_SetAddress (const IPADDRESS_INFO *infoPtr, DWORD ip_address)
382{
383 WCHAR buf[20];
384 static const WCHAR fmt[] = { '%', 'd', 0 };
385 int i;
386
387 TRACE("\n");
388
389 for (i = 3; i >= 0; i--) {
390 const IPPART_INFO* part = &infoPtr->Part[i];
391 int value = ip_address & 0xff;
392 if ( (value >= part->LowerLimit) && (value <= part->UpperLimit) ) {
394 SetWindowTextW (part->EditHwnd, buf);
395 IPADDRESS_Notify (infoPtr, EN_CHANGE);
396 }
397 ip_address >>= 8;
398 }
399
400 return TRUE;
401}
402
403
405{
406 TRACE("(index=%d)\n", index);
407
408 if (index > 3 || index < 0) index=0;
409
410 SetFocus (infoPtr->Part[index].EditHwnd);
411}
412
413
414static BOOL IPADDRESS_ConstrainField (const IPADDRESS_INFO *infoPtr, int currentfield)
415{
416 static const WCHAR fmt[] = { '%', 'd', 0 };
417 const IPPART_INFO *part;
418 int curValue, newValue;
419 WCHAR field[10];
420
421 TRACE("(currentfield=%d)\n", currentfield);
422
423 if (currentfield < 0 || currentfield > 3) return FALSE;
424
425 part = &infoPtr->Part[currentfield];
426 if (!GetWindowTextW (part->EditHwnd, field, 4)) return FALSE;
427
428 curValue = wcstol(field, NULL, 10);
429 TRACE(" curValue=%d\n", curValue);
430
431 newValue = IPADDRESS_IPNotify(infoPtr, currentfield, curValue);
432 TRACE(" newValue=%d\n", newValue);
433
434 if (newValue < part->LowerLimit) newValue = part->LowerLimit;
435 if (newValue > part->UpperLimit) newValue = part->UpperLimit;
436
437 if (newValue == curValue) return FALSE;
438
439 wsprintfW (field, fmt, newValue);
440 TRACE(" field=%s\n", debugstr_w(field));
441 return SetWindowTextW (part->EditHwnd, field);
442}
443
444
445static BOOL IPADDRESS_GotoNextField (const IPADDRESS_INFO *infoPtr, int cur, int sel)
446{
447 TRACE("\n");
448
449 if(cur >= -1 && cur < 4) {
451
452 if(cur < 3) {
453 const IPPART_INFO *next = &infoPtr->Part[cur + 1];
454 int start = 0, end = 0;
455 SetFocus (next->EditHwnd);
456 if (sel != POS_DEFAULT) {
457 if (sel == POS_RIGHT)
458 start = end = GetWindowTextLengthW(next->EditHwnd);
459 else if (sel == POS_SELALL)
460 end = -1;
461 SendMessageW(next->EditHwnd, EM_SETSEL, start, end);
462 }
463 return TRUE;
464 }
465
466 }
467 return FALSE;
468}
469
470
471/*
472 * period: move and select the text in the next field to the right if
473 * the current field is not empty(l!=0), we are not in the
474 * left most position, and nothing is selected(startsel==endsel)
475 *
476 * spacebar: same behavior as period
477 *
478 * alpha characters: completely ignored
479 *
480 * digits: accepted when field text length < 2 ignored otherwise.
481 * when 3 numbers have been entered into the field the value
482 * of the field is checked, if the field value exceeds the
483 * maximum value and is changed the field remains the current
484 * field, otherwise focus moves to the field to the right
485 *
486 * tab: change focus from the current ipaddress control to the next
487 * control in the tab order
488 *
489 * right arrow: move to the field on the right to the left most
490 * position in that field if no text is selected,
491 * we are in the right most position in the field,
492 * we are not in the right most field
493 *
494 * left arrow: move to the field on the left to the right most
495 * position in that field if no text is selected,
496 * we are in the left most position in the current field
497 * and we are not in the left most field
498 *
499 * backspace: delete the character to the left of the cursor position,
500 * if none are present move to the field on the left if
501 * we are not in the left most field and delete the right
502 * most digit in that field while keeping the cursor
503 * on the right side of the field
504 */
507{
509 IPADDRESS_INFO *infoPtr = (IPADDRESS_INFO *)GetWindowLongPtrW (Self, 0);
510 CHAR c = (CHAR)wParam;
511 INT index, len = 0, startsel, endsel;
512 IPPART_INFO *part;
513
514 TRACE("(hwnd=%p msg=0x%x wparam=0x%lx lparam=0x%lx)\n", hwnd, uMsg, wParam, lParam);
515
516 if ( (index = IPADDRESS_GetPartIndex(infoPtr, hwnd)) < 0) return 0;
517 part = &infoPtr->Part[index];
518
519 if (uMsg == WM_CHAR || uMsg == WM_KEYDOWN) {
521 SendMessageW(hwnd, EM_GETSEL, (WPARAM)&startsel, (LPARAM)&endsel);
522 }
523 switch (uMsg) {
524 case WM_CHAR:
525 if(isdigit(c)) {
526 if(len == 2 && startsel==endsel && endsel==len) {
527 /* process the digit press before we check the field */
528 int return_val = CallWindowProcW (part->OrigProc, hwnd, uMsg, wParam, lParam);
529
530 /* if the field value was changed stay at the current field */
531 if(!IPADDRESS_ConstrainField(infoPtr, index))
533
534 return return_val;
535 } else if (len == 3 && startsel==endsel && endsel==len)
537 else if (len < 3 || startsel != endsel) break;
538 } else if(c == '.' || c == ' ') {
539 if(len && startsel==endsel && startsel != 0) {
541 }
542 } else if (c == VK_BACK) break;
543 return 0;
544
545 case WM_KEYDOWN:
546 switch(c) {
547 case VK_RIGHT:
548 if(startsel==endsel && startsel==len) {
550 return 0;
551 }
552 break;
553 case VK_LEFT:
554 if(startsel==0 && startsel==endsel && index > 0) {
556 return 0;
557 }
558 break;
559 case VK_BACK:
560 if(startsel==endsel && startsel==0 && index > 0) {
561 IPPART_INFO *prev = &infoPtr->Part[index-1];
562 WCHAR val[10];
563
564 if(GetWindowTextW(prev->EditHwnd, val, 5)) {
565 val[lstrlenW(val) - 1] = 0;
567 }
568
570 return 0;
571 }
572 break;
573 }
574 break;
575 case WM_KILLFOCUS:
576 if (IPADDRESS_GetPartIndex(infoPtr, (HWND)wParam) < 0)
578 break;
579 case WM_SETFOCUS:
580 if (IPADDRESS_GetPartIndex(infoPtr, (HWND)wParam) < 0)
582 break;
583 }
584 return CallWindowProcW (part->OrigProc, hwnd, uMsg, wParam, lParam);
585}
586
587
588static LRESULT WINAPI
590{
592
593 TRACE("(hwnd=%p msg=0x%x wparam=0x%lx lparam=0x%lx)\n", hwnd, uMsg, wParam, lParam);
594
595 if (!infoPtr && (uMsg != WM_CREATE))
596 return DefWindowProcW (hwnd, uMsg, wParam, lParam);
597
598 switch (uMsg)
599 {
600 case WM_CREATE:
602
603 case WM_DESTROY:
604 return IPADDRESS_Destroy (infoPtr);
605
606 case WM_ENABLE:
607 return IPADDRESS_Enable (infoPtr, (BOOL)wParam);
608
609 case WM_PAINT:
610 return IPADDRESS_Paint (infoPtr, (HDC)wParam);
611
612#ifdef __REACTOS__
613 case WM_SETFOCUS:
615 return 0;
616#endif
617 case WM_COMMAND:
618 switch(wParam >> 16) {
619 case EN_CHANGE:
620 IPADDRESS_UpdateText(infoPtr);
621 IPADDRESS_Notify(infoPtr, EN_CHANGE);
622 break;
623 case EN_KILLFOCUS:
625 break;
626 }
627 break;
628
631 return 0;
632
633 case IPM_CLEARADDRESS:
634 IPADDRESS_ClearAddress (infoPtr);
635 break;
636
637 case IPM_SETADDRESS:
638 return IPADDRESS_SetAddress (infoPtr, (DWORD)lParam);
639
640 case IPM_GETADDRESS:
641 return IPADDRESS_GetAddress (infoPtr, (LPDWORD)lParam);
642
643 case IPM_SETRANGE:
644 return IPADDRESS_SetRange (infoPtr, (int)wParam, (WORD)lParam);
645
646 case IPM_SETFOCUS:
647 IPADDRESS_SetFocusToField (infoPtr, (int)wParam);
648 break;
649
650 case IPM_ISBLANK:
651 return IPADDRESS_IsBlank (infoPtr);
652
653 default:
654 if ((uMsg >= WM_USER) && (uMsg < WM_APP) && !COMCTL32_IsReflectedMessage(uMsg))
655 ERR("unknown msg %04x wp=%08lx lp=%08lx\n", uMsg, wParam, lParam);
656 return DefWindowProcW (hwnd, uMsg, wParam, lParam);
657 }
658 return 0;
659}
660
661
663{
664 WNDCLASSW wndClass;
665
666 ZeroMemory (&wndClass, sizeof(WNDCLASSW));
669 wndClass.cbClsExtra = 0;
670 wndClass.cbWndExtra = sizeof(IPADDRESS_INFO *);
671 wndClass.hCursor = LoadCursorW (0, (LPWSTR)IDC_IBEAM);
672 wndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
673 wndClass.lpszClassName = WC_IPADDRESSW;
674
675 RegisterClassW (&wndClass);
676}
677
678
680{
682}
#define isdigit(c)
Definition: acclib.h:68
static int state
Definition: maze.c:121
static BOOL heap_free(void *mem)
Definition: appwiz.h:76
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define index(s, c)
Definition: various.h:29
HFONT hFont
Definition: main.c:53
#define CHAR(Char)
#define ERR(fmt,...)
Definition: precomp.h:57
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
BOOL COMCTL32_IsReflectedMessage(UINT uMsg) DECLSPEC_HIDDEN
Definition: commctrl.c:1755
VOID COMCTL32_RefreshSysColors(void) DECLSPEC_HIDDEN
Definition: commctrl.c:1593
COMCTL32_SysColor comctl32_color
Definition: commctrl.c:82
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
static LRESULT IPADDRESS_Create(HWND hwnd, const CREATESTRUCTA *lpCreate)
Definition: ipaddress.c:216
void IPADDRESS_Register(void)
Definition: ipaddress.c:662
#define POS_RIGHT
Definition: ipaddress.c:67
static int IPADDRESS_GetPartIndex(const IPADDRESS_INFO *infoPtr, HWND hwnd)
Definition: ipaddress.c:127
static LRESULT WINAPI IPADDRESS_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: ipaddress.c:589
static LRESULT CALLBACK IPADDRESS_SubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: ipaddress.c:506
void IPADDRESS_Unregister(void)
Definition: ipaddress.c:679
#define POS_DEFAULT
Definition: ipaddress.c:65
static BOOL IPADDRESS_SetRange(IPADDRESS_INFO *infoPtr, int index, WORD range)
Definition: ipaddress.c:356
static BOOL IPADDRESS_GotoNextField(const IPADDRESS_INFO *infoPtr, int cur, int sel)
Definition: ipaddress.c:445
#define POS_LEFT
Definition: ipaddress.c:66
static BOOL IPADDRESS_ConstrainField(const IPADDRESS_INFO *infoPtr, int currentfield)
Definition: ipaddress.c:414
static LRESULT IPADDRESS_SetAddress(const IPADDRESS_INFO *infoPtr, DWORD ip_address)
Definition: ipaddress.c:381
#define POS_SELALL
Definition: ipaddress.c:68
static int IPADDRESS_GetAddress(const IPADDRESS_INFO *infoPtr, LPDWORD ip_address)
Definition: ipaddress.c:335
static LRESULT IPADDRESS_Notify(const IPADDRESS_INFO *infoPtr, UINT command)
Definition: ipaddress.c:96
static LRESULT IPADDRESS_Paint(const IPADDRESS_INFO *infoPtr, HDC hdc)
Definition: ipaddress.c:307
static const WCHAR IP_SUBCLASS_PROP[]
Definition: ipaddress.c:62
static LRESULT IPADDRESS_Enable(IPADDRESS_INFO *infoPtr, BOOL enabled)
Definition: ipaddress.c:293
static INT IPADDRESS_IPNotify(const IPADDRESS_INFO *infoPtr, INT field, INT value)
Definition: ipaddress.c:106
static void IPADDRESS_SetFocusToField(const IPADDRESS_INFO *infoPtr, INT index)
Definition: ipaddress.c:404
static void IPADDRESS_ClearAddress(const IPADDRESS_INFO *infoPtr)
Definition: ipaddress.c:369
static LRESULT IPADDRESS_Destroy(IPADDRESS_INFO *infoPtr)
Definition: ipaddress.c:276
static LRESULT IPADDRESS_Draw(const IPADDRESS_INFO *infoPtr, HDC hdc)
Definition: ipaddress.c:141
static void IPADDRESS_UpdateText(const IPADDRESS_INFO *infoPtr)
Definition: ipaddress.c:73
static BOOL IPADDRESS_IsBlank(const IPADDRESS_INFO *infoPtr)
Definition: ipaddress.c:322
#define CALLBACK
Definition: compat.h:35
#define lstrcpyW
Definition: compat.h:749
#define lstrlenW
Definition: compat.h:750
HRESULT WINAPI DrawThemeBackground(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, const RECT *pRect, const RECT *pClipRect)
Definition: draw.c:128
BOOL WINAPI IsThemeBackgroundPartiallyTransparent(HTHEME hTheme, int iPartId, int iStateId)
Definition: draw.c:1927
HRESULT WINAPI DrawThemeText(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, LPCWSTR pszText, int iCharCount, DWORD dwTextFlags, DWORD dwTextFlags2, const RECT *pRect)
Definition: draw.c:1500
HRESULT WINAPI DrawThemeParentBackground(HWND hwnd, HDC hdc, RECT *prc)
Definition: draw.c:72
HRESULT WINAPI GetThemeColor(HTHEME hTheme, int iPartId, int iStateId, int iPropId, COLORREF *pColor)
Definition: property.c:45
HTHEME WINAPI OpenThemeData(HWND hwnd, LPCWSTR classlist)
Definition: system.c:850
HRESULT WINAPI CloseThemeData(HTHEME hTheme)
Definition: system.c:965
#define WM_APP
Definition: eventvwr.h:73
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()
FxCollectionEntry * cur
GLuint start
Definition: gl.h:1545
GLuint GLuint end
Definition: gl.h:1545
GLenum GLenum GLsizei const GLuint GLboolean enabled
Definition: glext.h:7750
const GLubyte * c
Definition: glext.h:8905
GLuint index
Definition: glext.h:6031
GLenum GLint * range
Definition: glext.h:7539
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
GLuint GLfloat * val
Definition: glext.h:7180
GLenum GLsizei len
Definition: glext.h:6722
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
_Check_return_ long __cdecl wcstol(_In_z_ const wchar_t *_Str, _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, _In_ int _Radix)
#define debugstr_w
Definition: kernel32.h:32
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:274
HDC hdc
Definition: main.c:9
static HDC
Definition: imagelist.c:88
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
static const WCHAR dotW[]
Definition: directory.c:80
static const WCHAR invalid[]
Definition: assoc.c:39
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:63
static HTHEME(WINAPI *pOpenThemeDataEx)(HWND
unsigned int UINT
Definition: ndis.h:50
INT WINAPI DrawTextW(HDC hdc, LPCWSTR str, INT count, LPRECT rect, UINT flags)
Definition: defwnd.c:16
#define WS_CHILD
Definition: pedump.c:617
#define ES_READONLY
Definition: pedump.c:675
#define WS_BORDER
Definition: pedump.c:625
#define WS_VISIBLE
Definition: pedump.c:620
#define ES_CENTER
Definition: pedump.c:665
#define WC_EDITW
Definition: commctrl.h:4692
#define IPM_ISBLANK
Definition: commctrl.h:4475
#define IPM_SETFOCUS
Definition: commctrl.h:4474
#define IPM_SETADDRESS
Definition: commctrl.h:4471
#define IPN_FIELDCHANGED
Definition: commctrl.h:4482
#define WC_IPADDRESSW
Definition: commctrl.h:4477
#define IPM_CLEARADDRESS
Definition: commctrl.h:4470
#define IPM_GETADDRESS
Definition: commctrl.h:4472
#define IPM_SETRANGE
Definition: commctrl.h:4473
static unsigned __int64 next
Definition: rand_nt.c:6
#define WM_NOTIFY
Definition: richedit.h:61
#define nil
Definition: compat.h:23
int zero
Definition: sehframes.cpp:29
#define TRACE(s)
Definition: solgame.cpp:4
& rect
Definition: startmenu.cpp:1413
COLORREF clrWindow
Definition: comctl32.h:182
COLORREF clr3dFace
Definition: comctl32.h:181
COLORREF clrGrayText
Definition: comctl32.h:184
COLORREF clrWindowText
Definition: comctl32.h:183
IPPART_INFO Part[4]
Definition: ipaddress.c:59
INT UpperLimit
Definition: ipaddress.c:50
HWND EditHwnd
Definition: ipaddress.c:48
WNDPROC OrigProc
Definition: ipaddress.c:51
INT LowerLimit
Definition: ipaddress.c:49
WCHAR lfFaceName[LF_FACESIZE]
Definition: dimm.idl:72
LPCWSTR lpszClassName
Definition: winuser.h:3188
HBRUSH hbrBackground
Definition: winuser.h:3186
int cbClsExtra
Definition: winuser.h:3181
UINT style
Definition: winuser.h:3179
WNDPROC lpfnWndProc
Definition: winuser.h:3180
int cbWndExtra
Definition: winuser.h:3182
HCURSOR hCursor
Definition: winuser.h:3185
Definition: parser.c:44
Definition: dsound.c:943
Definition: dhcpd.h:62
UINT_PTR idFrom
Definition: winuser.h:3161
UINT code
Definition: winuser.h:3162
HWND hwndFrom
Definition: winuser.h:3160
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 GWLP_WNDPROC
Definition: treelist.c:66
uint32_t DWORD_PTR
Definition: typedefs.h:65
uint32_t * LPDWORD
Definition: typedefs.h:59
int32_t INT
Definition: typedefs.h:58
Definition: pdh_main.c:96
@ EP_EDITTEXT
Definition: vsstyle.h:419
@ ETS_DISABLED
Definition: vsstyle.h:436
@ ETS_READONLY
Definition: vsstyle.h:438
@ ETS_NORMAL
Definition: vsstyle.h:433
@ ETS_FOCUSED
Definition: vsstyle.h:437
#define TMT_TEXTCOLOR
Definition: vssym32.h:328
#define TMT_FILLCOLOR
Definition: vssym32.h:327
int WINAPI GetWindowTextW(HWND hWnd, LPWSTR lpString, int nMaxCount)
Definition: window.c:1394
#define ZeroMemory
Definition: winbase.h:1737
_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
DWORD COLORREF
Definition: windef.h:300
#define WINAPI
Definition: msvc.h:6
HGDIOBJ WINAPI GetStockObject(_In_ int)
int WINAPI GetObjectW(_In_ HANDLE h, _In_ int c, _Out_writes_bytes_opt_(c) LPVOID pv)
COLORREF WINAPI SetBkColor(_In_ HDC, _In_ COLORREF)
Definition: dc.c:999
#define ANSI_VAR_FONT
Definition: wingdi.h:907
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)
HFONT WINAPI CreateFontIndirectW(_In_ const LOGFONTW *)
COLORREF WINAPI SetTextColor(_In_ HDC, _In_ COLORREF)
Definition: text.c:918
HBRUSH WINAPI CreateSolidBrush(_In_ COLORREF)
#define WM_PAINT
Definition: winuser.h:1623
HWND WINAPI GetFocus(void)
Definition: window.c:1875
#define CS_VREDRAW
Definition: winuser.h:658
#define MAKEWPARAM(l, h)
Definition: winuser.h:4012
#define GetWindowLongPtrW
Definition: winuser.h:4832
#define WM_ENABLE
Definition: winuser.h:1618
#define EDGE_SUNKEN
Definition: winuser.h:451
#define EN_KILLFOCUS
Definition: winuser.h:2028
#define COLOR_WINDOW
Definition: winuser.h:921
#define DT_CENTER
Definition: winuser.h:527
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
#define WM_CREATE
Definition: winuser.h:1611
int WINAPIV wsprintfW(_Out_ LPWSTR, _In_ _Printf_format_string_ LPCWSTR,...)
#define EM_GETSEL
Definition: winuser.h:2000
#define EN_SETFOCUS
Definition: winuser.h:2030
LONG WINAPI SetWindowLongW(_In_ HWND, _In_ int, _In_ LONG)
LONG WINAPI GetWindowLongW(_In_ HWND, _In_ int)
#define DT_SINGLELINE
Definition: winuser.h:540
#define WM_COMMAND
Definition: winuser.h:1743
#define CS_HREDRAW
Definition: winuser.h:653
ATOM WINAPI RegisterClassW(_In_ CONST WNDCLASSW *)
#define BF_ADJUST
Definition: winuser.h:470
#define WM_SETFOCUS
Definition: winuser.h:1616
#define CS_DBLCLKS
Definition: winuser.h:651
#define SPI_GETICONTITLELOGFONT
Definition: winuser.h:1383
#define WM_SYSCOLORCHANGE
Definition: winuser.h:1629
HCURSOR WINAPI LoadCursorW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2191
int WINAPI MapWindowPoints(_In_opt_ HWND hWndFrom, _In_opt_ HWND hWndTo, _Inout_updates_(cPoints) LPPOINT lpPoints, _In_ UINT cPoints)
#define GWLP_HINSTANCE
Definition: winuser.h:859
BOOL WINAPI SetWindowTextW(_In_ HWND, _In_opt_ LPCWSTR)
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
BOOL WINAPI DrawEdge(_In_ HDC, _Inout_ LPRECT, _In_ UINT, _In_ UINT)
HWND WINAPI SetFocus(_In_opt_ HWND)
#define WM_SETFONT
Definition: winuser.h:1653
BOOL WINAPI EndPaint(_In_ HWND, _In_ const PAINTSTRUCT *)
BOOL WINAPI SetPropW(_In_ HWND, _In_ LPCWSTR, _In_opt_ HANDLE)
#define IDC_IBEAM
Definition: winuser.h:688
BOOL WINAPI EnableWindow(_In_ HWND, _In_ BOOL)
#define VK_BACK
Definition: winuser.h:2201
BOOL WINAPI InvalidateRgn(_In_ HWND, _In_opt_ HRGN, _In_ BOOL)
#define EM_SETSEL
Definition: winuser.h:2021
int WINAPI GetWindowTextLengthW(_In_ HWND)
#define CreateWindowW(a, b, c, d, e, f, g, h, i, j, k)
Definition: winuser.h:4319
BOOL WINAPI SystemParametersInfoW(_In_ UINT uiAction, _In_ UINT uiParam, _Inout_opt_ PVOID pvParam, _In_ UINT fWinIni)
#define WM_CHAR
Definition: winuser.h:1720
#define DT_BOTTOM
Definition: winuser.h:525
HANDLE WINAPI GetPropW(_In_ HWND, _In_ LPCWSTR)
#define CS_GLOBALCLASS
Definition: winuser.h:652
#define VK_LEFT
Definition: winuser.h:2227
#define VK_RIGHT
Definition: winuser.h:2229
#define GWLP_ID
Definition: winuser.h:863
#define WM_USER
Definition: winuser.h:1898
#define WM_DESTROY
Definition: winuser.h:1612
BOOL WINAPI UnregisterClassW(_In_ LPCWSTR, HINSTANCE)
#define WM_KEYDOWN
Definition: winuser.h:1718
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
Definition: winuser.h:2909
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)
#define SetWindowLongPtrW
Definition: winuser.h:5358
LRESULT WINAPI CallWindowProcW(_In_ WNDPROC, _In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define BF_RECT
Definition: winuser.h:462
#define GWL_STYLE
Definition: winuser.h:855
#define WM_KILLFOCUS
Definition: winuser.h:1617
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define EN_CHANGE
Definition: winuser.h:2025
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
char CHAR
Definition: xmlstorage.h:175