ReactOS 0.4.15-dev-7659-ga55345b
ipaddress.c File Reference
#include <ctype.h>
#include <stdlib.h>
#include <stdarg.h>
#include <stdio.h>
#include <string.h>
#include "windef.h"
#include "winbase.h"
#include "wingdi.h"
#include "winuser.h"
#include "winnls.h"
#include "commctrl.h"
#include "comctl32.h"
#include "uxtheme.h"
#include "vsstyle.h"
#include "vssym32.h"
#include "wine/unicode.h"
#include "wine/debug.h"
#include "wine/heap.h"
Include dependency graph for ipaddress.c:

Go to the source code of this file.

Classes

struct  IPPART_INFO
 
struct  IPADDRESS_INFO
 

Macros

#define POS_DEFAULT   0
 
#define POS_LEFT   1
 
#define POS_RIGHT   2
 
#define POS_SELALL   3
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (ipaddress)
 
static LRESULT CALLBACK IPADDRESS_SubclassProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
static void IPADDRESS_UpdateText (const IPADDRESS_INFO *infoPtr)
 
static LRESULT IPADDRESS_Notify (const IPADDRESS_INFO *infoPtr, UINT command)
 
static INT IPADDRESS_IPNotify (const IPADDRESS_INFO *infoPtr, INT field, INT value)
 
static int IPADDRESS_GetPartIndex (const IPADDRESS_INFO *infoPtr, HWND hwnd)
 
static LRESULT IPADDRESS_Draw (const IPADDRESS_INFO *infoPtr, HDC hdc)
 
static LRESULT IPADDRESS_Create (HWND hwnd, const CREATESTRUCTA *lpCreate)
 
static LRESULT IPADDRESS_Destroy (IPADDRESS_INFO *infoPtr)
 
static LRESULT IPADDRESS_Enable (IPADDRESS_INFO *infoPtr, BOOL enabled)
 
static LRESULT IPADDRESS_Paint (const IPADDRESS_INFO *infoPtr, HDC hdc)
 
static BOOL IPADDRESS_IsBlank (const IPADDRESS_INFO *infoPtr)
 
static int IPADDRESS_GetAddress (const IPADDRESS_INFO *infoPtr, LPDWORD ip_address)
 
static BOOL IPADDRESS_SetRange (IPADDRESS_INFO *infoPtr, int index, WORD range)
 
static void IPADDRESS_ClearAddress (const IPADDRESS_INFO *infoPtr)
 
static LRESULT IPADDRESS_SetAddress (const IPADDRESS_INFO *infoPtr, DWORD ip_address)
 
static void IPADDRESS_SetFocusToField (const IPADDRESS_INFO *infoPtr, INT index)
 
static BOOL IPADDRESS_ConstrainField (const IPADDRESS_INFO *infoPtr, int currentfield)
 
static BOOL IPADDRESS_GotoNextField (const IPADDRESS_INFO *infoPtr, int cur, int sel)
 
static LRESULT WINAPI IPADDRESS_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
void IPADDRESS_Register (void)
 
void IPADDRESS_Unregister (void)
 

Variables

static const WCHAR IP_SUBCLASS_PROP []
 

Macro Definition Documentation

◆ POS_DEFAULT

#define POS_DEFAULT   0

Definition at line 66 of file ipaddress.c.

◆ POS_LEFT

#define POS_LEFT   1

Definition at line 67 of file ipaddress.c.

◆ POS_RIGHT

#define POS_RIGHT   2

Definition at line 68 of file ipaddress.c.

◆ POS_SELALL

#define POS_SELALL   3

Definition at line 69 of file ipaddress.c.

Function Documentation

◆ IPADDRESS_ClearAddress()

static void IPADDRESS_ClearAddress ( const IPADDRESS_INFO infoPtr)
static

Definition at line 370 of file ipaddress.c.

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}
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 nil
Definition: compat.h:23
#define TRACE(s)
Definition: solgame.cpp:4
IPPART_INFO Part[4]
Definition: ipaddress.c:60
HWND EditHwnd
Definition: ipaddress.c:49
BOOL WINAPI SetWindowTextW(_In_ HWND, _In_opt_ LPCWSTR)
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by IPADDRESS_WindowProc().

◆ IPADDRESS_ConstrainField()

static BOOL IPADDRESS_ConstrainField ( const IPADDRESS_INFO infoPtr,
int  currentfield 
)
static

Definition at line 415 of file ipaddress.c.

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}
#define FALSE
Definition: types.h:117
static INT IPADDRESS_IPNotify(const IPADDRESS_INFO *infoPtr, INT field, INT value)
Definition: ipaddress.c:107
#define debugstr_w
Definition: kernel32.h:32
#define atoiW(s)
Definition: unicode.h:54
INT UpperLimit
Definition: ipaddress.c:51
INT LowerLimit
Definition: ipaddress.c:50
Definition: parser.c:44
Definition: dsound.c:943
int WINAPI GetWindowTextW(HWND hWnd, LPWSTR lpString, int nMaxCount)
Definition: window.c:1412
int WINAPIV wsprintfW(_Out_ LPWSTR, _In_ _Printf_format_string_ LPCWSTR,...)

Referenced by IPADDRESS_GotoNextField(), IPADDRESS_SubclassProc(), and IPADDRESS_WindowProc().

◆ IPADDRESS_Create()

static LRESULT IPADDRESS_Create ( HWND  hwnd,
const CREATESTRUCTA lpCreate 
)
static

Definition at line 217 of file ipaddress.c.

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}
HFONT hFont
Definition: main.c:53
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
static LRESULT CALLBACK IPADDRESS_SubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: ipaddress.c:507
static const WCHAR IP_SUBCLASS_PROP[]
Definition: ipaddress.c:63
static void IPADDRESS_UpdateText(const IPADDRESS_INFO *infoPtr)
Definition: ipaddress.c:74
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:63
#define WS_CHILD
Definition: pedump.c:617
#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 strcpyW(d, s)
Definition: unicode.h:29
WNDPROC OrigProc
Definition: ipaddress.c:52
WCHAR lfFaceName[LF_FACESIZE]
Definition: dimm.idl:72
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
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
UINT_PTR WPARAM
Definition: windef.h:207
HGDIOBJ WINAPI GetStockObject(_In_ int)
int WINAPI GetObjectW(_In_ HANDLE h, _In_ int c, _Out_writes_bytes_opt_(c) LPVOID pv)
#define ANSI_VAR_FONT
Definition: wingdi.h:907
HFONT WINAPI CreateFontIndirectW(_In_ const LOGFONTW *)
#define GetWindowLongPtrW
Definition: winuser.h:4828
LONG WINAPI SetWindowLongW(_In_ HWND, _In_ int, _In_ LONG)
LONG WINAPI GetWindowLongW(_In_ HWND, _In_ int)
#define SPI_GETICONTITLELOGFONT
Definition: winuser.h:1379
#define GWLP_HINSTANCE
Definition: winuser.h:855
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define WM_SETFONT
Definition: winuser.h:1649
BOOL WINAPI SetPropW(_In_ HWND, _In_ LPCWSTR, _In_opt_ HANDLE)
BOOL WINAPI EnableWindow(_In_ HWND, _In_ BOOL)
#define CreateWindowW(a, b, c, d, e, f, g, h, i, j, k)
Definition: winuser.h:4315
BOOL WINAPI SystemParametersInfoW(_In_ UINT uiAction, _In_ UINT uiParam, _Inout_opt_ PVOID pvParam, _In_ UINT fWinIni)
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
Definition: winuser.h:2905
#define SetWindowLongPtrW
Definition: winuser.h:5345
#define GWL_STYLE
Definition: winuser.h:851
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)

Referenced by IPADDRESS_WindowProc().

◆ IPADDRESS_Destroy()

static LRESULT IPADDRESS_Destroy ( IPADDRESS_INFO infoPtr)
static

Definition at line 277 of file ipaddress.c.

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}
static BOOL heap_free(void *mem)
Definition: appwiz.h:76

Referenced by IPADDRESS_WindowProc().

◆ IPADDRESS_Draw()

static LRESULT IPADDRESS_Draw ( const IPADDRESS_INFO infoPtr,
HDC  hdc 
)
static

Definition at line 142 of file ipaddress.c.

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}
static int state
Definition: maze.c:121
COMCTL32_SysColor comctl32_color
Definition: commctrl.c:82
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
unsigned long DWORD
Definition: ntddk_ex.h:95
pKey DeleteObject()
HDC hdc
Definition: main.c:9
static const WCHAR dotW[]
Definition: directory.c:80
static HTHEME(WINAPI *pOpenThemeDataEx)(HWND
INT WINAPI DrawTextW(HDC hdc, LPCWSTR str, INT count, LPRECT rect, UINT flags)
Definition: defwnd.c:16
#define ES_READONLY
Definition: pedump.c:675
& 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
@ 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
DWORD COLORREF
Definition: windef.h:300
COLORREF WINAPI SetBkColor(_In_ HDC, _In_ COLORREF)
Definition: dc.c:999
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)
COLORREF WINAPI SetTextColor(_In_ HDC, _In_ COLORREF)
Definition: text.c:918
HBRUSH WINAPI CreateSolidBrush(_In_ COLORREF)
HWND WINAPI GetFocus(void)
Definition: window.c:1893
#define EDGE_SUNKEN
Definition: winuser.h:451
#define DT_CENTER
Definition: winuser.h:527
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
#define DT_SINGLELINE
Definition: winuser.h:540
#define BF_ADJUST
Definition: winuser.h:470
int WINAPI MapWindowPoints(_In_opt_ HWND hWndFrom, _In_opt_ HWND hWndTo, _Inout_updates_(cPoints) LPPOINT lpPoints, _In_ UINT cPoints)
BOOL WINAPI DrawEdge(_In_ HDC, _Inout_ LPRECT, _In_ UINT, _In_ UINT)
#define DT_BOTTOM
Definition: winuser.h:525
#define BF_RECT
Definition: winuser.h:462

Referenced by IPADDRESS_Paint().

◆ IPADDRESS_Enable()

static LRESULT IPADDRESS_Enable ( IPADDRESS_INFO infoPtr,
BOOL  enabled 
)
static

Definition at line 294 of file ipaddress.c.

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}
GLenum GLenum GLsizei const GLuint GLboolean enabled
Definition: glext.h:7750
BOOL WINAPI InvalidateRgn(_In_ HWND, _In_opt_ HRGN, _In_ BOOL)

Referenced by IPADDRESS_WindowProc().

◆ IPADDRESS_GetAddress()

static int IPADDRESS_GetAddress ( const IPADDRESS_INFO infoPtr,
LPDWORD  ip_address 
)
static

Definition at line 336 of file ipaddress.c.

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}
static const WCHAR invalid[]
Definition: assoc.c:39
#define atolW(s)
Definition: unicode.h:55

Referenced by IPADDRESS_WindowProc().

◆ IPADDRESS_GetPartIndex()

static int IPADDRESS_GetPartIndex ( const IPADDRESS_INFO infoPtr,
HWND  hwnd 
)
static

Definition at line 128 of file ipaddress.c.

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}
#define ERR(fmt,...)
Definition: debug.h:110

Referenced by IPADDRESS_SubclassProc(), and IPADDRESS_WindowProc().

◆ IPADDRESS_GotoNextField()

static BOOL IPADDRESS_GotoNextField ( const IPADDRESS_INFO infoPtr,
int  cur,
int  sel 
)
static

Definition at line 446 of file ipaddress.c.

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}
#define POS_RIGHT
Definition: ipaddress.c:68
#define POS_DEFAULT
Definition: ipaddress.c:66
static BOOL IPADDRESS_ConstrainField(const IPADDRESS_INFO *infoPtr, int currentfield)
Definition: ipaddress.c:415
#define POS_SELALL
Definition: ipaddress.c:69
FxCollectionEntry * cur
GLuint start
Definition: gl.h:1545
GLuint GLuint end
Definition: gl.h:1545
static unsigned __int64 next
Definition: rand_nt.c:6
HWND WINAPI SetFocus(_In_opt_ HWND)
#define EM_SETSEL
Definition: winuser.h:2017
int WINAPI GetWindowTextLengthW(_In_ HWND)

Referenced by IPADDRESS_SubclassProc(), and IPADDRESS_WindowProc().

◆ IPADDRESS_IPNotify()

static INT IPADDRESS_IPNotify ( const IPADDRESS_INFO infoPtr,
INT  field,
INT  value 
)
static

Definition at line 107 of file ipaddress.c.

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}
#define IPN_FIELDCHANGED
Definition: commctrl.h:4477
#define WM_NOTIFY
Definition: richedit.h:61
UINT_PTR idFrom
Definition: winuser.h:3157
UINT code
Definition: winuser.h:3158
HWND hwndFrom
Definition: winuser.h:3156
Definition: pdh_main.c:94
LONG_PTR LPARAM
Definition: windef.h:208
#define GWLP_ID
Definition: winuser.h:859

Referenced by IPADDRESS_ConstrainField().

◆ IPADDRESS_IsBlank()

static BOOL IPADDRESS_IsBlank ( const IPADDRESS_INFO infoPtr)
static

Definition at line 323 of file ipaddress.c.

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}

Referenced by IPADDRESS_WindowProc().

◆ IPADDRESS_Notify()

static LRESULT IPADDRESS_Notify ( const IPADDRESS_INFO infoPtr,
UINT  command 
)
static

Definition at line 97 of file ipaddress.c.

98{
99 HWND hwnd = infoPtr->Self;
100
101 TRACE("(command=%x)\n", command);
102
103 return SendMessageW (infoPtr->Notify, WM_COMMAND,
105}
#define MAKEWPARAM(l, h)
Definition: winuser.h:4008
#define WM_COMMAND
Definition: winuser.h:1739

Referenced by IPADDRESS_SetAddress(), IPADDRESS_SubclassProc(), and IPADDRESS_WindowProc().

◆ IPADDRESS_Paint()

static LRESULT IPADDRESS_Paint ( const IPADDRESS_INFO infoPtr,
HDC  hdc 
)
static

Definition at line 308 of file ipaddress.c.

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}
static LRESULT IPADDRESS_Draw(const IPADDRESS_INFO *infoPtr, HDC hdc)
Definition: ipaddress.c:142
BOOL WINAPI EndPaint(_In_ HWND, _In_ const PAINTSTRUCT *)
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)

Referenced by IPADDRESS_WindowProc().

◆ IPADDRESS_Register()

void IPADDRESS_Register ( void  )

Definition at line 663 of file ipaddress.c.

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}
static LRESULT WINAPI IPADDRESS_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: ipaddress.c:590
#define WC_IPADDRESSW
Definition: commctrl.h:4472
LPCWSTR lpszClassName
Definition: winuser.h:3184
HBRUSH hbrBackground
Definition: winuser.h:3182
int cbClsExtra
Definition: winuser.h:3177
UINT style
Definition: winuser.h:3175
WNDPROC lpfnWndProc
Definition: winuser.h:3176
int cbWndExtra
Definition: winuser.h:3178
HCURSOR hCursor
Definition: winuser.h:3181
#define ZeroMemory
Definition: winbase.h:1712
#define CS_VREDRAW
Definition: winuser.h:658
#define COLOR_WINDOW
Definition: winuser.h:917
#define CS_HREDRAW
Definition: winuser.h:653
ATOM WINAPI RegisterClassW(_In_ CONST WNDCLASSW *)
#define CS_DBLCLKS
Definition: winuser.h:651
HCURSOR WINAPI LoadCursorW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2088
#define IDC_IBEAM
Definition: winuser.h:688
#define CS_GLOBALCLASS
Definition: winuser.h:652
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by DllMain().

◆ IPADDRESS_SetAddress()

static LRESULT IPADDRESS_SetAddress ( const IPADDRESS_INFO infoPtr,
DWORD  ip_address 
)
static

Definition at line 382 of file ipaddress.c.

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}
static LRESULT IPADDRESS_Notify(const IPADDRESS_INFO *infoPtr, UINT command)
Definition: ipaddress.c:97
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
#define EN_CHANGE
Definition: winuser.h:2021

Referenced by IPADDRESS_WindowProc().

◆ IPADDRESS_SetFocusToField()

static void IPADDRESS_SetFocusToField ( const IPADDRESS_INFO infoPtr,
INT  index 
)
static

Definition at line 405 of file ipaddress.c.

406{
407 TRACE("(index=%d)\n", index);
408
409 if (index > 3 || index < 0) index=0;
410
411 SetFocus (infoPtr->Part[index].EditHwnd);
412}
GLuint index
Definition: glext.h:6031

Referenced by IPADDRESS_WindowProc().

◆ IPADDRESS_SetRange()

static BOOL IPADDRESS_SetRange ( IPADDRESS_INFO infoPtr,
int  index,
WORD  range 
)
static

Definition at line 357 of file ipaddress.c.

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}
#define index(s, c)
Definition: various.h:29
GLenum GLint * range
Definition: glext.h:7539

Referenced by IPADDRESS_WindowProc().

◆ IPADDRESS_SubclassProc()

LRESULT CALLBACK IPADDRESS_SubclassProc ( HWND  hwnd,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 507 of file ipaddress.c.

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}
#define isdigit(c)
Definition: acclib.h:68
#define CHAR(Char)
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
static int IPADDRESS_GetPartIndex(const IPADDRESS_INFO *infoPtr, HWND hwnd)
Definition: ipaddress.c:128
static BOOL IPADDRESS_GotoNextField(const IPADDRESS_INFO *infoPtr, int cur, int sel)
Definition: ipaddress.c:446
#define POS_LEFT
Definition: ipaddress.c:67
#define lstrlenW
Definition: compat.h:750
const GLubyte * c
Definition: glext.h:8905
GLuint GLfloat * val
Definition: glext.h:7180
GLenum GLsizei len
Definition: glext.h:6722
int32_t INT
Definition: typedefs.h:58
#define EN_KILLFOCUS
Definition: winuser.h:2024
#define EM_GETSEL
Definition: winuser.h:1996
#define EN_SETFOCUS
Definition: winuser.h:2026
#define WM_SETFOCUS
Definition: winuser.h:1612
#define VK_BACK
Definition: winuser.h:2197
#define WM_CHAR
Definition: winuser.h:1716
HANDLE WINAPI GetPropW(_In_ HWND, _In_ LPCWSTR)
#define VK_LEFT
Definition: winuser.h:2223
#define VK_RIGHT
Definition: winuser.h:2225
#define WM_KEYDOWN
Definition: winuser.h:1714
LRESULT WINAPI CallWindowProcW(_In_ WNDPROC, _In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define WM_KILLFOCUS
Definition: winuser.h:1613
char CHAR
Definition: xmlstorage.h:175

Referenced by IPADDRESS_Create().

◆ IPADDRESS_Unregister()

void IPADDRESS_Unregister ( void  )

Definition at line 680 of file ipaddress.c.

681{
683}
BOOL WINAPI UnregisterClassW(_In_ LPCWSTR, HINSTANCE)

Referenced by DllMain().

◆ IPADDRESS_UpdateText()

static void IPADDRESS_UpdateText ( const IPADDRESS_INFO infoPtr)
static

Definition at line 74 of file ipaddress.c.

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}
#define strcatW(d, s)
Definition: unicode.h:30
int zero
Definition: sehframes.cpp:29
Definition: dhcpd.h:62

Referenced by IPADDRESS_Create(), and IPADDRESS_WindowProc().

◆ IPADDRESS_WindowProc()

static LRESULT WINAPI IPADDRESS_WindowProc ( HWND  hwnd,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 590 of file ipaddress.c.

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}
BOOL COMCTL32_IsReflectedMessage(UINT uMsg) DECLSPEC_HIDDEN
Definition: commctrl.c:1748
VOID COMCTL32_RefreshSysColors(void) DECLSPEC_HIDDEN
Definition: commctrl.c:1586
static LRESULT IPADDRESS_Create(HWND hwnd, const CREATESTRUCTA *lpCreate)
Definition: ipaddress.c:217
static BOOL IPADDRESS_SetRange(IPADDRESS_INFO *infoPtr, int index, WORD range)
Definition: ipaddress.c:357
static LRESULT IPADDRESS_SetAddress(const IPADDRESS_INFO *infoPtr, DWORD ip_address)
Definition: ipaddress.c:382
static int IPADDRESS_GetAddress(const IPADDRESS_INFO *infoPtr, LPDWORD ip_address)
Definition: ipaddress.c:336
static LRESULT IPADDRESS_Paint(const IPADDRESS_INFO *infoPtr, HDC hdc)
Definition: ipaddress.c:308
static LRESULT IPADDRESS_Enable(IPADDRESS_INFO *infoPtr, BOOL enabled)
Definition: ipaddress.c:294
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 BOOL IPADDRESS_IsBlank(const IPADDRESS_INFO *infoPtr)
Definition: ipaddress.c:323
#define WM_APP
Definition: eventvwr.h:73
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned short WORD
Definition: ntddk_ex.h:93
static HDC
Definition: imagelist.c:92
#define IPM_ISBLANK
Definition: commctrl.h:4470
#define IPM_SETFOCUS
Definition: commctrl.h:4469
#define IPM_SETADDRESS
Definition: commctrl.h:4466
#define IPM_CLEARADDRESS
Definition: commctrl.h:4465
#define IPM_GETADDRESS
Definition: commctrl.h:4467
#define IPM_SETRANGE
Definition: commctrl.h:4468
uint32_t * LPDWORD
Definition: typedefs.h:59
#define WM_PAINT
Definition: winuser.h:1619
#define WM_ENABLE
Definition: winuser.h:1614
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define WM_CREATE
Definition: winuser.h:1607
#define WM_SYSCOLORCHANGE
Definition: winuser.h:1625
#define WM_USER
Definition: winuser.h:1894
#define WM_DESTROY
Definition: winuser.h:1608

Referenced by IPADDRESS_Register().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( ipaddress  )

Variable Documentation

◆ IP_SUBCLASS_PROP

const WCHAR IP_SUBCLASS_PROP[]
static
Initial value:
=
{ 'C', 'C', 'I', 'P', '3', '2', 'S', 'u', 'b', 'c', 'l', 'a', 's', 's', 'I', 'n', 'f', 'o', 0 }

Definition at line 63 of file ipaddress.c.

Referenced by IPADDRESS_Create(), and IPADDRESS_SubclassProc().