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

📄 durationcontrol.c

📁 vc环境下的pgp源码
💻 C
📖 第 1 页 / 共 2 页
字号:
static LRESULT APIENTRY 
sEditHoursProc (
		HWND	hwnd, 
		UINT	uMsg, 
		WPARAM	wParam, 
		LPARAM	lParam) 
{
	DCWndData*	pDC = Duration_GetPtr(GetParent (hwnd));
	LRESULT		lReturn;
	UINT		u;
	
	u = sCommonEditProc (hwnd, pDC, HOURS, uMsg, wParam, lParam, &lReturn);

	switch (u) {
	case RETURN_VALUE :
		return lReturn;

	case NORMAL_PROCESSING :
		return CallWindowProc (pDC->wpOrigEditProc[HOURS], 
										hwnd, uMsg, wParam, lParam); 
	case MOVE_RIGHT :
		SetFocus (pDC->hwndEdit[MINS]);
		return 0;

	case MOVE_LEFT :
		SetFocus (pDC->hwndEdit[DAYS]);
		return 0;

	default :
		return 0;
	}
} 

static LRESULT APIENTRY 
sEditMinsProc (
		HWND	hwnd, 
		UINT	uMsg, 
		WPARAM	wParam, 
		LPARAM	lParam) 
{
	DCWndData*	pDC = Duration_GetPtr(GetParent (hwnd));
	LRESULT		lReturn;
	UINT		u;
	
	u = sCommonEditProc (hwnd, pDC, MINS, uMsg, wParam, lParam, &lReturn);

	switch (u) {
	case RETURN_VALUE :
		return lReturn;

	case NORMAL_PROCESSING :
		return CallWindowProc (pDC->wpOrigEditProc[MINS], 
										hwnd, uMsg, wParam, lParam); 
	case MOVE_RIGHT :
		SetFocus (pDC->hwndEdit[DAYS]);
		return 0;

	case MOVE_LEFT :
		SetFocus (pDC->hwndEdit[HOURS]);
		return 0;

	default :
		return 0;
	}
} 

//	______________________________________________
//
//	static text edit box subclass procedures

static LRESULT APIENTRY 
sText0Proc (
		HWND	hwnd, 
		UINT	uMsg, 
		WPARAM	wParam, 
		LPARAM	lParam) 
{
	DCWndData* pDC;

	switch (uMsg) {
	case WM_PAINT :
	case WM_ENABLE :
	case EM_SETREADONLY :
	case WM_NCHITTEST :
	case WM_SETTEXT :
	case WM_HELP :
		pDC = Duration_GetPtr(GetParent (hwnd));
		return CallWindowProc(pDC->wpOrigTextProc[DAYS], 
								hwnd, uMsg, wParam, lParam); 

	case WM_MOUSEACTIVATE :
		pDC = Duration_GetPtr(GetParent (hwnd));
		SetFocus (pDC->hwndEdit[DAYS]);
		return 0;

	default : 
		return 0;
	}
} 

static LRESULT APIENTRY 
sText1Proc (
		HWND	hwnd, 
		UINT	uMsg, 
		WPARAM	wParam, 
		LPARAM	lParam) 
{
	DCWndData* pDC;

	switch (uMsg) {
	case WM_PAINT :
	case WM_ENABLE :
	case EM_SETREADONLY :
	case WM_NCHITTEST :
	case WM_SETTEXT :
	case WM_HELP :
		pDC = Duration_GetPtr(GetParent (hwnd));
		return CallWindowProc(pDC->wpOrigTextProc[HOURS], 
								hwnd, uMsg, wParam, lParam); 

	case WM_MOUSEACTIVATE :
		pDC = Duration_GetPtr(GetParent (hwnd));
		SetFocus (pDC->hwndEdit[HOURS]);
		return 0;

	default : 
		return 0;
	}
} 

static LRESULT APIENTRY 
sText2Proc (
		HWND	hwnd, 
		UINT	uMsg, 
		WPARAM	wParam, 
		LPARAM	lParam) 
{
	DCWndData* pDC;

	switch (uMsg) {
	case WM_PAINT :
	case WM_ENABLE :
	case EM_SETREADONLY :
	case WM_NCHITTEST :
	case WM_SETTEXT :
	case WM_HELP :
		pDC = Duration_GetPtr(GetParent (hwnd));
		return CallWindowProc(pDC->wpOrigTextProc[MINS], 
								hwnd, uMsg, wParam, lParam); 

	case WM_MOUSEACTIVATE :
		pDC = Duration_GetPtr(GetParent (hwnd));
		SetFocus (pDC->hwndEdit[MINS]);
		return 0;

	default : 
		return 0;
	}
} 

//	____________________________________
//
//  Message processing function for Duration class

static LRESULT WINAPI 
sDurationMsgProc (
		HWND	hwnd, 
		UINT	msg, 
		WPARAM	wParam, 
		LPARAM	lParam) 
{
	DCWndData* pDC = Duration_GetPtr(hwnd);

    if (pDC == NULL) {
        if (msg == WM_NCCREATE) 
		{
			pDC = (DCWndData*)sAlloc (sizeof(DCWndData));
			if (pDC == NULL) return 0L;
			Duration_SetPtr (hwnd, pDC);
        }
        else 
        	return DefWindowProc (hwnd, msg, wParam, lParam);
    }
	
    if (msg == WM_NCDESTROY) 
	{
		sFree (pDC);
        pDC = NULL;
        Duration_SetPtr (hwnd, NULL);
    }

	switch (msg) {

	case WM_CREATE :
	{
		LPCREATESTRUCT	lpcs		= (LPCREATESTRUCT)lParam;

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

		pDC->iFocused		= -1;
		pDC->iPrevFocused	= 0;
		pDC->bFirstKey		= TRUE;
		pDC->iHeight		= lpcs->cy;

		pDC->iRangeLo[DAYS]		= 0;
		pDC->iRangeLo[HOURS]	= 0;
		pDC->iRangeLo[MINS]		= 0;

		pDC->iRangeHi[DAYS]		= 99;
		pDC->iRangeHi[HOURS]	= 23;
		pDC->iRangeHi[MINS]		= 59;

		pDC->ulDuration			= 0;
		pDC->ulMinDuration		= 0;
		pDC->ulMaxDuration		= 8553600 + 82800 + 3540; // 99d + 23h + 59m

		lstrcpy (&pDC->szText[DAYS][0], "d, ");
		lstrcpy (&pDC->szText[HOURS][0], "h, ");
		lstrcpy (&pDC->szText[MINS][0], "m");

		// create the up/down control
		pDC->hwndUpDown = CreateWindowEx (0L, UPDOWN_CLASS, "",
			WS_CHILD|WS_VISIBLE|pDC->dwStyle,
			0, 0, 0, 0, hwnd, NULL, 0, NULL);

		// create edit controls
		// days
		pDC->hwndEdit[DAYS] = CreateWindowEx (0L, "EDIT", "",
			WS_CHILD|WS_TABSTOP|WS_VISIBLE|ES_NUMBER|ES_RIGHT|pDC->dwStyle, 
			0, 0, 0, 0, hwnd, (HMENU)IDC_EDITDAYS, 0, NULL);
		SendMessage (pDC->hwndEdit[DAYS], 
						WM_SETFONT, (WPARAM)pDC->hFont, FALSE);
		SendMessage (pDC->hwndEdit[DAYS], 
						EM_SETLIMITTEXT, 2, 0);
		pDC->wpOrigEditProc[DAYS] = 
						(WNDPROC) SetWindowLong (pDC->hwndEdit[DAYS],
								GWL_WNDPROC, (LONG)sEditDaysProc); 

		pDC->hwndText[DAYS] = CreateWindowEx (0L, "EDIT", "",
			WS_CHILD|WS_VISIBLE|ES_LEFT|pDC->dwStyle, 
			0, 0, 0, 0, hwnd, (HMENU)IDC_TEXTDAYS, 0, NULL);
		SendMessage (pDC->hwndText[DAYS], 
						WM_SETFONT, (WPARAM)pDC->hFont, FALSE);
		pDC->wpOrigTextProc[DAYS] = 
						(WNDPROC) SetWindowLong (pDC->hwndText[DAYS],
								GWL_WNDPROC, (LONG)sText0Proc); 

		// hours
		pDC->hwndEdit[HOURS] = CreateWindowEx (0L, "EDIT", "",
			WS_CHILD|WS_TABSTOP|WS_VISIBLE|ES_NUMBER|ES_RIGHT|pDC->dwStyle, 
			0, 0, 0, 0, hwnd, (HMENU)IDC_EDITHOURS, 0, NULL);
		SendMessage (pDC->hwndEdit[HOURS], 
						WM_SETFONT, (WPARAM)pDC->hFont, FALSE);
		SendMessage (pDC->hwndEdit[HOURS], 
						EM_SETLIMITTEXT, 2, 0);
		pDC->wpOrigEditProc[HOURS] = 
						(WNDPROC) SetWindowLong (pDC->hwndEdit[HOURS],
								GWL_WNDPROC, (LONG)sEditHoursProc); 

		pDC->hwndText[HOURS] = CreateWindowEx (0L, "EDIT", "",
			WS_CHILD|WS_VISIBLE|ES_LEFT|pDC->dwStyle, 
			0, 0, 0, 0, hwnd, (HMENU)IDC_TEXTHOURS, 0, NULL);
		SendMessage (pDC->hwndText[HOURS], 
						WM_SETFONT, (WPARAM)pDC->hFont, FALSE);
		pDC->wpOrigTextProc[HOURS] = 
						(WNDPROC) SetWindowLong (pDC->hwndText[HOURS],
								GWL_WNDPROC, (LONG)sText1Proc); 

		// minutes
		pDC->hwndEdit[MINS] = CreateWindowEx (0L, "EDIT", "",
			WS_CHILD|WS_TABSTOP|WS_VISIBLE|ES_NUMBER|ES_RIGHT|pDC->dwStyle, 
			0, 0, 0, 0, hwnd, (HMENU)IDC_EDITMINS, 0, NULL);
		SendMessage (pDC->hwndEdit[MINS], 
						WM_SETFONT, (WPARAM)pDC->hFont, FALSE);
		SendMessage (pDC->hwndEdit[MINS], 
						EM_SETLIMITTEXT, 2, 0);
		pDC->wpOrigEditProc[MINS] = 
						(WNDPROC) SetWindowLong (pDC->hwndEdit[MINS],
								GWL_WNDPROC, (LONG)sEditMinsProc); 

		pDC->hwndText[MINS] = CreateWindowEx (0L, "EDIT", "",
			WS_CHILD|WS_VISIBLE|ES_LEFT|pDC->dwStyle, 
			0, 0, 0, 0, hwnd, (HMENU)IDC_TEXTMINS, 0, NULL);
		SendMessage (pDC->hwndText[MINS], 
						WM_SETFONT, (WPARAM)pDC->hFont, FALSE);
		pDC->wpOrigTextProc[MINS] = 
						(WNDPROC) SetWindowLong (pDC->hwndText[MINS],
								GWL_WNDPROC, (LONG)sText2Proc); 

		sSetControls (hwnd, pDC);

		break;
	}

	case WM_GETDLGCODE :
		return DLGC_WANTMESSAGE;
		
	case WM_NOTIFY :
	{
		LPNMHDR	pnmhdr = (LPNMHDR)lParam;

		if (pnmhdr->hwndFrom == pDC->hwndUpDown)
		{
			LPNMUPDOWN pnmud = (LPNMUPDOWN)lParam;
			sScrollUnit (pDC, -1*pnmud->iDelta);
		}
		break;
	}

	case WM_PAINT :
		// paint background, if necessary
		if (pDC->dwStyle & (WS_DISABLED | ES_READONLY))
		{
			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 :
		SetFocus (pDC->hwndEdit[pDC->iPrevFocused]);
		break;

	case WM_DESTROY :
		SetWindowLong (pDC->hwndText[DAYS], 
							GWL_WNDPROC, (LONG)pDC->wpOrigTextProc[DAYS]); 
		SetWindowLong (pDC->hwndText[HOURS], 
							GWL_WNDPROC, (LONG)pDC->wpOrigTextProc[HOURS]); 
		SetWindowLong (pDC->hwndText[MINS],
							GWL_WNDPROC, (LONG)pDC->wpOrigTextProc[MINS]);
		
		DestroyWindow (pDC->hwndText[DAYS]);
		DestroyWindow (pDC->hwndText[HOURS]);
		DestroyWindow (pDC->hwndText[MINS]);

		SetWindowLong (pDC->hwndEdit[DAYS], 
							GWL_WNDPROC, (LONG)pDC->wpOrigEditProc[DAYS]); 
		SetWindowLong (pDC->hwndEdit[HOURS], 
							GWL_WNDPROC, (LONG)pDC->wpOrigEditProc[HOURS]); 
		SetWindowLong (pDC->hwndEdit[MINS], 
							GWL_WNDPROC, (LONG)pDC->wpOrigEditProc[MINS]); 
		
		DestroyWindow (pDC->hwndEdit[DAYS]);
		DestroyWindow (pDC->hwndEdit[HOURS]);
		DestroyWindow (pDC->hwndEdit[MINS]);

		DestroyWindow (pDC->hwndUpDown);
		break;

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

		SendMessage (pDC->hwndText[DAYS], msg, wParam, lParam);
		SendMessage (pDC->hwndText[HOURS], msg, wParam, lParam);
		SendMessage (pDC->hwndText[MINS], msg, wParam, lParam);

		SendMessage (pDC->hwndEdit[DAYS], msg, wParam, lParam);
		SendMessage (pDC->hwndEdit[HOURS], msg, wParam, lParam);
		SendMessage (pDC->hwndEdit[MINS], msg, wParam, lParam);

		InvalidateRect (hwnd, NULL, TRUE);
		break;

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

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

	case WM_ENABLE :
		if (wParam)
		{
			pDC->dwStyle &= ~WS_DISABLED;
			EnableWindow (pDC->hwndUpDown, TRUE);
		}
		else
		{
			pDC->dwStyle |= WS_DISABLED;
			EnableWindow (pDC->hwndUpDown, FALSE);
		}

		SendMessage (pDC->hwndText[DAYS], msg, wParam, lParam);
		SendMessage (pDC->hwndText[HOURS], msg, wParam, lParam);
		SendMessage (pDC->hwndText[MINS], msg, wParam, lParam);

		SendMessage (pDC->hwndEdit[DAYS], msg, wParam, lParam);
		SendMessage (pDC->hwndEdit[HOURS], msg, wParam, lParam);
		SendMessage (pDC->hwndEdit[MINS], msg, wParam, lParam);

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

	case PGP_DCM_SETDURATION :
		pDC->ulDuration = lParam;
		sDisplayDuration (pDC);
		break;

	case PGP_DCM_GETDURATION :
		*(PULONG)lParam = pDC->ulDuration;
		break;

	case PGP_DCM_SETMINDURATION :
		pDC->ulMinDuration = (ULONG)lParam;
		break;

	case PGP_DCM_SETMAXDURATION :
		pDC->ulMaxDuration = (ULONG)lParam;
		break;

	case PGP_DCM_SETTEXT :
		lstrcpyn (&pDC->szText[wParam][0], (LPSTR)lParam, MAXTEXTLEN);
		sSetControls (hwnd, pDC);
		InvalidateRect (hwnd, NULL, TRUE);
		break;
	} 
	return (DefWindowProc (hwnd, msg, wParam, lParam));
}

//	____________________________________
//
//  load and initialize control

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

	// register new window class
	wc.style = CS_DBLCLKS | CS_GLOBALCLASS | CS_PARENTDC; // Class style(s).
	wc.lpfnWndProc = (WNDPROC) sDurationMsgProc; 
	wc.cbClsExtra = 0;	                        // No per-class extra data.
	wc.cbWndExtra = sizeof (DCWndData*);		// 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_PGPDURATION;			// Name used in CreateWindow
	RegisterClass (&wc);

}


⌨️ 快捷键说明

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