ReactOS 0.4.15-dev-6073-g59e7458
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 FillRect (hdc, &rect, (HBRUSH)(DWORD_PTR)(bgCol+1));
183 }
184
185 SetBkColor (hdc, bgCol);
186 SetTextColor(hdc, fgCol);
187
188 for (i = 0; i < 3; i++) {
189 GetWindowRect (infoPtr->Part[i].EditHwnd, &rcPart);
190 MapWindowPoints( 0, infoPtr->Self, (POINT *)&rcPart, 2 );
191 rect.left = rcPart.right;
192 GetWindowRect (infoPtr->Part[i+1].EditHwnd, &rcPart);
193 MapWindowPoints( 0, infoPtr->Self, (POINT *)&rcPart, 2 );
194 rect.right = rcPart.left;
195
196 if (theme)
198 else
200 }
201
202 if (theme)
203 CloseThemeData(theme);
204
205 return 0;
206}
207
208
210{
211 IPADDRESS_INFO *infoPtr;
212 RECT rcClient, edit;
213 int i, fieldsize;
214 HFONT hFont, hSysFont;
215 LOGFONTW logFont, logSysFont;
216
217 TRACE("\n");
218
221
222 infoPtr = heap_alloc_zero (sizeof(*infoPtr));
223 if (!infoPtr) return -1;
224 SetWindowLongPtrW (hwnd, 0, (DWORD_PTR)infoPtr);
225
226 GetClientRect (hwnd, &rcClient);
227
228 fieldsize = (rcClient.right - rcClient.left) / 4;
229
230 edit.top = rcClient.top + 2;
231 edit.bottom = rcClient.bottom - 2;
232
233 infoPtr->Self = hwnd;
234 infoPtr->Enabled = TRUE;
235 infoPtr->Notify = lpCreate->hwndParent;
236
237 hSysFont = GetStockObject(ANSI_VAR_FONT);
238 GetObjectW(hSysFont, sizeof(LOGFONTW), &logSysFont);
240 strcpyW(logFont.lfFaceName, logSysFont.lfFaceName);
241 hFont = CreateFontIndirectW(&logFont);
242
243 for (i = 0; i < 4; i++) {
244 IPPART_INFO* part = &infoPtr->Part[i];
245
246 part->LowerLimit = 0;
247 part->UpperLimit = 255;
248 edit.left = rcClient.left + i*fieldsize + 6;
249 edit.right = rcClient.left + (i+1)*fieldsize - 2;
250 part->EditHwnd =
252 edit.left, edit.top, edit.right - edit.left,
253 edit.bottom - edit.top, hwnd, (HMENU) 1,
257 part->OrigProc = (WNDPROC)
260 EnableWindow(part->EditHwnd, infoPtr->Enabled);
261 }
262
263 IPADDRESS_UpdateText (infoPtr);
264
265 return 0;
266}
267
268
270{
271 int i;
272
273 TRACE("\n");
274
275 for (i = 0; i < 4; i++) {
276 IPPART_INFO* part = &infoPtr->Part[i];
278 }
279
280 SetWindowLongPtrW (infoPtr->Self, 0, 0);
281 heap_free (infoPtr);
282 return 0;
283}
284
285
287{
288 int i;
289
290 infoPtr->Enabled = enabled;
291
292 for (i = 0; i < 4; i++)
293 EnableWindow(infoPtr->Part[i].EditHwnd, enabled);
294
295 InvalidateRgn(infoPtr->Self, NULL, FALSE);
296 return 0;
297}
298
299
301{
302 PAINTSTRUCT ps;
303
304 TRACE("\n");
305
306 if (hdc) return IPADDRESS_Draw (infoPtr, hdc);
307
308 hdc = BeginPaint (infoPtr->Self, &ps);
309 IPADDRESS_Draw (infoPtr, hdc);
310 EndPaint (infoPtr->Self, &ps);
311 return 0;
312}
313
314
315static BOOL IPADDRESS_IsBlank (const IPADDRESS_INFO *infoPtr)
316{
317 int i;
318
319 TRACE("\n");
320
321 for (i = 0; i < 4; i++)
322 if (GetWindowTextLengthW (infoPtr->Part[i].EditHwnd)) return FALSE;
323
324 return TRUE;
325}
326
327
328static int IPADDRESS_GetAddress (const IPADDRESS_INFO *infoPtr, LPDWORD ip_address)
329{
330 WCHAR field[5];
331 int i, invalid = 0;
332 DWORD ip_addr = 0;
333
334 TRACE("\n");
335
336 for (i = 0; i < 4; i++) {
337 ip_addr *= 256;
338 if (GetWindowTextW (infoPtr->Part[i].EditHwnd, field, 4))
339 ip_addr += atolW(field);
340 else
341 invalid++;
342 }
343 *ip_address = ip_addr;
344
345 return 4 - invalid;
346}
347
348
350{
351 TRACE("\n");
352
353 if ( (index < 0) || (index > 3) ) return FALSE;
354
355 infoPtr->Part[index].LowerLimit = range & 0xFF;
356 infoPtr->Part[index].UpperLimit = (range >> 8) & 0xFF;
357
358 return TRUE;
359}
360
361
362static void IPADDRESS_ClearAddress (const IPADDRESS_INFO *infoPtr)
363{
364 static const WCHAR nil[] = { 0 };
365 int i;
366
367 TRACE("\n");
368
369 for (i = 0; i < 4; i++)
370 SetWindowTextW (infoPtr->Part[i].EditHwnd, nil);
371}
372
373
374static LRESULT IPADDRESS_SetAddress (const IPADDRESS_INFO *infoPtr, DWORD ip_address)
375{
376 WCHAR buf[20];
377 static const WCHAR fmt[] = { '%', 'd', 0 };
378 int i;
379
380 TRACE("\n");
381
382 for (i = 3; i >= 0; i--) {
383 const IPPART_INFO* part = &infoPtr->Part[i];
384 int value = ip_address & 0xff;
385 if ( (value >= part->LowerLimit) && (value <= part->UpperLimit) ) {
387 SetWindowTextW (part->EditHwnd, buf);
388 IPADDRESS_Notify (infoPtr, EN_CHANGE);
389 }
390 ip_address >>= 8;
391 }
392
393 return TRUE;
394}
395
396
398{
399 TRACE("(index=%d)\n", index);
400
401 if (index > 3 || index < 0) index=0;
402
403 SetFocus (infoPtr->Part[index].EditHwnd);
404}
405
406
407static BOOL IPADDRESS_ConstrainField (const IPADDRESS_INFO *infoPtr, int currentfield)
408{
409 static const WCHAR fmt[] = { '%', 'd', 0 };
410 const IPPART_INFO *part;
411 int curValue, newValue;
412 WCHAR field[10];
413
414 TRACE("(currentfield=%d)\n", currentfield);
415
416 if (currentfield < 0 || currentfield > 3) return FALSE;
417
418 part = &infoPtr->Part[currentfield];
419 if (!GetWindowTextW (part->EditHwnd, field, 4)) return FALSE;
420
421 curValue = atoiW(field);
422 TRACE(" curValue=%d\n", curValue);
423
424 newValue = IPADDRESS_IPNotify(infoPtr, currentfield, curValue);
425 TRACE(" newValue=%d\n", newValue);
426
427 if (newValue < part->LowerLimit) newValue = part->LowerLimit;
428 if (newValue > part->UpperLimit) newValue = part->UpperLimit;
429
430 if (newValue == curValue) return FALSE;
431
432 wsprintfW (field, fmt, newValue);
433 TRACE(" field=%s\n", debugstr_w(field));
434 return SetWindowTextW (part->EditHwnd, field);
435}
436
437
438static BOOL IPADDRESS_GotoNextField (const IPADDRESS_INFO *infoPtr, int cur, int sel)
439{
440 TRACE("\n");
441
442 if(cur >= -1 && cur < 4) {
444
445 if(cur < 3) {
446 const IPPART_INFO *next = &infoPtr->Part[cur + 1];
447 int start = 0, end = 0;
448 SetFocus (next->EditHwnd);
449 if (sel != POS_DEFAULT) {
450 if (sel == POS_RIGHT)
451 start = end = GetWindowTextLengthW(next->EditHwnd);
452 else if (sel == POS_SELALL)
453 end = -1;
454 SendMessageW(next->EditHwnd, EM_SETSEL, start, end);
455 }
456 return TRUE;
457 }
458
459 }
460 return FALSE;
461}
462
463
464/*
465 * period: move and select the text in the next field to the right if
466 * the current field is not empty(l!=0), we are not in the
467 * left most position, and nothing is selected(startsel==endsel)
468 *
469 * spacebar: same behavior as period
470 *
471 * alpha characters: completely ignored
472 *
473 * digits: accepted when field text length < 2 ignored otherwise.
474 * when 3 numbers have been entered into the field the value
475 * of the field is checked, if the field value exceeds the
476 * maximum value and is changed the field remains the current
477 * field, otherwise focus moves to the field to the right
478 *
479 * tab: change focus from the current ipaddress control to the next
480 * control in the tab order
481 *
482 * right arrow: move to the field on the right to the left most
483 * position in that field if no text is selected,
484 * we are in the right most position in the field,
485 * we are not in the right most field
486 *
487 * left arrow: move to the field on the left to the right most
488 * position in that field if no text is selected,
489 * we are in the left most position in the current field
490 * and we are not in the left most field
491 *
492 * backspace: delete the character to the left of the cursor position,
493 * if none are present move to the field on the left if
494 * we are not in the left most field and delete the right
495 * most digit in that field while keeping the cursor
496 * on the right side of the field
497 */
500{
502 IPADDRESS_INFO *infoPtr = (IPADDRESS_INFO *)GetWindowLongPtrW (Self, 0);
503 CHAR c = (CHAR)wParam;
504 INT index, len = 0, startsel, endsel;
505 IPPART_INFO *part;
506
507 TRACE("(hwnd=%p msg=0x%x wparam=0x%lx lparam=0x%lx)\n", hwnd, uMsg, wParam, lParam);
508
509 if ( (index = IPADDRESS_GetPartIndex(infoPtr, hwnd)) < 0) return 0;
510 part = &infoPtr->Part[index];
511
512 if (uMsg == WM_CHAR || uMsg == WM_KEYDOWN) {
514 SendMessageW(hwnd, EM_GETSEL, (WPARAM)&startsel, (LPARAM)&endsel);
515 }
516 switch (uMsg) {
517 case WM_CHAR:
518 if(isdigit(c)) {
519 if(len == 2 && startsel==endsel && endsel==len) {
520 /* process the digit press before we check the field */
521 int return_val = CallWindowProcW (part->OrigProc, hwnd, uMsg, wParam, lParam);
522
523 /* if the field value was changed stay at the current field */
524 if(!IPADDRESS_ConstrainField(infoPtr, index))
526
527 return return_val;
528 } else if (len == 3 && startsel==endsel && endsel==len)
530 else if (len < 3 || startsel != endsel) break;
531 } else if(c == '.' || c == ' ') {
532 if(len && startsel==endsel && startsel != 0) {
534 }
535 } else if (c == VK_BACK) break;
536 return 0;
537
538 case WM_KEYDOWN:
539 switch(c) {
540 case VK_RIGHT:
541 if(startsel==endsel && startsel==len) {
543 return 0;
544 }
545 break;
546 case VK_LEFT:
547 if(startsel==0 && startsel==endsel && index > 0) {
549 return 0;
550 }
551 break;
552 case VK_BACK:
553 if(startsel==endsel && startsel==0 && index > 0) {
554 IPPART_INFO *prev = &infoPtr->Part[index-1];
555 WCHAR val[10];
556
557 if(GetWindowTextW(prev->EditHwnd, val, 5)) {
558 val[lstrlenW(val) - 1] = 0;
560 }
561
563 return 0;
564 }
565 break;
566 }
567 break;
568 case WM_KILLFOCUS:
569 if (IPADDRESS_GetPartIndex(infoPtr, (HWND)wParam) < 0)
571 break;
572 case WM_SETFOCUS:
573 if (IPADDRESS_GetPartIndex(infoPtr, (HWND)wParam) < 0)
575 break;
576 }
577 return CallWindowProcW (part->OrigProc, hwnd, uMsg, wParam, lParam);
578}
579
580
581static LRESULT WINAPI
583{
585
586 TRACE("(hwnd=%p msg=0x%x wparam=0x%lx lparam=0x%lx)\n", hwnd, uMsg, wParam, lParam);
587
588 if (!infoPtr && (uMsg != WM_CREATE))
589 return DefWindowProcW (hwnd, uMsg, wParam, lParam);
590
591 switch (uMsg)
592 {
593 case WM_CREATE:
595
596 case WM_DESTROY:
597 return IPADDRESS_Destroy (infoPtr);
598
599 case WM_ENABLE:
600 return IPADDRESS_Enable (infoPtr, (BOOL)wParam);
601
602 case WM_PAINT:
603 return IPADDRESS_Paint (infoPtr, (HDC)wParam);
604
605#ifdef __REACTOS__
606 case WM_SETFOCUS:
608 return 0;
609#endif
610 case WM_COMMAND:
611 switch(wParam >> 16) {
612 case EN_CHANGE:
613 IPADDRESS_UpdateText(infoPtr);
614 IPADDRESS_Notify(infoPtr, EN_CHANGE);
615 break;
616 case EN_KILLFOCUS:
618 break;
619 }
620 break;
621
624 return 0;
625
626 case IPM_CLEARADDRESS:
627 IPADDRESS_ClearAddress (infoPtr);
628 break;
629
630 case IPM_SETADDRESS:
631 return IPADDRESS_SetAddress (infoPtr, (DWORD)lParam);
632
633 case IPM_GETADDRESS:
634 return IPADDRESS_GetAddress (infoPtr, (LPDWORD)lParam);
635
636 case IPM_SETRANGE:
637 return IPADDRESS_SetRange (infoPtr, (int)wParam, (WORD)lParam);
638
639 case IPM_SETFOCUS:
640 IPADDRESS_SetFocusToField (infoPtr, (int)wParam);
641 break;
642
643 case IPM_ISBLANK:
644 return IPADDRESS_IsBlank (infoPtr);
645
646 default:
647 if ((uMsg >= WM_USER) && (uMsg < WM_APP) && !COMCTL32_IsReflectedMessage(uMsg))
648 ERR("unknown msg %04x wp=%08lx lp=%08lx\n", uMsg, wParam, lParam);
649 return DefWindowProcW (hwnd, uMsg, wParam, lParam);
650 }
651 return 0;
652}
653
654
656{
657 WNDCLASSW wndClass;
658
659 ZeroMemory (&wndClass, sizeof(WNDCLASSW));
662 wndClass.cbClsExtra = 0;
663 wndClass.cbWndExtra = sizeof(IPADDRESS_INFO *);
664 wndClass.hCursor = LoadCursorW (0, (LPWSTR)IDC_IBEAM);
665 wndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
666 wndClass.lpszClassName = WC_IPADDRESSW;
667
668 RegisterClassW (&wndClass);
669}
670
671
673{
675}
#define isdigit(c)
Definition: acclib.h:68
static int state
Definition: maze.c:121
static BOOL heap_free(void *mem)
Definition: appwiz.h:75
#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:110
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:209
void IPADDRESS_Register(void)
Definition: ipaddress.c:655
#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:582
static LRESULT CALLBACK IPADDRESS_SubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: ipaddress.c:499
void IPADDRESS_Unregister(void)
Definition: ipaddress.c:672
#define POS_DEFAULT
Definition: ipaddress.c:66
static BOOL IPADDRESS_SetRange(IPADDRESS_INFO *infoPtr, int index, WORD range)
Definition: ipaddress.c:349
static BOOL IPADDRESS_GotoNextField(const IPADDRESS_INFO *infoPtr, int cur, int sel)
Definition: ipaddress.c:438
#define POS_LEFT
Definition: ipaddress.c:67
static BOOL IPADDRESS_ConstrainField(const IPADDRESS_INFO *infoPtr, int currentfield)
Definition: ipaddress.c:407
static LRESULT IPADDRESS_SetAddress(const IPADDRESS_INFO *infoPtr, DWORD ip_address)
Definition: ipaddress.c:374
#define POS_SELALL
Definition: ipaddress.c:69
static int IPADDRESS_GetAddress(const IPADDRESS_INFO *infoPtr, LPDWORD ip_address)
Definition: ipaddress.c:328
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:300
static const WCHAR IP_SUBCLASS_PROP[]
Definition: ipaddress.c:63
static LRESULT IPADDRESS_Enable(IPADDRESS_INFO *infoPtr, BOOL enabled)
Definition: ipaddress.c:286
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:397
static void IPADDRESS_ClearAddress(const IPADDRESS_INFO *infoPtr)
Definition: ipaddress.c:362
static LRESULT IPADDRESS_Destroy(IPADDRESS_INFO *infoPtr)
Definition: ipaddress.c:269
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:315
#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
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:60
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:54
#define atolW(s)
Definition: unicode.h:55
#define strcatW(d, s)
Definition: unicode.h:30
#define strcpyW(d, s)
Definition: unicode.h:29
#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:3175
HBRUSH hbrBackground
Definition: winuser.h:3173
int cbClsExtra
Definition: winuser.h:3168
UINT style
Definition: winuser.h:3166
WNDPROC lpfnWndProc
Definition: winuser.h:3167
int cbWndExtra
Definition: winuser.h:3169
HCURSOR hCursor
Definition: winuser.h:3172
Definition: parser.c:44
Definition: dsound.c:943
Definition: dhcpd.h:62
UINT_PTR idFrom
Definition: winuser.h:3148
UINT code
Definition: winuser.h:3149
HWND hwndFrom
Definition: winuser.h:3147
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:1670
_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
#define WM_PAINT
Definition: winuser.h:1610
HWND WINAPI GetFocus(void)
Definition: window.c:1894
#define CS_VREDRAW
Definition: winuser.h:653
#define MAKEWPARAM(l, h)
Definition: winuser.h:3999
#define GetWindowLongPtrW
Definition: winuser.h:4819
#define WM_ENABLE
Definition: winuser.h:1605
#define EDGE_SUNKEN
Definition: winuser.h:451
#define EN_KILLFOCUS
Definition: winuser.h:2015
#define COLOR_WINDOW
Definition: winuser.h:912
#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:1598
int WINAPIV wsprintfW(_Out_ LPWSTR, _In_ _Printf_format_string_ LPCWSTR,...)
#define EM_GETSEL
Definition: winuser.h:1987
#define EN_SETFOCUS
Definition: winuser.h:2017
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:1730
#define CS_HREDRAW
Definition: winuser.h:648
ATOM WINAPI RegisterClassW(_In_ CONST WNDCLASSW *)
#define BF_ADJUST
Definition: winuser.h:470
#define WM_SETFOCUS
Definition: winuser.h:1603
#define CS_DBLCLKS
Definition: winuser.h:646
#define SPI_GETICONTITLELOGFONT
Definition: winuser.h:1370
#define WM_SYSCOLORCHANGE
Definition: winuser.h:1616
HCURSOR WINAPI LoadCursorW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2074
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:850
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:1640
BOOL WINAPI EndPaint(_In_ HWND, _In_ const PAINTSTRUCT *)
BOOL WINAPI SetPropW(_In_ HWND, _In_ LPCWSTR, _In_opt_ HANDLE)
#define IDC_IBEAM
Definition: winuser.h:683
BOOL WINAPI EnableWindow(_In_ HWND, _In_ BOOL)
#define VK_BACK
Definition: winuser.h:2188
BOOL WINAPI InvalidateRgn(_In_ HWND, _In_opt_ HRGN, _In_ BOOL)
#define EM_SETSEL
Definition: winuser.h:2008
int WINAPI GetWindowTextLengthW(_In_ HWND)
#define CreateWindowW(a, b, c, d, e, f, g, h, i, j, k)
Definition: winuser.h:4306
BOOL WINAPI SystemParametersInfoW(_In_ UINT uiAction, _In_ UINT uiParam, _Inout_opt_ PVOID pvParam, _In_ UINT fWinIni)
#define WM_CHAR
Definition: winuser.h:1707
#define DT_BOTTOM
Definition: winuser.h:525
HANDLE WINAPI GetPropW(_In_ HWND, _In_ LPCWSTR)
#define CS_GLOBALCLASS
Definition: winuser.h:647
#define VK_LEFT
Definition: winuser.h:2214
#define VK_RIGHT
Definition: winuser.h:2216
#define GWLP_ID
Definition: winuser.h:854
#define WM_USER
Definition: winuser.h:1885
#define WM_DESTROY
Definition: winuser.h:1599
BOOL WINAPI UnregisterClassW(_In_ LPCWSTR, HINSTANCE)
#define WM_KEYDOWN
Definition: winuser.h:1705
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
Definition: winuser.h:2896
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)
#define SetWindowLongPtrW
Definition: winuser.h:5336
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:846
#define WM_KILLFOCUS
Definition: winuser.h:1604
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define EN_CHANGE
Definition: winuser.h:2012
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
char CHAR
Definition: xmlstorage.h:175