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

📄 kmprops.c

📁 vc环境下的pgp源码
💻 C
📖 第 1 页 / 共 5 页
字号:
	switch (uMsg) {

	case WM_INITDIALOG:
		// store pointer to data structure
		SetWindowLong (hDlg, GWL_USERDATA, ((PROPSHEETPAGE*)lParam)->lParam);
		pkmpss = (KMPROPSHEETSTRUCT*)GetWindowLong (hDlg, GWL_USERDATA);

		// create tree view window
		GetClientRect (GetDlgItem (hDlg, IDC_FRAME), &rc);
		rc.left += 8;
		rc.right -= 8;
		rc.top += 16;
		rc.bottom -= 8;

		pkmpss->hwndADKs = CreateWindowEx (WS_EX_CLIENTEDGE, WC_TREELIST, "",
			WS_VISIBLE | WS_CHILD | WS_BORDER | WS_TABSTOP | WS_GROUP |
			TLS_AUTOSCROLL | TLS_SINGLESELECT,
			rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top,
			GetDlgItem (hDlg, IDC_FRAME), 
			(HMENU)IDC_ADKTREELIST, g_hInst, NULL);

		// create image list
		sCreateImageList (pkmpss);
		TreeList_SetImageList (pkmpss->hwndADKs, pkmpss->hIml);
		sAddADKColumns (pkmpss->hwndADKs, rc.right-rc.left);

		// initialize all controls
		PostMessage (hDlg, WM_APP, SERIALIZE, 0);
		return TRUE;

	case WM_APP :
		if (wParam == SERIALIZE)
			KMRequestSDKAccess (pkmpss->pKM);
		TreeList_DeleteTree (pkmpss->hwndADKs, TRUE);
		sInsertADKsIntoTree (pkmpss->pKM, pkmpss->hwndADKs, pkmpss->key, 
								pkmpss->keyset, pkmpss->uNumberADKs);
		if (wParam == SERIALIZE)
			KMReleaseSDKAccess (pkmpss->pKM);
		break;

    case WM_HELP: 
        WinHelp (((LPHELPINFO) lParam)->hItemHandle, pkmpss->pKM->szHelpFile, 
            HELP_WM_HELP, (DWORD) (LPSTR) aADKIds); 
        break; 
 
    case WM_CONTEXTMENU: 
        WinHelp ((HWND) wParam, pkmpss->pKM->szHelpFile, HELP_CONTEXTMENU, 
            (DWORD) (LPVOID) aADKIds); 
        break; 

	case WM_NOTIFY :
		switch (((NMHDR FAR *) lParam)->code) {

		case PSN_HELP :
			WinHelp (hDlg, pkmpss->pKM->szHelpFile, HELP_CONTEXT, 
				IDH_PGPKM_PROPDIALOG); 
			break;
		}
	}
	return FALSE;
}


//	___________________________________________________
//
//  Populate ListView with Designated Revokers

static VOID 
sInsertRevokersIntoTree (
		PKEYMAN			pKM,
		HWND			hwndTree, 
		PGPKeyRef		key,
		PGPKeySetRef	keyset,
		UINT			uNumberRevokers) 
{
	TL_TREEITEM		tlI;
	TL_INSERTSTRUCT tlIns;
	HTLITEM			hTNew;
	PGPKeyRef		keyRevoker;
	PGPKeyID		keyidRevoker;
	CHAR			szName[256];
	PGPError		err;
	CHAR			szID[kPGPMaxKeyIDStringSize];
	UINT			u;
	BOOL			bItalics;

	tlI.hItem = NULL;
	tlI.mask = TLIF_TEXT | TLIF_IMAGE | TLIF_STATE;
	tlI.stateMask = TLIS_ITALICS;
	tlI.pszText = szName;

	for (u=0; u<uNumberRevokers; u++) {

		tlI.iImage = IDX_DSAPUBDISKEY;
		tlI.state = 0;

		err = PGPGetIndexedRevocationKey (key, 
				keyset, u, &keyRevoker, &keyidRevoker);

		if (IsntPGPError (err)) { 

			if (!PGPKeyRefIsValid (keyRevoker)) {
				// currently only DH/DSS designated revokers are allowed
				// so we assume that's what it is
				err = PGPGetKeyByKeyID (pKM->KeySetMain, &keyidRevoker,
							kPGPPublicKeyAlgorithm_DSA, &keyRevoker);
			}

			if (PGPKeyRefIsValid (keyRevoker)) {
				KMGetKeyName (keyRevoker, szName, sizeof(szName));
				tlI.iImage = KMDetermineKeyIcon (pKM, keyRevoker, &bItalics);
				if (bItalics) tlI.state = TLIS_ITALICS;
			}
			else {
				tlI.state = TLIS_ITALICS;

				LoadString (g_hInst, IDS_UNKNOWNADK, 
									szName, sizeof(szName));
				err = PGPGetKeyIDString (&keyidRevoker, 
							kPGPKeyIDString_Abbreviated, szID);
				if (IsntPGPError (err)) {
					LoadString (g_hInst, IDS_UNKNOWNADKID, 
									szName, sizeof(szName));
					lstrcat (szName, szID);
				}
			}
		}

		else {
			LoadString (g_hInst, IDS_ERRONEOUSREVOKER, 
									szName, sizeof(szName));
		}

		tlI.cchTextMax = lstrlen (szName);
		tlIns.hInsertAfter = (HTLITEM)TLI_SORT;
		tlIns.item = tlI;
		tlIns.hParent = NULL;

		hTNew = TreeList_InsertItem (hwndTree, &tlIns);

	}
}


//	_____________________________________________________
//
//  add columns to treelist

static BOOL 
sAddRevokerColumns (HWND hWndTree, INT iWidth) {
	TL_COLUMN tlc;
	CHAR sz[64];

	TreeList_DeleteAllColumns (hWndTree);

	tlc.mask = TLCF_FMT | TLCF_WIDTH | TLCF_TEXT | 
				TLCF_SUBITEM | TLCF_DATATYPE | TLCF_DATAMAX;
	tlc.pszText = sz;

	tlc.iSubItem = 0;
	tlc.fmt = TLCFMT_LEFT;
	tlc.iDataType = TLC_DATASTRING;
	tlc.cx = iWidth - 8;
	tlc.bMouseNotify = FALSE;
	LoadString (g_hInst, IDS_NAMEFIELD, sz, sizeof(sz));
	TreeList_InsertColumn (hWndTree, 0, &tlc);

	return TRUE;
}


//	___________________________________________________
//
//  Key Properties Dialog Message procedure - Revokers panel

static BOOL CALLBACK 
sKeyPropDlgProcRevokers (
		HWND	hDlg, 
		UINT	uMsg, 
		WPARAM	wParam,
		LPARAM	lParam) 
{
	KMPROPSHEETSTRUCT*	pkmpss;
	RECT				rc;

	pkmpss = (KMPROPSHEETSTRUCT*)GetWindowLong (hDlg, GWL_USERDATA);

	switch (uMsg) {

	case WM_INITDIALOG:
		// store pointer to data structure
		SetWindowLong (hDlg, GWL_USERDATA, ((PROPSHEETPAGE*)lParam)->lParam);
		pkmpss = (KMPROPSHEETSTRUCT*)GetWindowLong (hDlg, GWL_USERDATA);
		pkmpss->hwndRevokerDlg = hDlg;

		// create tree view window
		GetClientRect (GetDlgItem (hDlg, IDC_FRAME), &rc);
		rc.left += 8;
		rc.right -= 8;
		rc.top += 16;
		rc.bottom -= 8;

		pkmpss->hwndRevokers = CreateWindowEx (WS_EX_CLIENTEDGE, WC_TREELIST,
			"", WS_VISIBLE | WS_CHILD | WS_BORDER | WS_TABSTOP | WS_GROUP |
			TLS_AUTOSCROLL | TLS_SINGLESELECT,
			rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top,
			GetDlgItem (hDlg, IDC_FRAME), 
			(HMENU)IDC_REVOKERTREELIST, g_hInst, NULL);

		// create image list
		sCreateImageList (pkmpss);
		TreeList_SetImageList (pkmpss->hwndRevokers, pkmpss->hIml);
		sAddRevokerColumns (pkmpss->hwndRevokers, rc.right-rc.left);

		// initialize all controls
		PostMessage (hDlg, WM_APP, SERIALIZE, 0);
		return TRUE;

	case WM_APP :
		if (wParam == SERIALIZE)
			KMRequestSDKAccess (pkmpss->pKM);
		TreeList_DeleteTree (pkmpss->hwndRevokers, TRUE);
		PGPCountRevocationKeys (pkmpss->key, &pkmpss->uNumberRevokers);
		sInsertRevokersIntoTree (pkmpss->pKM, pkmpss->hwndRevokers, 
					pkmpss->key, pkmpss->keyset, pkmpss->uNumberRevokers);
		if (wParam == SERIALIZE)
			KMReleaseSDKAccess (pkmpss->pKM);
		break;

    case WM_HELP: 
        WinHelp (((LPHELPINFO) lParam)->hItemHandle, pkmpss->pKM->szHelpFile, 
            HELP_WM_HELP, (DWORD) (LPSTR) aRevokerIds); 
        break; 
 
    case WM_CONTEXTMENU: 
        WinHelp ((HWND) wParam, pkmpss->pKM->szHelpFile, HELP_CONTEXTMENU, 
            (DWORD) (LPVOID) aRevokerIds); 
        break; 

	case WM_NOTIFY :
		switch (((NMHDR FAR *) lParam)->code) {

		case PSN_HELP :
			WinHelp (hDlg, pkmpss->pKM->szHelpFile, HELP_CONTEXT, 
				IDH_PGPKM_PROPDIALOG); 
			break;
		}
	}
	return FALSE;
}


//	___________________________________________________
//
//  update controls dealing with validity

static VOID
sSetValidityControls (HWND hwnd, KMPROPSHEETSTRUCT* pkmpss, UINT uVal) 
{
	UINT u;

	u = KMConvertFromPGPValidity (uVal);
	SendMessage (pkmpss->hwndValidity, PBM_SETPOS, u, 0);

	if (u < (UINT)pkmpss->pKM->iValidityThreshold)
		pkmpss->bInvalid = TRUE;
	else
		pkmpss->bInvalid = FALSE;

	InvalidateRect (hwnd, NULL, FALSE);
}


//	___________________________________________________
//
//  convert slider control values

static UINT
sConvertFromPGPTrust (UINT u) 
{
#if 0 // vertical trust slider
	return (KMConvertFromPGPTrust (kPGPKeyTrust_Complete) -
			KMConvertFromPGPTrust (u));
#else // horizontal trust slider
	return (KMConvertFromPGPTrust (u));
#endif
}


static UINT
sConvertToPGPTrust (UINT u) 
{
#if 0 // vertical trust slider
	return KMConvertToPGPTrust (
		KMConvertFromPGPTrust (kPGPKeyTrust_Complete) - u);
#else // horizontal trust slider
	return KMConvertToPGPTrust (u);
#endif
}


//	___________________________________________________
//
//  update controls dealing with trust

static VOID
sSetTrustControls (HWND hDlg, KMPROPSHEETSTRUCT* pkmpss, UINT uTrust) 
{
	INT i;

	i = sConvertFromPGPTrust (uTrust);
	SendDlgItemMessage (hDlg, IDC_TRUSTSLIDER, TBM_SETPOS, (WPARAM)TRUE, i);
}


//	___________________________________________________
//
//  display photo userID with appropriate overwriting

static VOID 
sPaintPhotoID (
		HWND		hWnd,
		HBITMAP		hbitmapID,
		HPALETTE	hpaletteID,
		INT			iwidthBM,
		INT			iheightBM,
		BOOL		bInvalid,
		BOOL		bRevoked,
		BOOL		bExpired)
{
	HPALETTE		hpaletteOld		= NULL;
	HDC				hdc;
	HDC				hdcMem;
	HDC				hdcMask;
	HBITMAP			hbitmap;
	PAINTSTRUCT		ps;
	RECT			rc;
	INT				icent;
	INT				ileft, itop, iwidth, iheight;
	BITMAP			bm;

	hdc = BeginPaint (hWnd, &ps);

	GetWindowRect (GetDlgItem (hWnd, IDC_PHOTOID), &rc);
	rc.left += 2;
	rc.top += 2;
	rc.right -= 2;
	rc.bottom -= 2;
	MapWindowPoints (NULL, hWnd, (LPPOINT)&rc, 2);
	FillRect (hdc, &rc, (HBRUSH)(COLOR_3DFACE+1));

	// if photoid is available ... draw it
	if (hbitmapID) {
		// check if bitmap needs shrinking
		if ((iheightBM > (rc.bottom-rc.top-2)) ||
			(iwidthBM  > (rc.right-rc.left-2))) 
		{
			if (iheightBM > (iwidthBM * 1.25)) {
				itop = rc.top +1;
				iheight = rc.bottom-rc.top -2;
				icent = (rc.right+rc.left) / 2;
				iwidth = ((rc.bottom-rc.top) * iwidthBM) / iheightBM;
				ileft = icent -(iwidth/2);
			}
			else {
				ileft = rc.left +1;
				iwidth = rc.right-rc.left -2;
				icent = (rc.bottom+rc.top) / 2;
				iheight = ((rc.right-rc.left) * iheightBM) / iwidthBM;
				itop = icent - (iheight/2);
			}
		}
		// otherwise draw it at its real size
		else {
			iwidth = iwidthBM;
			iheight = iheightBM;
			icent = (rc.right+rc.left) / 2;
			ileft = icent - (iwidth/2);
			icent = (rc.bottom+rc.top) / 2;
			itop = icent - (iheight/2);
		}

		hdcMem = CreateCompatibleDC (hdc);

		if (hpaletteID) {
			hpaletteOld = SelectPalette (hdc, hpaletteID, FALSE);
			RealizePalette (hdc);
		}

		SetStretchBltMode (hdc, COLORONCOLOR);
		SelectObject (hdcMem, hbitmapID);
		StretchBlt (hdc, ileft, itop, iwidth, iheight,
					hdcMem, 0, 0, iwidthBM, iheightBM, SRCCOPY);

		// overlay the question mark
		if (bInvalid && !bRevoked && !bExpired) {
			hdcMask = CreateCompatibleDC (hdc);
			hbitmap = 
				LoadBitmap (g_hInst, MAKEINTRESOURCE (IDB_QUESTIONMARK));
			GetObject (hbitmap, sizeof(BITMAP), (LPSTR)&bm);
	
			SelectObject (hdcMask, hbitmap);
	
			SetTextColor(hdc, RGB (255,0,0));
			SetBkColor(hdc, RGB (0,0,0));
			StretchBlt (hdc, rc.left, rc.top, 
					rc.right-rc.left-2, rc.bottom-rc.top-2,
					hdcMask, 0, 0, bm.bmWidth, bm.bmHeight, SRCINVERT);
	
			SetTextColor(hdc, RGB (0,0,0));
			SetBkColor(hdc, RGB (255,255,255));
			StretchBlt (hdc, rc.left, rc.top, 
					rc.right-rc.left-2, rc.bottom-rc.top-2,
					hdcMask, 0, 0, bm.bmWidth, bm.bmHeight, SRCAND);
	
			SetTextColor(hdc, RGB (255,0,0));
			SetBkColor(hdc, RGB (0,0,0));
			StretchBlt (hdc, rc.left, rc.top, 
					rc.right-rc.left-2, rc.bottom-rc.top-2,
					hdcMask, 0, 0, bm.bmWidth, bm.bmHeight, SRCINVERT);
	
			DeleteDC (hdcMask);
		}

		if (hpaletteOld) {
			SelectPalette (hdc, hpaletteOld, TRUE);
			RealizePalette (hdc);
		}

		DeleteDC (hdcMem);
	}

	// overlay the text
	if (bRevoked) {
		hdcMask = CreateCompatibleDC (hdc);
		hbitmap = LoadBitmap (g_hInst, MAKEINTRESOURCE (IDB_REVOKED));
		GetObject (hbitmap, sizeof(BITMAP), (LPSTR)&bm);

		SelectObject (hdcMask, hbitmap);

		SetTextColor(hdc, RGB (255,0,0));
		SetBkColor(hdc, RGB (0,0,0));
		StretchBlt (hdc, rc.left, rc.top, 
				rc.right-rc.left-2, rc.bottom-rc.top-2,
				hdcMask, 0, 0, bm.bmWidth, bm.bmHeight, SRCINVERT);

		SetTextColor(hdc, RGB (0,0,0));
		SetBkColor(hdc, RGB (255,255,255));
		StretchBlt (hdc, rc.left, rc.top, 
				rc.right-rc.left-2, rc.bottom-rc.top-2,
				hdcMask, 0, 0, bm.bmWidth, bm.bmHeight, SRCAND);

		SetTextColor(hdc, RGB (255,0,0));
		SetBkColor(hdc, RGB (0,0,0));
		StretchBlt (hdc, rc.left, rc.top, 
				rc.right-rc.left-2, rc.bottom-rc.top-2,
				hdcMask, 0, 0, bm.bmWidth, bm.bmHeight, SRCINVERT);

		DeleteDC (hdcMask);
	}
	else if (bExpired) {
		hdcMask = CreateCompatibleDC (hdc);
		hbitmap = LoadBitmap (g_hInst, MAKEINTRESOURCE (IDB_EXPIRED));
		GetObject (hbitmap, sizeof(BITMAP), (LPSTR)&bm);

		SelectObject (hdcMask, hbitmap);

		SetTextColor(hdc, RGB (255,0,0));
		SetBkColor(hdc, RGB (0,0,0));
		StretchBlt (hdc, rc.left, rc.top, 
				rc.right-rc.left-2, rc.bottom-rc.top-2,
				hdcMask, 0, 0, bm.bmWidth, bm.bmHeight, SRCINVERT);

		SetTextColor(hdc, RGB (0,0,0));
		SetBkColor(hdc, RGB (255,255,255));
		StretchBlt (hdc, rc.left, rc.top, 
				rc.right-rc.left-2, rc.bottom-rc.top-2,
				hdcMask, 0, 0, bm.bmWidth, bm.bmHeight, SRCAND);

		SetTextColor(hdc, RGB (255,0,0));
		SetBkColor(hdc, RGB (0,0,0));
		StretchBlt (hdc, rc.left, rc.top, 
				rc.right-rc.left-2, rc.bottom-rc.top-2,
				hdcMask, 0, 0, bm.bmWidth, bm.bmHeight, SRCINVERT);

		DeleteDC (hdcMask);

⌨️ 快捷键说明

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