ReactOS 0.4.16-dev-329-g9223134
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/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 65 of file ipaddress.c.

◆ POS_LEFT

#define POS_LEFT   1

Definition at line 66 of file ipaddress.c.

◆ POS_RIGHT

#define POS_RIGHT   2

Definition at line 67 of file ipaddress.c.

◆ POS_SELALL

#define POS_SELALL   3

Definition at line 68 of file ipaddress.c.

Function Documentation

◆ IPADDRESS_ClearAddress()

static void IPADDRESS_ClearAddress ( const IPADDRESS_INFO infoPtr)
static

Definition at line 369 of file ipaddress.c.

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}
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:59
HWND EditHwnd
Definition: ipaddress.c:48
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 414 of file ipaddress.c.

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}
#define NULL
Definition: types.h:112
#define FALSE
Definition: types.h:117
static INT IPADDRESS_IPNotify(const IPADDRESS_INFO *infoPtr, INT field, INT value)
Definition: ipaddress.c:106
_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
INT UpperLimit
Definition: ipaddress.c:50
INT LowerLimit
Definition: ipaddress.c:49
Definition: parser.c:44
Definition: dsound.c:943
int WINAPI GetWindowTextW(HWND hWnd, LPWSTR lpString, int nMaxCount)
Definition: window.c:1384
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 216 of file ipaddress.c.

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}
HFONT hFont
Definition: main.c:53
#define TRUE
Definition: types.h:120
static LRESULT CALLBACK IPADDRESS_SubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: ipaddress.c:506
static const WCHAR IP_SUBCLASS_PROP[]
Definition: ipaddress.c:62
static void IPADDRESS_UpdateText(const IPADDRESS_INFO *infoPtr)
Definition: ipaddress.c:73
#define lstrcpyW
Definition: compat.h:749
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:4692
WNDPROC OrigProc
Definition: ipaddress.c:51
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:4832
LONG WINAPI SetWindowLongW(_In_ HWND, _In_ int, _In_ LONG)
LONG WINAPI GetWindowLongW(_In_ HWND, _In_ int)
#define SPI_GETICONTITLELOGFONT
Definition: winuser.h:1383
#define GWLP_HINSTANCE
Definition: winuser.h:859
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define WM_SETFONT
Definition: winuser.h:1653
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:4319
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:2909
#define SetWindowLongPtrW
Definition: winuser.h:5358
#define GWL_STYLE
Definition: winuser.h:855
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 276 of file ipaddress.c.

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}
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 141 of file ipaddress.c.

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}
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: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: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:182
COLORREF clr3dFace
Definition: comctl32.h:181
COLORREF clrGrayText
Definition: comctl32.h:184
COLORREF clrWindowText
Definition: comctl32.h:183
@ 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:1865
#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 293 of file ipaddress.c.

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}
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 335 of file ipaddress.c.

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}
static const WCHAR invalid[]
Definition: assoc.c:39

Referenced by IPADDRESS_WindowProc().

◆ IPADDRESS_GetPartIndex()

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

Definition at line 127 of file ipaddress.c.

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

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 445 of file ipaddress.c.

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}
#define POS_RIGHT
Definition: ipaddress.c:67
#define POS_DEFAULT
Definition: ipaddress.c:65
static BOOL IPADDRESS_ConstrainField(const IPADDRESS_INFO *infoPtr, int currentfield)
Definition: ipaddress.c:414
#define POS_SELALL
Definition: ipaddress.c:68
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:2021
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 106 of file ipaddress.c.

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}
#define IPN_FIELDCHANGED
Definition: commctrl.h:4482
#define WM_NOTIFY
Definition: richedit.h:61
UINT_PTR idFrom
Definition: winuser.h:3161
UINT code
Definition: winuser.h:3162
HWND hwndFrom
Definition: winuser.h:3160
Definition: pdh_main.c:94
LONG_PTR LPARAM
Definition: windef.h:208
#define GWLP_ID
Definition: winuser.h:863

Referenced by IPADDRESS_ConstrainField().

◆ IPADDRESS_IsBlank()

static BOOL IPADDRESS_IsBlank ( const IPADDRESS_INFO infoPtr)
static

Definition at line 322 of file ipaddress.c.

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}

Referenced by IPADDRESS_WindowProc().

◆ IPADDRESS_Notify()

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

Definition at line 96 of file ipaddress.c.

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

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 307 of file ipaddress.c.

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}
static LRESULT IPADDRESS_Draw(const IPADDRESS_INFO *infoPtr, HDC hdc)
Definition: ipaddress.c:141
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 662 of file ipaddress.c.

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}
static LRESULT WINAPI IPADDRESS_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: ipaddress.c:589
#define WC_IPADDRESSW
Definition: commctrl.h:4477
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
#define ZeroMemory
Definition: winbase.h:1737
#define CS_VREDRAW
Definition: winuser.h:658
#define COLOR_WINDOW
Definition: winuser.h:921
#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:2157
#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 381 of file ipaddress.c.

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

Referenced by IPADDRESS_WindowProc().

◆ IPADDRESS_SetFocusToField()

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

Definition at line 404 of file ipaddress.c.

405{
406 TRACE("(index=%d)\n", index);
407
408 if (index > 3 || index < 0) index=0;
409
410 SetFocus (infoPtr->Part[index].EditHwnd);
411}
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 356 of file ipaddress.c.

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}
#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 506 of file ipaddress.c.

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}
#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:127
static BOOL IPADDRESS_GotoNextField(const IPADDRESS_INFO *infoPtr, int cur, int sel)
Definition: ipaddress.c:445
#define POS_LEFT
Definition: ipaddress.c:66
#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:2028
#define EM_GETSEL
Definition: winuser.h:2000
#define EN_SETFOCUS
Definition: winuser.h:2030
#define WM_SETFOCUS
Definition: winuser.h:1616
#define VK_BACK
Definition: winuser.h:2201
#define WM_CHAR
Definition: winuser.h:1720
HANDLE WINAPI GetPropW(_In_ HWND, _In_ LPCWSTR)
#define VK_LEFT
Definition: winuser.h:2227
#define VK_RIGHT
Definition: winuser.h:2229
#define WM_KEYDOWN
Definition: winuser.h:1718
LRESULT WINAPI CallWindowProcW(_In_ WNDPROC, _In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define WM_KILLFOCUS
Definition: winuser.h:1617
char CHAR
Definition: xmlstorage.h:175

Referenced by IPADDRESS_Create().

◆ IPADDRESS_Unregister()

void IPADDRESS_Unregister ( void  )

Definition at line 679 of file ipaddress.c.

680{
682}
BOOL WINAPI UnregisterClassW(_In_ LPCWSTR, HINSTANCE)

Referenced by DllMain().

◆ IPADDRESS_UpdateText()

static void IPADDRESS_UpdateText ( const IPADDRESS_INFO infoPtr)
static

Definition at line 73 of file ipaddress.c.

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}
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:274
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 589 of file ipaddress.c.

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}
BOOL COMCTL32_IsReflectedMessage(UINT uMsg) DECLSPEC_HIDDEN
Definition: commctrl.c:1755
VOID COMCTL32_RefreshSysColors(void) DECLSPEC_HIDDEN
Definition: commctrl.c:1593
static LRESULT IPADDRESS_Create(HWND hwnd, const CREATESTRUCTA *lpCreate)
Definition: ipaddress.c:216
static BOOL IPADDRESS_SetRange(IPADDRESS_INFO *infoPtr, int index, WORD range)
Definition: ipaddress.c:356
static LRESULT IPADDRESS_SetAddress(const IPADDRESS_INFO *infoPtr, DWORD ip_address)
Definition: ipaddress.c:381
static int IPADDRESS_GetAddress(const IPADDRESS_INFO *infoPtr, LPDWORD ip_address)
Definition: ipaddress.c:335
static LRESULT IPADDRESS_Paint(const IPADDRESS_INFO *infoPtr, HDC hdc)
Definition: ipaddress.c:307
static LRESULT IPADDRESS_Enable(IPADDRESS_INFO *infoPtr, BOOL enabled)
Definition: ipaddress.c:293
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 BOOL IPADDRESS_IsBlank(const IPADDRESS_INFO *infoPtr)
Definition: ipaddress.c:322
#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:88
#define IPM_ISBLANK
Definition: commctrl.h:4475
#define IPM_SETFOCUS
Definition: commctrl.h:4474
#define IPM_SETADDRESS
Definition: commctrl.h:4471
#define IPM_CLEARADDRESS
Definition: commctrl.h:4470
#define IPM_GETADDRESS
Definition: commctrl.h:4472
#define IPM_SETRANGE
Definition: commctrl.h:4473
uint32_t * LPDWORD
Definition: typedefs.h:59
#define WM_PAINT
Definition: winuser.h:1623
#define WM_ENABLE
Definition: winuser.h:1618
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define WM_CREATE
Definition: winuser.h:1611
#define WM_SYSCOLORCHANGE
Definition: winuser.h:1629
#define WM_USER
Definition: winuser.h:1898
#define WM_DESTROY
Definition: winuser.h:1612

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 62 of file ipaddress.c.

Referenced by IPADDRESS_Create(), and IPADDRESS_SubclassProc().