⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ipaddresscontrol.c

📁 vc环境下的pgp源码
💻 C
📖 第 1 页 / 共 2 页
字号:

	switch (uMsg) {
	case WM_PAINT :
	case EM_SETREADONLY :
	case WM_ENABLE :
	case WM_HELP :
		pIP = IPAddress_GetPtr(GetParent (hwnd));
		return CallWindowProc(pIP->wpOrigDotProc[0], 
								hwnd, uMsg, wParam, lParam); 

	default : 
		return 0;
	}
} 

static LRESULT APIENTRY 
sDot1Proc (
		HWND	hwnd, 
		UINT	uMsg, 
		WPARAM	wParam, 
		LPARAM	lParam) 
{
	IPWndData* pIP;

	switch (uMsg) {
	case WM_PAINT :
	case EM_SETREADONLY :
	case WM_ENABLE :
	case WM_HELP :
		pIP = IPAddress_GetPtr(GetParent (hwnd));
		return CallWindowProc(pIP->wpOrigDotProc[1], 
								hwnd, uMsg, wParam, lParam); 

	default : 
		return 0;
	}
} 

static LRESULT APIENTRY 
sDot2Proc (
		HWND	hwnd, 
		UINT	uMsg, 
		WPARAM	wParam, 
		LPARAM	lParam) 
{
	IPWndData* pIP;

	switch (uMsg) {
	case WM_PAINT :
	case EM_SETREADONLY :
	case WM_ENABLE :
	case WM_HELP :
		pIP = IPAddress_GetPtr(GetParent (hwnd));
		return CallWindowProc(pIP->wpOrigDotProc[2], 
								hwnd, uMsg, wParam, lParam); 

	default : 
		return 0;
	}
} 

//	____________________________________
//
//  Message processing function for IPAddress class

static LRESULT WINAPI 
sIPAddressMsgProc (
		HWND	hwnd, 
		UINT	msg, 
		WPARAM	wParam, 
		LPARAM	lParam) 
{
	IPWndData* pIP = IPAddress_GetPtr(hwnd);

    if (pIP == NULL) {
        if (msg == WM_NCCREATE) 
		{
			pIP = (IPWndData*)IPAlloc (sizeof(IPWndData));
			if (pIP == NULL) return 0L;
			IPAddress_SetPtr (hwnd, pIP);
        }
        else 
        	return DefWindowProc (hwnd, msg, wParam, lParam);
    }
	
    if (msg == WM_NCDESTROY) 
	{
		IPFree (pIP);
        pIP = NULL;
        IPAddress_SetPtr (hwnd, NULL);
    }

	switch (msg) {

	case WM_CREATE :
	{
		LPCREATESTRUCT	lpcs		= (LPCREATESTRUCT)lParam;
		INT				iDotWidth	= 3;
		INT				iNumWidth	= (lpcs->cx)/4 - iDotWidth;

		INT				iXPos;

		pIP->hwnd		= hwnd;
		pIP->hwndParent = lpcs->hwndParent;
		pIP->iID		= (INT)(lpcs->hMenu); 
		pIP->dwStyle	= lpcs->style & ES_READONLY;
		pIP->dwFlags	= 0;
		pIP->hFont		= GetStockObject (DEFAULT_GUI_FONT);

		pIP->iRangeLo[0] = 0;
		pIP->iRangeLo[1] = 0;
		pIP->iRangeLo[2] = 0;
		pIP->iRangeLo[3] = 0;

		pIP->iRangeHi[0] = 255;
		pIP->iRangeHi[1] = 255;
		pIP->iRangeHi[2] = 255;
		pIP->iRangeHi[3] = 255;

		pIP->bValid[0] = FALSE;
		pIP->bValid[1] = FALSE;
		pIP->bValid[2] = FALSE;
		pIP->bValid[3] = FALSE;

		// create edit controls
		iXPos = 0;
		pIP->hwndEdit[0] = CreateWindowEx (0L, "EDIT", "",
			WS_CHILD|WS_TABSTOP|WS_VISIBLE|ES_NUMBER|ES_CENTER|pIP->dwStyle, 
			iXPos, VERTICAL_OFFSET, iNumWidth, lpcs->cy,
			hwnd, (HMENU)IDC_EDIT0, 0, NULL);
		SendMessage (pIP->hwndEdit[0], WM_SETFONT, (WPARAM)pIP->hFont, FALSE);
		SendMessage (pIP->hwndEdit[0], EM_SETLIMITTEXT, 3, 0);
		pIP->wpOrigEditProc[0] = (WNDPROC) SetWindowLong (pIP->hwndEdit[0],
						GWL_WNDPROC, (LONG)sEdit0Proc); 

		iXPos = (lpcs->cx)/4;
		pIP->hwndEdit[1] = CreateWindowEx (0L, "EDIT", "",
			WS_CHILD|WS_TABSTOP|WS_VISIBLE|ES_NUMBER|ES_CENTER|pIP->dwStyle, 
			iXPos, VERTICAL_OFFSET, iNumWidth, lpcs->cy,
			hwnd, (HMENU)IDC_EDIT1, 0, NULL);
		SendMessage (pIP->hwndEdit[1], WM_SETFONT, (WPARAM)pIP->hFont, FALSE);
		SendMessage (pIP->hwndEdit[1], EM_SETLIMITTEXT, 3, 0);
		pIP->wpOrigEditProc[1] = (WNDPROC) SetWindowLong (pIP->hwndEdit[1],
						GWL_WNDPROC, (LONG)sEdit1Proc); 

		iXPos = (lpcs->cx)/2;
		pIP->hwndEdit[2] = CreateWindowEx (0L, "EDIT", "",
			WS_CHILD|WS_TABSTOP|WS_VISIBLE|ES_NUMBER|ES_CENTER|pIP->dwStyle, 
			iXPos, VERTICAL_OFFSET, iNumWidth, lpcs->cy,
			hwnd, (HMENU)IDC_EDIT2, 0, NULL);
		SendMessage (pIP->hwndEdit[2], WM_SETFONT, (WPARAM)pIP->hFont, FALSE);
		SendMessage (pIP->hwndEdit[2], EM_SETLIMITTEXT, 3, 0);
		pIP->wpOrigEditProc[2] = (WNDPROC) SetWindowLong (pIP->hwndEdit[2],
						GWL_WNDPROC, (LONG)sEdit2Proc); 

		iXPos = 3*(lpcs->cx)/4;
		pIP->hwndEdit[3] = CreateWindowEx (0L, "EDIT", "",
			WS_CHILD|WS_TABSTOP|WS_VISIBLE|ES_NUMBER|ES_CENTER|pIP->dwStyle, 
			iXPos, VERTICAL_OFFSET, iNumWidth, lpcs->cy,
			hwnd, (HMENU)IDC_EDIT3, 0, NULL);
		SendMessage (pIP->hwndEdit[3], WM_SETFONT, (WPARAM)pIP->hFont, FALSE);
		SendMessage (pIP->hwndEdit[3], EM_SETLIMITTEXT, 3, 0);
		pIP->wpOrigEditProc[3] = (WNDPROC) SetWindowLong (pIP->hwndEdit[3],
						GWL_WNDPROC, (LONG)sEdit3Proc); 

		// create "dot" controls
		iXPos = (lpcs->cx)/4 - iDotWidth;
		pIP->hwndDot[0] = CreateWindowEx (0L, "EDIT", "",
			WS_CHILD|WS_VISIBLE|ES_CENTER|pIP->dwStyle, 
			iXPos, VERTICAL_OFFSET, iDotWidth, lpcs->cy,
			hwnd, (HMENU)IDC_DOT0, 0, NULL);
		SendMessage (pIP->hwndDot[0], WM_SETFONT, (WPARAM)pIP->hFont, FALSE);
		SetWindowText (pIP->hwndDot[0], ".");
		pIP->wpOrigDotProc[0] = (WNDPROC) SetWindowLong (pIP->hwndDot[0],
						GWL_WNDPROC, (LONG)sDot0Proc); 

		iXPos = (lpcs->cx)/2 - iDotWidth;
		pIP->hwndDot[1] = CreateWindowEx (0L, "EDIT", "",
			WS_CHILD|WS_VISIBLE|ES_CENTER|pIP->dwStyle, 
			iXPos, VERTICAL_OFFSET, iDotWidth, lpcs->cy,
			hwnd, (HMENU)IDC_DOT1, 0, NULL);
		SendMessage (pIP->hwndDot[1], WM_SETFONT, (WPARAM)pIP->hFont, FALSE);
		SetWindowText (pIP->hwndDot[1], ".");
		pIP->wpOrigDotProc[1] = (WNDPROC) SetWindowLong (pIP->hwndDot[1],
						GWL_WNDPROC, (LONG)sDot1Proc); 

		iXPos = 3*(lpcs->cx)/4 - iDotWidth;
		pIP->hwndDot[2] = CreateWindowEx (0L, "EDIT", "",
			WS_CHILD|WS_VISIBLE|ES_CENTER|pIP->dwStyle, 
			iXPos, VERTICAL_OFFSET, iDotWidth, lpcs->cy,
			hwnd, (HMENU)IDC_DOT2, 0, NULL);
		SendMessage (pIP->hwndDot[2], WM_SETFONT, (WPARAM)pIP->hFont, FALSE);
		SetWindowText (pIP->hwndDot[2], ".");
		pIP->wpOrigDotProc[2] = (WNDPROC) SetWindowLong (pIP->hwndDot[2],
						GWL_WNDPROC, (LONG)sDot2Proc); 

		break;
	}
	
	case WM_PAINT :
		// paint background, if necessary
		if ((pIP->dwStyle & ES_READONLY) ||
			(pIP->dwFlags & IPFLAG_DISABLED))
		{
			PAINTSTRUCT	ps;
			HDC			hdc;
			RECT		rc;

			hdc = BeginPaint (hwnd, &ps);
			GetClientRect (hwnd, &rc);
			FillRect (hdc, &rc, (HBRUSH)(COLOR_3DFACE+1));
			EndPaint (hwnd, &ps);
		}
		break;

	case WM_SETFOCUS :
		SendMessage (pIP->hwndEdit[0], EM_SETSEL, 0, (LPARAM)-1);
		SetFocus (pIP->hwndEdit[0]);
		break;

	case WM_ENABLE :
		if (wParam)
			pIP->dwFlags &= ~IPFLAG_DISABLED;
		else
			pIP->dwFlags |= IPFLAG_DISABLED;

		SendMessage (pIP->hwndDot[0], msg, wParam, lParam);
		SendMessage (pIP->hwndDot[1], msg, wParam, lParam);
		SendMessage (pIP->hwndDot[2], msg, wParam, lParam);

		SendMessage (pIP->hwndEdit[0], msg, wParam, lParam);
		SendMessage (pIP->hwndEdit[1], msg, wParam, lParam);
		SendMessage (pIP->hwndEdit[2], msg, wParam, lParam);
		SendMessage (pIP->hwndEdit[3], msg, wParam, lParam);

		InvalidateRect (hwnd, NULL, TRUE);
		return 0;

	case WM_DESTROY :
		SetWindowLong (pIP->hwndDot[0], 
							GWL_WNDPROC, (LONG)pIP->wpOrigDotProc[0]); 
		SetWindowLong (pIP->hwndDot[1], 
							GWL_WNDPROC, (LONG)pIP->wpOrigDotProc[1]); 
		SetWindowLong (pIP->hwndDot[2], 
							GWL_WNDPROC, (LONG)pIP->wpOrigDotProc[2]);
		
		DestroyWindow (pIP->hwndDot[0]);
		DestroyWindow (pIP->hwndDot[1]);
		DestroyWindow (pIP->hwndDot[2]);

		SetWindowLong (pIP->hwndEdit[0], 
							GWL_WNDPROC, (LONG)pIP->wpOrigEditProc[0]); 
		SetWindowLong (pIP->hwndEdit[1], 
							GWL_WNDPROC, (LONG)pIP->wpOrigEditProc[1]); 
		SetWindowLong (pIP->hwndEdit[2], 
							GWL_WNDPROC, (LONG)pIP->wpOrigEditProc[2]); 
		SetWindowLong (pIP->hwndEdit[3], 
							GWL_WNDPROC, (LONG)pIP->wpOrigEditProc[3]); 
		
		DestroyWindow (pIP->hwndEdit[0]);
		DestroyWindow (pIP->hwndEdit[1]);
		DestroyWindow (pIP->hwndEdit[2]);
		DestroyWindow (pIP->hwndEdit[3]);
		break;

	case WM_HELP :
	{
		LPHELPINFO lphi = (LPHELPINFO)lParam;

		lphi->iCtrlId = pIP->iID;
		lphi->hItemHandle = pIP->hwnd;
		break;
	}

	case EM_SETREADONLY :
		if (wParam)
			pIP->dwStyle |= ES_READONLY;
		else
			pIP->dwStyle &= ~ES_READONLY;

		SendMessage (pIP->hwndDot[0], msg, wParam, lParam);
		SendMessage (pIP->hwndDot[1], msg, wParam, lParam);
		SendMessage (pIP->hwndDot[2], msg, wParam, lParam);

		SendMessage (pIP->hwndEdit[0], msg, wParam, lParam);
		SendMessage (pIP->hwndEdit[1], msg, wParam, lParam);
		SendMessage (pIP->hwndEdit[2], msg, wParam, lParam);
		SendMessage (pIP->hwndEdit[3], msg, wParam, lParam);

		InvalidateRect (hwnd, NULL, TRUE);
		break;

	case PGP_IPM_SETADDRESS :
	{
		CHAR	sz[4];
		INT		i;
		NMHDR	nmhdr;

		i = HIBYTE(HIWORD(lParam));
		wsprintf (sz, "%i", i);
		SetWindowText (pIP->hwndEdit[3], sz);

		i = LOBYTE(HIWORD(lParam));
		wsprintf (sz, "%i", i);
		SetWindowText (pIP->hwndEdit[2], sz);

		i = HIBYTE(LOWORD(lParam));
		wsprintf (sz, "%i", i);
		SetWindowText (pIP->hwndEdit[1], sz);

		i = LOBYTE(LOWORD(lParam));
		wsprintf (sz, "%i", i);
		SetWindowText (pIP->hwndEdit[0], sz);

		for (i=0; i<4; i++) 
			pIP->bValid[i] = TRUE;

		nmhdr.hwndFrom = pIP->hwnd;
		nmhdr.idFrom = pIP->iID;
		nmhdr.code = PGP_IPN_VALIDADDRESS;
		SendMessage (pIP->hwndParent, 
							WM_NOTIFY, pIP->iID, (LPARAM)&nmhdr);
		break;
	}

	case PGP_IPM_CLEARADDRESS :
	{
		NMHDR	nmhdr;
		INT		i;

		SetWindowText (pIP->hwndEdit[3], "");
		SetWindowText (pIP->hwndEdit[2], "");
		SetWindowText (pIP->hwndEdit[1], "");
		SetWindowText (pIP->hwndEdit[0], "");

		for (i=0; i<4; i++) 
			pIP->bValid[i] = FALSE;

		nmhdr.hwndFrom = pIP->hwnd;
		nmhdr.idFrom = pIP->iID;
		nmhdr.code = PGP_IPN_INVALIDADDRESS;
		SendMessage (pIP->hwndParent, 
							WM_NOTIFY, pIP->iID, (LPARAM)&nmhdr);
		break;
	}

	case PGP_IPM_GETADDRESS :
	{
		BOOL	bNotValid = FALSE;
		CHAR	sz[4];
		INT		i;
		DWORD	l;

		if (lParam == 0) 
			break;

		*(PDWORD)lParam = 0;

		for (i=0; i<4; i++) 
			if (!pIP->bValid[i])
				bNotValid = TRUE;

		if (bNotValid)
			break;

		GetWindowText (pIP->hwndEdit[3], sz, 4);
		i = atoi (sz);
		i &= 0xFF;
		l = i;

		GetWindowText (pIP->hwndEdit[2], sz, 4);
		i = atoi (sz);
		i &= 0xFF;
		l <<= 8;
		l |= i;

		GetWindowText (pIP->hwndEdit[1], sz, 4);
		i = atoi (sz);
		i &= 0xFF;
		l <<= 8;
		l |= i;

		GetWindowText (pIP->hwndEdit[0], sz, 4);
		i = atoi (sz);
		i &= 0xFF;
		l <<= 8;
		l |= i;

		*(PDWORD)lParam = l;

		break;
	}

	case PGP_IPM_SETRANGE :
		if (wParam > 3) 
			break;
		pIP->iRangeLo[wParam] = LOWORD(lParam);
		pIP->iRangeHi[wParam] = HIWORD(lParam);
		break;

	} 
	return (DefWindowProc (hwnd, msg, wParam, lParam));
}

//	____________________________________
//
//  load and initialize control

VOID WINAPI 
InitPGPIPAddressControl (VOID) 
{
	WNDCLASS  wc;
	
	InitCommonControls ();

	// register new window class
	wc.style = CS_DBLCLKS | CS_GLOBALCLASS | CS_PARENTDC; // Class style(s).
	wc.lpfnWndProc = (WNDPROC) sIPAddressMsgProc; 
	wc.cbClsExtra = 0;	                        // No per-class extra data.
	wc.cbWndExtra = sizeof (IPWndData*);		// pointer to extra data 
												//		structure
	wc.hInstance = 0;	
	wc.hIcon = NULL;
	wc.hCursor = LoadCursor (NULL, IDC_ARROW);
	wc.hbrBackground = (HBRUSH) (COLOR_WINDOW+1); // Background color
	wc.lpszMenuName = NULL;						// No menu
	wc.lpszClassName = WC_PGPIPADDRESS;		// Name used in CreateWindow
	RegisterClass (&wc);

}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -