ReactOS 0.4.15-dev-5865-g640e228
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 362 of file ipaddress.c.

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

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

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}
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:499
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:60
#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:4819
LONG WINAPI SetWindowLongW(_In_ HWND, _In_ int, _In_ LONG)
LONG WINAPI GetWindowLongW(_In_ HWND, _In_ int)
#define SPI_GETICONTITLELOGFONT
Definition: winuser.h:1370
#define GWLP_HINSTANCE
Definition: winuser.h:850
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define WM_SETFONT
Definition: winuser.h:1640
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:4306
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:2896
#define SetWindowLongPtrW
Definition: winuser.h:5336
#define GWL_STYLE
Definition: winuser.h:846
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 269 of file ipaddress.c.

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

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 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}
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
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:17
#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
HWND WINAPI GetFocus(void)
Definition: window.c:1894
#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 286 of file ipaddress.c.

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

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

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}
#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:407
#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:2008
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:3148
UINT code
Definition: winuser.h:3149
HWND hwndFrom
Definition: winuser.h:3147
Definition: pdh_main.c:94
LONG_PTR LPARAM
Definition: windef.h:208
#define GWLP_ID
Definition: winuser.h:854

Referenced by IPADDRESS_ConstrainField().

◆ IPADDRESS_IsBlank()

static BOOL IPADDRESS_IsBlank ( const IPADDRESS_INFO infoPtr)
static

Definition at line 315 of file ipaddress.c.

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}

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:3999
#define WM_COMMAND
Definition: winuser.h:1730

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

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

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}
static LRESULT WINAPI IPADDRESS_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: ipaddress.c:582
#define WC_IPADDRESSW
Definition: commctrl.h:4472
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
#define ZeroMemory
Definition: winbase.h:1670
#define CS_VREDRAW
Definition: winuser.h:653
#define COLOR_WINDOW
Definition: winuser.h:912
#define CS_HREDRAW
Definition: winuser.h:648
ATOM WINAPI RegisterClassW(_In_ CONST WNDCLASSW *)
#define CS_DBLCLKS
Definition: winuser.h:646
HCURSOR WINAPI LoadCursorW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2074
#define IDC_IBEAM
Definition: winuser.h:683
#define CS_GLOBALCLASS
Definition: winuser.h:647
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 374 of file ipaddress.c.

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}
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:2012

Referenced by IPADDRESS_WindowProc().

◆ IPADDRESS_SetFocusToField()

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

Definition at line 397 of file ipaddress.c.

398{
399 TRACE("(index=%d)\n", index);
400
401 if (index > 3 || index < 0) index=0;
402
403 SetFocus (infoPtr->Part[index].EditHwnd);
404}
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 349 of file ipaddress.c.

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

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}
#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:438
#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:2015
#define EM_GETSEL
Definition: winuser.h:1987
#define EN_SETFOCUS
Definition: winuser.h:2017
#define WM_SETFOCUS
Definition: winuser.h:1603
#define VK_BACK
Definition: winuser.h:2188
#define WM_CHAR
Definition: winuser.h:1707
HANDLE WINAPI GetPropW(_In_ HWND, _In_ LPCWSTR)
#define VK_LEFT
Definition: winuser.h:2214
#define VK_RIGHT
Definition: winuser.h:2216
#define WM_KEYDOWN
Definition: winuser.h:1705
LRESULT WINAPI CallWindowProcW(_In_ WNDPROC, _In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define WM_KILLFOCUS
Definition: winuser.h:1604
char CHAR
Definition: xmlstorage.h:175

Referenced by IPADDRESS_Create().

◆ IPADDRESS_Unregister()

void IPADDRESS_Unregister ( void  )

Definition at line 672 of file ipaddress.c.

673{
675}
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 582 of file ipaddress.c.

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}
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:209
static BOOL IPADDRESS_SetRange(IPADDRESS_INFO *infoPtr, int index, WORD range)
Definition: ipaddress.c:349
static LRESULT IPADDRESS_SetAddress(const IPADDRESS_INFO *infoPtr, DWORD ip_address)
Definition: ipaddress.c:374
static int IPADDRESS_GetAddress(const IPADDRESS_INFO *infoPtr, LPDWORD ip_address)
Definition: ipaddress.c:328
static LRESULT IPADDRESS_Paint(const IPADDRESS_INFO *infoPtr, HDC hdc)
Definition: ipaddress.c:300
static LRESULT IPADDRESS_Enable(IPADDRESS_INFO *infoPtr, BOOL enabled)
Definition: ipaddress.c:286
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 BOOL IPADDRESS_IsBlank(const IPADDRESS_INFO *infoPtr)
Definition: ipaddress.c:315
#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:1610
#define WM_ENABLE
Definition: winuser.h:1605
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define WM_CREATE
Definition: winuser.h:1598
#define WM_SYSCOLORCHANGE
Definition: winuser.h:1616
#define WM_USER
Definition: winuser.h:1885
#define WM_DESTROY
Definition: winuser.h:1599

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().