ReactOS 0.4.15-dev-8236-g99f0937
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/unicode.h"
42#include "wine/debug.h"
43#include "wine/heap.h"
44
46
47typedef struct
48{
54
55typedef struct
56{
60 IPPART_INFO Part[4];
62
63static const WCHAR IP_SUBCLASS_PROP[] =
64 { 'C', 'C', 'I', 'P', '3', '2', 'S', 'u', 'b', 'c', 'l', 'a', 's', 's', 'I', 'n', 'f', 'o', 0 };
65
66#define POS_DEFAULT 0
67#define POS_LEFT 1
68#define POS_RIGHT 2
69#define POS_SELALL 3
70
71static LRESULT CALLBACK
73
74static void IPADDRESS_UpdateText (const IPADDRESS_INFO *infoPtr)
75{
76 static const WCHAR zero[] = {'0', 0};
77 static const WCHAR dot[] = {'.', 0};
78 WCHAR field[4];
79 WCHAR ip[16];
80 INT i;
81
82 ip[0] = 0;
83
84 for (i = 0; i < 4; i++) {
85 if (GetWindowTextW (infoPtr->Part[i].EditHwnd, field, 4))
87 else
88 /* empty edit treated as zero */
89 strcatW(ip, zero);
90 if (i != 3)
91 strcatW(ip, dot);
92 }
93
94 SetWindowTextW(infoPtr->Self, ip);
95}
96
98{
99 HWND hwnd = infoPtr->Self;
100
101 TRACE("(command=%x)\n", command);
102
103 return SendMessageW (infoPtr->Notify, WM_COMMAND,
105}
106
108{
109 NMIPADDRESS nmip;
110
111 TRACE("(field=%x, value=%d)\n", field, value);
112
113 nmip.hdr.hwndFrom = infoPtr->Self;
114 nmip.hdr.idFrom = GetWindowLongPtrW (infoPtr->Self, GWLP_ID);
116
117 nmip.iField = field;
118 nmip.iValue = value;
119
120 SendMessageW (infoPtr->Notify, WM_NOTIFY, nmip.hdr.idFrom, (LPARAM)&nmip);
121
122 TRACE("<-- %d\n", nmip.iValue);
123
124 return nmip.iValue;
125}
126
127
129{
130 int i;
131
132 TRACE("(hwnd=%p)\n", hwnd);
133
134 for (i = 0; i < 4; i++)
135 if (infoPtr->Part[i].EditHwnd == hwnd) return i;
136
137 ERR("We subclassed the wrong window! (hwnd=%p)\n", hwnd);
138 return -1;
139}
140
141
143{
144 static const WCHAR dotW[] = { '.', 0 };
145 RECT rect, rcPart;
146 COLORREF bgCol, fgCol;
147 HTHEME theme;
148 int i, state = ETS_NORMAL;
149
150 TRACE("\n");
151
152 GetClientRect (infoPtr->Self, &rect);
153
154 theme = OpenThemeData(infoPtr->Self, WC_EDITW);
155
156 if (theme) {
157 DWORD dwStyle = GetWindowLongW (infoPtr->Self, GWL_STYLE);
158
159 if (!infoPtr->Enabled)
161 else if (dwStyle & ES_READONLY)
163 else if (GetFocus() == infoPtr->Self)
165
168
172 } else {
173 if (infoPtr->Enabled) {
176 } else {
179 }
180
181#ifdef __REACTOS__
182 {
183 HBRUSH brush = CreateSolidBrush(bgCol);
184 FillRect(hdc, &rect, brush);
185 DeleteObject(brush);
186 }
187#else
188 FillRect (hdc, &rect, (HBRUSH)(DWORD_PTR)(bgCol+1));
189#endif
191 }
192
193 SetBkColor (hdc, bgCol);
194 SetTextColor(hdc, fgCol);
195
196 for (i = 0; i < 3; i++) {
197 GetWindowRect (infoPtr->Part[i].EditHwnd, &rcPart);
198 MapWindowPoints( 0, infoPtr->Self, (POINT *)&rcPart, 2 );
199 rect.left = rcPart.right;
200 GetWindowRect (infoPtr->Part[i+1].EditHwnd, &rcPart);
201 MapWindowPoints( 0, infoPtr->Self, (POINT *)&rcPart, 2 );
202 rect.right = rcPart.left;
203
204 if (theme)
206 else
208 }
209
210 if (theme)
211 CloseThemeData(theme);
212
213 return 0;
214}
215
216
218{
219 IPADDRESS_INFO *infoPtr;
220 RECT rcClient, edit;
221 int i, fieldsize;
222 HFONT hFont, hSysFont;
223 LOGFONTW logFont, logSysFont;
224
225 TRACE("\n");
226
229
230 infoPtr = heap_alloc_zero (sizeof(*infoPtr));
231 if (!infoPtr) return -1;
232 SetWindowLongPtrW (hwnd, 0, (DWORD_PTR)infoPtr);
233
234 GetClientRect (hwnd, &rcClient);
235
236 fieldsize = (rcClient.right - rcClient.left) / 4;
237
238 edit.top = rcClient.top + 2;
239 edit.bottom = rcClient.bottom - 2;
240
241 infoPtr->Self = hwnd;
242 infoPtr->Enabled = TRUE;
243 infoPtr->Notify = lpCreate->hwndParent;
244
245 hSysFont = GetStockObject(ANSI_VAR_FONT);
246 GetObjectW(hSysFont, sizeof(LOGFONTW), &logSysFont);
248 strcpyW(logFont.lfFaceName, logSysFont.lfFaceName);
249 hFont = CreateFontIndirectW(&logFont);
250
251 for (i = 0; i < 4; i++) {
252 IPPART_INFO* part = &infoPtr->Part[i];
253
254 part->LowerLimit = 0;
255 part->UpperLimit = 255;
256 edit.left = rcClient.left + i*fieldsize + 6;
257 edit.right = rcClient.left + (i+1)*fieldsize - 2;
258 part->EditHwnd =
260 edit.left, edit.top, edit.right - edit.left,
261 edit.bottom - edit.top, hwnd, (HMENU) 1,
265 part->OrigProc = (WNDPROC)
268 EnableWindow(part->EditHwnd, infoPtr->Enabled);
269 }
270
271 IPADDRESS_UpdateText (infoPtr);
272
273 return 0;
274}
275
276
278{
279 int i;
280
281 TRACE("\n");
282
283 for (i = 0; i < 4; i++) {
284 IPPART_INFO* part = &infoPtr->Part[i];
286 }
287
288 SetWindowLongPtrW (infoPtr->Self, 0, 0);
289 heap_free (infoPtr);
290 return 0;
291}
292
293
295{
296 int i;
297
298 infoPtr->Enabled = enabled;
299
300 for (i = 0; i < 4; i++)
301 EnableWindow(infoPtr->Part[i].EditHwnd, enabled);
302
303 InvalidateRgn(infoPtr->Self, NULL, FALSE);
304 return 0;
305}
306
307
309{
310 PAINTSTRUCT ps;
311
312 TRACE("\n");
313
314 if (hdc) return IPADDRESS_Draw (infoPtr, hdc);
315
316 hdc = BeginPaint (infoPtr->Self, &ps);
317 IPADDRESS_Draw (infoPtr, hdc);
318 EndPaint (infoPtr->Self, &ps);
319 return 0;
320}
321
322
323static BOOL IPADDRESS_IsBlank (const IPADDRESS_INFO *infoPtr)
324{
325 int i;
326
327 TRACE("\n");
328
329 for (i = 0; i < 4; i++)
330 if (GetWindowTextLengthW (infoPtr->Part[i].EditHwnd)) return FALSE;
331
332 return TRUE;
333}
334
335
336static int IPADDRESS_GetAddress (const IPADDRESS_INFO *infoPtr, LPDWORD ip_address)
337{
338 WCHAR field[5];
339 int i, invalid = 0;
340 DWORD ip_addr = 0;
341
342 TRACE("\n");
343
344 for (i = 0; i < 4; i++) {
345 ip_addr *= 256;
346 if (GetWindowTextW (infoPtr->Part[i].EditHwnd, field, 4))
347 ip_addr += atolW(field);
348 else
349 invalid++;
350 }
351 *ip_address = ip_addr;
352
353 return 4 - invalid;
354}
355
356
358{
359 TRACE("\n");
360
361 if ( (index < 0) || (index > 3) ) return FALSE;
362
363 infoPtr->Part[index].LowerLimit = range & 0xFF;
364 infoPtr->Part[index].UpperLimit = (range >> 8) & 0xFF;
365
366 return TRUE;
367}
368
369
370static void IPADDRESS_ClearAddress (const IPADDRESS_INFO *infoPtr)
371{
372 static const WCHAR nil[] = { 0 };
373 int i;
374
375 TRACE("\n");
376
377 for (i = 0; i < 4; i++)
378 SetWindowTextW (infoPtr->Part[i].EditHwnd, nil);
379}
380
381
382static LRESULT IPADDRESS_SetAddress (const IPADDRESS_INFO *infoPtr, DWORD ip_address)
383{
384 WCHAR buf[20];
385 static const WCHAR fmt[] = { '%', 'd', 0 };
386 int i;
387
388 TRACE("\n");
389
390 for (i = 3; i >= 0; i--) {
391 const IPPART_INFO* part = &infoPtr->Part[i];
392 int value = ip_address & 0xff;
393 if ( (value >= part->LowerLimit) && (value <= part->UpperLimit) ) {
395 SetWindowTextW (part->EditHwnd, buf);
396 IPADDRESS_Notify (infoPtr, EN_CHANGE);
397 }
398 ip_address >>= 8;
399 }
400
401 return TRUE;
402}
403
404
406{
407 TRACE("(index=%d)\n", index);
408
409 if (index > 3 || index < 0) index=0;
410
411 SetFocus (infoPtr->Part[index].EditHwnd);
412}
413
414
415static BOOL IPADDRESS_ConstrainField (const IPADDRESS_INFO *infoPtr, int currentfield)
416{
417 static const WCHAR fmt[] = { '%', 'd', 0 };
418 const IPPART_INFO *part;
419 int curValue, newValue;
420 WCHAR field[10];
421
422 TRACE("(currentfield=%d)\n", currentfield);
423
424 if (currentfield < 0 || currentfield > 3) return FALSE;
425
426 part = &infoPtr->Part[currentfield];
427 if (!GetWindowTextW (part->EditHwnd, field, 4)) return FALSE;
428
429 curValue = atoiW(field);
430 TRACE(" curValue=%d\n", curValue);
431
432 newValue = IPADDRESS_IPNotify(infoPtr, currentfield, curValue);
433 TRACE(" newValue=%d\n", newValue);
434
435 if (newValue < part->LowerLimit) newValue = part->LowerLimit;
436 if (newValue > part->UpperLimit) newValue = part->UpperLimit;
437
438 if (newValue == curValue) return FALSE;
439
440 wsprintfW (field, fmt, newValue);
441 TRACE(" field=%s\n", debugstr_w(field));
442 return SetWindowTextW (part->EditHwnd, field);
443}
444
445
446static BOOL IPADDRESS_GotoNextField (const IPADDRESS_INFO *infoPtr, int cur, int sel)
447{
448 TRACE("\n");
449
450 if(cur >= -1 && cur < 4) {
452
453 if(cur < 3) {
454 const IPPART_INFO *next = &infoPtr->Part[cur + 1];
455 int start = 0, end = 0;
456 SetFocus (next->EditHwnd);
457 if (sel != POS_DEFAULT) {
458 if (sel == POS_RIGHT)
459 start = end = GetWindowTextLengthW(next->EditHwnd);
460 else if (sel == POS_SELALL)
461 end = -1;
462 SendMessageW(next->EditHwnd, EM_SETSEL, start, end);
463 }
464 return TRUE;
465 }
466
467 }
468 return FALSE;
469}
470
471
472/*
473 * period: move and select the text in the next field to the right if
474 * the current field is not empty(l!=0), we are not in the
475 * left most position, and nothing is selected(startsel==endsel)
476 *
477 * spacebar: same behavior as period
478 *
479 * alpha characters: completely ignored
480 *
481 * digits: accepted when field text length < 2 ignored otherwise.
482 * when 3 numbers have been entered into the field the value
483 * of the field is checked, if the field value exceeds the
484 * maximum value and is changed the field remains the current
485 * field, otherwise focus moves to the field to the right
486 *
487 * tab: change focus from the current ipaddress control to the next
488 * control in the tab order
489 *
490 * right arrow: move to the field on the right to the left most
491 * position in that field if no text is selected,
492 * we are in the right most position in the field,
493 * we are not in the right most field
494 *
495 * left arrow: move to the field on the left to the right most
496 * position in that field if no text is selected,
497 * we are in the left most position in the current field
498 * and we are not in the left most field
499 *
500 * backspace: delete the character to the left of the cursor position,
501 * if none are present move to the field on the left if
502 * we are not in the left most field and delete the right
503 * most digit in that field while keeping the cursor
504 * on the right side of the field
505 */
508{
510 IPADDRESS_INFO *infoPtr = (IPADDRESS_INFO *)GetWindowLongPtrW (Self, 0);
511 CHAR c = (CHAR)wParam;
512 INT index, len = 0, startsel, endsel;
513 IPPART_INFO *part;
514
515 TRACE("(hwnd=%p msg=0x%x wparam=0x%lx lparam=0x%lx)\n", hwnd, uMsg, wParam, lParam);
516
517 if ( (index = IPADDRESS_GetPartIndex(infoPtr, hwnd)) < 0) return 0;
518 part = &infoPtr->Part[index];
519
520 if (uMsg == WM_CHAR || uMsg == WM_KEYDOWN) {
522 SendMessageW(hwnd, EM_GETSEL, (WPARAM)&startsel, (LPARAM)&endsel);
523 }
524 switch (uMsg) {
525 case WM_CHAR:
526 if(isdigit(c)) {
527 if(len == 2 && startsel==endsel && endsel==len) {
528 /* process the digit press before we check the field */
529 int return_val = CallWindowProcW (part->OrigProc, hwnd, uMsg, wParam, lParam);
530
531 /* if the field value was changed stay at the current field */
532 if(!IPADDRESS_ConstrainField(infoPtr, index))
534
535 return return_val;
536 } else if (len == 3 && startsel==endsel && endsel==len)
538 else if (len < 3 || startsel != endsel) break;
539 } else if(c == '.' || c == ' ') {
540 if(len && startsel==endsel && startsel != 0) {
542 }
543 } else if (c == VK_BACK) break;
544 return 0;
545
546 case WM_KEYDOWN:
547 switch(c) {
548 case VK_RIGHT:
549 if(startsel==endsel && startsel==len) {
551 return 0;
552 }
553 break;
554 case VK_LEFT:
555 if(startsel==0 && startsel==endsel && index > 0) {
557 return 0;
558 }
559 break;
560 case VK_BACK:
561 if(startsel==endsel && startsel==0 && index > 0) {
562 IPPART_INFO *prev = &infoPtr->Part[index-1];
563 WCHAR val[10];
564
565 if(GetWindowTextW(prev->EditHwnd, val, 5)) {
566 val[lstrlenW(val) - 1] = 0;
568 }
569
571 return 0;
572 }
573 break;
574 }
575 break;
576 case WM_KILLFOCUS:
577 if (IPADDRESS_GetPartIndex(infoPtr, (HWND)wParam) < 0)
579 break;
580 case WM_SETFOCUS:
581 if (IPADDRESS_GetPartIndex(infoPtr, (HWND)wParam) < 0)
583 break;
584 }
585 return CallWindowProcW (part->OrigProc, hwnd, uMsg, wParam, lParam);
586}
587
588
589static LRESULT WINAPI
591{
593
594 TRACE("(hwnd=%p msg=0x%x wparam=0x%lx lparam=0x%lx)\n", hwnd, uMsg, wParam, lParam);
595
596 if (!infoPtr && (uMsg != WM_CREATE))
597 return DefWindowProcW (hwnd, uMsg, wParam, lParam);
598
599 switch (uMsg)
600 {
601 case WM_CREATE:
603
604 case WM_DESTROY:
605 return IPADDRESS_Destroy (infoPtr);
606
607 case WM_ENABLE:
608 return IPADDRESS_Enable (infoPtr, (BOOL)wParam);
609
610 case WM_PAINT:
611 return IPADDRESS_Paint (infoPtr, (HDC)wParam);
612
613#ifdef __REACTOS__
614 case WM_SETFOCUS:
616 return 0;
617#endif
618 case WM_COMMAND:
619 switch(wParam >> 16) {
620 case EN_CHANGE:
621 IPADDRESS_UpdateText(infoPtr);
622 IPADDRESS_Notify(infoPtr, EN_CHANGE);
623 break;
624 case EN_KILLFOCUS:
626 break;
627 }
628 break;
629
632 return 0;
633
634 case IPM_CLEARADDRESS:
635 IPADDRESS_ClearAddress (infoPtr);
636 break;
637
638 case IPM_SETADDRESS:
639 return IPADDRESS_SetAddress (infoPtr, (DWORD)lParam);
640
641 case IPM_GETADDRESS:
642 return IPADDRESS_GetAddress (infoPtr, (LPDWORD)lParam);
643
644 case IPM_SETRANGE:
645 return IPADDRESS_SetRange (infoPtr, (int)wParam, (WORD)lParam);
646
647 case IPM_SETFOCUS:
648 IPADDRESS_SetFocusToField (infoPtr, (int)wParam);
649 break;
650
651 case IPM_ISBLANK:
652 return IPADDRESS_IsBlank (infoPtr);
653
654 default:
655 if ((uMsg >= WM_USER) && (uMsg < WM_APP) && !COMCTL32_IsReflectedMessage(uMsg))
656 ERR("unknown msg %04x wp=%08lx lp=%08lx\n", uMsg, wParam, lParam);
657 return DefWindowProcW (hwnd, uMsg, wParam, lParam);
658 }
659 return 0;
660}
661
662
664{
665 WNDCLASSW wndClass;
666
667 ZeroMemory (&wndClass, sizeof(WNDCLASSW));
670 wndClass.cbClsExtra = 0;
671 wndClass.cbWndExtra = sizeof(IPADDRESS_INFO *);
672 wndClass.hCursor = LoadCursorW (0, (LPWSTR)IDC_IBEAM);
673 wndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
674 wndClass.lpszClassName = WC_IPADDRESSW;
675
676 RegisterClassW (&wndClass);
677}
678
679
681{
683}
#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: debug.h:113
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
BOOL COMCTL32_IsReflectedMessage(UINT uMsg) DECLSPEC_HIDDEN
Definition: commctrl.c:1748
VOID COMCTL32_RefreshSysColors(void) DECLSPEC_HIDDEN
Definition: commctrl.c:1586
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:217
void IPADDRESS_Register(void)
Definition: ipaddress.c:663
#define POS_RIGHT
Definition: ipaddress.c:68
static int IPADDRESS_GetPartIndex(const IPADDRESS_INFO *infoPtr, HWND hwnd)
Definition: ipaddress.c:128
static LRESULT WINAPI IPADDRESS_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: ipaddress.c:590
static LRESULT CALLBACK IPADDRESS_SubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: ipaddress.c:507
void IPADDRESS_Unregister(void)
Definition: ipaddress.c:680
#define POS_DEFAULT
Definition: ipaddress.c:66
static BOOL IPADDRESS_SetRange(IPADDRESS_INFO *infoPtr, int index, WORD range)
Definition: ipaddress.c:357
static BOOL IPADDRESS_GotoNextField(const IPADDRESS_INFO *infoPtr, int cur, int sel)
Definition: ipaddress.c:446
#define POS_LEFT
Definition: ipaddress.c:67
static BOOL IPADDRESS_ConstrainField(const IPADDRESS_INFO *infoPtr, int currentfield)
Definition: ipaddress.c:415
static LRESULT IPADDRESS_SetAddress(const IPADDRESS_INFO *infoPtr, DWORD ip_address)
Definition: ipaddress.c:382
#define POS_SELALL
Definition: ipaddress.c:69
static int IPADDRESS_GetAddress(const IPADDRESS_INFO *infoPtr, LPDWORD ip_address)
Definition: ipaddress.c:336
static LRESULT IPADDRESS_Notify(const IPADDRESS_INFO *infoPtr, UINT command)
Definition: ipaddress.c:97
static LRESULT IPADDRESS_Paint(const IPADDRESS_INFO *infoPtr, HDC hdc)
Definition: ipaddress.c:308
static const WCHAR IP_SUBCLASS_PROP[]
Definition: ipaddress.c:63
static LRESULT IPADDRESS_Enable(IPADDRESS_INFO *infoPtr, BOOL enabled)
Definition: ipaddress.c:294
static INT IPADDRESS_IPNotify(const IPADDRESS_INFO *infoPtr, INT field, INT value)
Definition: ipaddress.c:107
static void IPADDRESS_SetFocusToField(const IPADDRESS_INFO *infoPtr, INT index)
Definition: ipaddress.c:405
static void IPADDRESS_ClearAddress(const IPADDRESS_INFO *infoPtr)
Definition: ipaddress.c:370
static LRESULT IPADDRESS_Destroy(IPADDRESS_INFO *infoPtr)
Definition: ipaddress.c:277
static LRESULT IPADDRESS_Draw(const IPADDRESS_INFO *infoPtr, HDC hdc)
Definition: ipaddress.c:142
static void IPADDRESS_UpdateText(const IPADDRESS_INFO *infoPtr)
Definition: ipaddress.c:74
static BOOL IPADDRESS_IsBlank(const IPADDRESS_INFO *infoPtr)
Definition: ipaddress.c:323
#define CALLBACK
Definition: compat.h:35
#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:1883
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:1377
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:835
HRESULT WINAPI CloseThemeData(HTHEME hTheme)
Definition: system.c:950
#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
#define debugstr_w
Definition: kernel32.h:32
HDC hdc
Definition: main.c:9
static HDC
Definition: imagelist.c:92
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:4687
#define IPM_ISBLANK
Definition: commctrl.h:4470
#define IPM_SETFOCUS
Definition: commctrl.h:4469
#define IPM_SETADDRESS
Definition: commctrl.h:4466
#define IPN_FIELDCHANGED
Definition: commctrl.h:4477
#define WC_IPADDRESSW
Definition: commctrl.h:4472
#define IPM_CLEARADDRESS
Definition: commctrl.h:4465
#define IPM_GETADDRESS
Definition: commctrl.h:4467
#define IPM_SETRANGE
Definition: commctrl.h:4468
static unsigned __int64 next
Definition: rand_nt.c:6
#define atoiW(s)
Definition: unicode.h:60
#define atolW(s)
Definition: unicode.h:61
#define strcatW(d, s)
Definition: unicode.h:36
#define strcpyW(d, s)
Definition: unicode.h:35
#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:176
COLORREF clr3dFace
Definition: comctl32.h:175
COLORREF clrGrayText
Definition: comctl32.h:178
COLORREF clrWindowText
Definition: comctl32.h:177
IPPART_INFO Part[4]
Definition: ipaddress.c:60
INT UpperLimit
Definition: ipaddress.c:51
HWND EditHwnd
Definition: ipaddress.c:49
WNDPROC OrigProc
Definition: ipaddress.c:52
INT LowerLimit
Definition: ipaddress.c:50
WCHAR lfFaceName[LF_FACESIZE]
Definition: dimm.idl:72
LPCWSTR lpszClassName
Definition: winuser.h:3185
HBRUSH hbrBackground
Definition: winuser.h:3183
int cbClsExtra
Definition: winuser.h:3178
UINT style
Definition: winuser.h:3176
WNDPROC lpfnWndProc
Definition: winuser.h:3177
int cbWndExtra
Definition: winuser.h:3179
HCURSOR hCursor
Definition: winuser.h:3182
Definition: parser.c:44
Definition: dsound.c:943
Definition: dhcpd.h:62
UINT_PTR idFrom
Definition: winuser.h:3158
UINT code
Definition: winuser.h:3159
HWND hwndFrom
Definition: winuser.h:3157
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:94
@ 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:1412
#define ZeroMemory
Definition: winbase.h:1712
_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:1620
HWND WINAPI GetFocus(void)
Definition: window.c:1893
#define CS_VREDRAW
Definition: winuser.h:658
#define MAKEWPARAM(l, h)
Definition: winuser.h:4009
#define GetWindowLongPtrW
Definition: winuser.h:4829
#define WM_ENABLE
Definition: winuser.h:1615
#define EDGE_SUNKEN
Definition: winuser.h:451
#define EN_KILLFOCUS
Definition: winuser.h:2025
#define COLOR_WINDOW
Definition: winuser.h:918
#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:1608
int WINAPIV wsprintfW(_Out_ LPWSTR, _In_ _Printf_format_string_ LPCWSTR,...)
#define EM_GETSEL
Definition: winuser.h:1997
#define EN_SETFOCUS
Definition: winuser.h:2027
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:1740
#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:1613
#define CS_DBLCLKS
Definition: winuser.h:651
#define SPI_GETICONTITLELOGFONT
Definition: winuser.h:1380
#define WM_SYSCOLORCHANGE
Definition: winuser.h:1626
HCURSOR WINAPI LoadCursorW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2136
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:856
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:1650
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:2198
BOOL WINAPI InvalidateRgn(_In_ HWND, _In_opt_ HRGN, _In_ BOOL)
#define EM_SETSEL
Definition: winuser.h:2018
int WINAPI GetWindowTextLengthW(_In_ HWND)
#define CreateWindowW(a, b, c, d, e, f, g, h, i, j, k)
Definition: winuser.h:4316
BOOL WINAPI SystemParametersInfoW(_In_ UINT uiAction, _In_ UINT uiParam, _Inout_opt_ PVOID pvParam, _In_ UINT fWinIni)
#define WM_CHAR
Definition: winuser.h:1717
#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:2224
#define VK_RIGHT
Definition: winuser.h:2226
#define GWLP_ID
Definition: winuser.h:860
#define WM_USER
Definition: winuser.h:1895
#define WM_DESTROY
Definition: winuser.h:1609
BOOL WINAPI UnregisterClassW(_In_ LPCWSTR, HINSTANCE)
#define WM_KEYDOWN
Definition: winuser.h:1715
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
Definition: winuser.h:2906
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)
#define SetWindowLongPtrW
Definition: winuser.h:5355
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:852
#define WM_KILLFOCUS
Definition: winuser.h:1614
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define EN_CHANGE
Definition: winuser.h:2022
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
char CHAR
Definition: xmlstorage.h:175