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

📄 pkmsgprc.c

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

		if (hwnd && umsg) 
			uLines = (UINT)SendMessage (hwnd, umsg, 0, 0);
	}

	if (ppks->hWndTreeList)
		TreeList_SetWheelScrollLines (ppks->hWndTreeList, uLines);
	if (ppks->hWndTreeListGroups)
		TreeList_SetWheelScrollLines (ppks->hWndTreeListGroups, uLines);
}

//	____________________________________
//
//  Main PGPkeys Window Message procedure

LONG APIENTRY 
KeyManagerWndProc (
		HWND	hWnd, 
		UINT	uMsg, 
		WPARAM	wParam, 
		LPARAM	lParam) 
{
	RECT			rc;
	PGPKEYSSTRUCT*	ppks;
	INT				iWidths[3];

	switch (uMsg) {

	case WM_CREATE :
		ppks = (PGPKEYSSTRUCT*)pkAlloc (sizeof (PGPKEYSSTRUCT));
		if (!ppks) return -1;
		SetWindowLong (hWnd, GWL_USERDATA, (LPARAM)ppks);

		GetClientRect (hWnd, &rc);

		// if lpCreateParams is NULL, this is the main window
		if (((LPCREATESTRUCT)lParam)->lpCreateParams == NULL) {
			ppks->hWndMain = hWnd;
			ppks->bMainWindow = TRUE;
			ppks->iToolHeight = g_iToolHeight; 
			ppks->iKeysHeight = 
				rc.bottom-rc.top-ppks->iToolHeight-STATUSBARHEIGHT;
			ppks->bGroupsVisible = FALSE;
			ppks->iGroupsPercent = g_iGroupsPercent;
			ppks->iGroupsHeight = 0;
			ppks->bLocalKeySet = TRUE;
			ppks->KeySetMain = NULL;
			ppks->KeySetDisp = NULL;
			ppks->kmConfig.ulOptionFlags = 
				KMF_ENABLECOMMITS|KMF_ENABLEDRAGOUT|
				KMF_ENABLEDROPIN|KMF_ENABLERELOADS;
			if (!g_bExpertMode) 
				ppks->kmConfig.ulOptionFlags |= KMF_NOVICEMODE;
			if (g_bMarginalAsInvalid) 
				ppks->kmConfig.ulOptionFlags |= KMF_MARGASINVALID;
			ppks->kmConfig.ulDisableActions = 
				KM_ADDTOMAIN;

			ppks->hMenuKeyserver = NULL;
			ppks->hMenuKeyMan = GetMenu (hWnd);
			PKInitMenuKeyMan (ppks->hMenuKeyMan);

			// setup group manager
			ppks->hGM = PGPgmCreateGroupManager (g_Context, g_TLSContext,
					hWnd, IDC_TREELISTGROUP,
					0, 
					(rc.bottom-rc.top)-ppks->iGroupsHeight-
												STATUSBARHEIGHT,
					(rc.right-rc.left),
					ppks->iGroupsHeight);
			ppks->hWndTreeListGroups = PGPgmGetManagerWindow (ppks->hGM);
			ppks->gmConfig.ulOptionFlags = 0;
			if (!g_bExpertMode) 
				ppks->gmConfig.ulOptionFlags |= GMF_NOVICEMODE;
			ppks->gmConfig.ulDisableActions = 0;
			ppks->gmConfig.keysetMain = NULL;
			ppks->hWndToolBar = PKCreateToolbar (hWnd);
		}

		// otherwise this is a search window and lpCreateParams is 
		// the main KeySetRef
		else {
			hwndOpenSearch = hWnd;
			ppks->bMainWindow = FALSE;
			ppks->iToolHeight = SEARCHCONTROLHEIGHT;
			ppks->iKeysHeight = 
				rc.bottom-rc.top-ppks->iToolHeight-STATUSBARHEIGHT;
			ppks->bGroupsVisible = FALSE;
			ppks->iGroupsHeight = 0;
			ppks->iGroupsPercent = 0;
			ppks->bLocalKeySet = TRUE;
			ppks->KeySetMain = 
				(PGPKeySetRef)(((LPCREATESTRUCT)lParam)->lpCreateParams);
			ppks->KeySetDisp = NULL;
			ppks->kmConfig.ulOptionFlags = 
				KMF_ENABLEDRAGOUT;
			if (!g_bExpertMode) 
				ppks->kmConfig.ulOptionFlags |= KMF_NOVICEMODE;
			if (g_bMarginalAsInvalid) 
				ppks->kmConfig.ulOptionFlags |= KMF_MARGASINVALID;
			ppks->kmConfig.ulDisableActions = KM_ALLACTIONS;
			ppks->pGroupFile = NULL;

			ppks->hMenuKeyserver = NULL;
			ppks->hMenuKeyMan = NULL;

			if (InitSearch ()) {
				ppks->hWndSearchControl = CreateSearch (g_hInst, hWnd);

				SendMessage (ppks->hWndSearchControl, SEARCH_SET_LOCAL_KEYSET,
							0, (LPARAM)(ppks->KeySetMain));
				GetWindowRect (ppks->hWndSearchControl, &rc);
				ppks->iToolHeight = rc.bottom-rc.top;
			}
			ppks->hWndToolBar = NULL;
		}

		PKDialogListFunc (hWnd, TRUE, NULL, NULL);

		ppks->bGroupsFocused = FALSE;
		ppks->uKeySelectionFlags = 0;
		ppks->uGroupSelectionFlags = 0;
		ppks->hCursorOld = NULL;
		ppks->bGrabEnabled = FALSE;
		ppks->bGrabbed = FALSE;

		ppks->hKM = PGPkmCreateKeyManagerEx (g_Context, g_TLSContext,
							hWnd, IDC_TREELIST, 
							(HWNDLISTPROC)PKDialogListFunc, 
							0, ppks->iToolHeight, 
							rc.right-rc.left, 
							ppks->iKeysHeight, 0);

		ppks->kmConfig.lpszHelpFile = NULL;
		ppks->kmConfig.keyserver.structSize = 0;
		ppks->kmConfig.ulShowColumns = 0;
		ppks->kmConfig.ulHideColumns = 0;

		// create status bar
		ppks->bSearchInProgress = FALSE;
		ppks->iStatusValue = -2;
		ppks->iStatusDirection = 1;
		ppks->kmConfig.hWndStatusBar = CreateStatusWindow (
			WS_CHILD|WS_VISIBLE|SBS_SIZEGRIP,
			"",
			hWnd,
			IDC_STATUSBAR);
		
		// setup status bar
		if (ppks->bMainWindow)
			iWidths[0] = 0;
		else
			iWidths[0] = LOCKWIDTH;
		iWidths[1] = rc.right-TOTALLEDWIDTH-16;
		iWidths[2] = rc.right-16;
	
		SendMessage (ppks->kmConfig.hWndStatusBar, SB_SETPARTS, 3, 
					(LPARAM)iWidths);

		SendMessage (ppks->kmConfig.hWndStatusBar, SB_SETTEXT, 
					LOCK_PANE|SBT_OWNERDRAW|SBT_POPOUT, 0);

		SendMessage (ppks->kmConfig.hWndStatusBar, SB_SETTEXT, 
					PROGRESS_PANE|SBT_OWNERDRAW, 0);

		// load the lock icons
		if (himlLocks == NULL)
		{
			HDC		hDC;
			INT		iNumBits;
			HBITMAP	hBmp;

			hDC = GetDC (NULL);		// DC for desktop
			iNumBits = 
				GetDeviceCaps (hDC, BITSPIXEL) * GetDeviceCaps (hDC, PLANES);
			ReleaseDC (NULL, hDC);
	
			if (iNumBits <= 8) {
				himlLocks =	
					ImageList_Create (16, 16, ILC_COLOR|ILC_MASK, 
											NUM_BITMAPS, 0); 
				hBmp = 
					LoadBitmap (g_hInst, MAKEINTRESOURCE (IDB_IMAGES4BIT));
				ImageList_AddMasked (himlLocks, hBmp, RGB(255, 0, 255));
				DeleteObject (hBmp);
			}
			else {
				himlLocks =	
					ImageList_Create (16, 16, ILC_COLOR24|ILC_MASK, 
											NUM_BITMAPS, 0); 
				hBmp = 
					LoadBitmap (g_hInst, MAKEINTRESOURCE (IDB_IMAGES24BIT));
				ImageList_AddMasked (himlLocks, hBmp, RGB(255, 0, 255));
				DeleteObject (hBmp);
			}
		}

		// set the tooltip text for the lock icon (requires comctl 4.71)
///		if (!ppks->bMainWindow) {
///			CHAR szTip[32];
///			LoadString (g_hInst, IDS_LOCKICONTIP, szTip, sizeof(szTip));
///			SendMessage (ppks->kmConfig.hWndStatusBar, SB_SETTIPTEXT, 
///					(WPARAM)LOCK_PANE, (LPARAM)szTip);
///		}

		// initialize TLS info
		ppks->iTLSstatus = TLS_NOSEARCHYET;
		ppks->szTLSserver[0] = '\0';
		ppks->keyAuth = kInvalidPGPKeyRef;

		// set initial configuration of keymanager
		ppks->kmConfig.ulMask = PGPKM_ALLITEMS;
		PGPkmConfigure (ppks->hKM, &(ppks->kmConfig));
		
		ppks->hWndTreeList = PGPkmGetManagerWindow (ppks->hKM);

		if (ppks->bMainWindow) {
			PGPkmGetSelectedColumns (ppks->hKM, &ulColumns);
			ppks->gmConfig.lpszHelpFile = NULL;
			ppks->gmConfig.hKM = ppks->hKM;
			ppks->gmConfig.hWndStatusBar = ppks->kmConfig.hWndStatusBar;
			PGPgmConfigure (ppks->hGM, &(ppks->gmConfig));
			PGPclSetSplashParent (hWnd);
			PostMessage (hWnd, KM_M_RELOADKEYRINGS, 0, 0);
		}
		else {
			PGPkmLoadKeySet (ppks->hKM, ppks->KeySetDisp, ppks->KeySetMain);
			ppks->iStatusValue = -1;
			InvalidateRect (ppks->kmConfig.hWndStatusBar, NULL, FALSE);
		}

		// initialize enabled/disabled states of toolbar buttons
		PKSetToolbarButtonStates (ppks);

		// initialize the number of mouse wheel scroll lines
		sUpdateWheelScrollLines (ppks);

		return 0;

	case WM_CLOSE :
		ppks = (PGPKEYSSTRUCT*)GetWindowLong (hWnd, GWL_USERDATA);
		if (ppks->bMainWindow) {
			UINT uReason;

			if (!PGPkmOKToClose (ppks->hKM, &uReason)) {
				if (uReason == KMR_EXISTINGSPLITKEYDLGS) {
					if (!PKSplitKeyWarn (hWnd)) 
						break;
				}
			}

			if (bKeyHasBeenGenerated) {
				if (!PKBackupWarn (hWnd, &bMakeBackups)) 
					break;
			}

			PKScheduleNextCRLUpdate (g_Context, ppks->KeySetMain);

			PKSetPrivatePrefData (hWnd, 
					ppks->bGroupsVisible, ppks->iGroupsPercent,
					ppks->iToolHeight);

			WinHelp (hWnd, g_szHelpFile, HELP_QUIT, 0);
			if (hwndOpenSearch) 
				SendMessage (hwndOpenSearch, WM_CLOSE, 0, 0);
		}
		else {
			KillTimer (hWnd, LEDTIMER);
			hwndOpenSearch = NULL;
		}
		DestroyWindow (hWnd);
		return 0;

	case WM_ACTIVATE :
		if (LOWORD (wParam) != WA_INACTIVE) {
			ppks = (PGPKEYSSTRUCT*)GetWindowLong (hWnd, GWL_USERDATA);
			if (ppks->bMainWindow) {
				if (ppks->bGroupsFocused) 
					SetFocus (ppks->hWndTreeListGroups);
				else 
					SetFocus (ppks->hWndTreeList);
			}
			else {
				SetFocus (ppks->hWndTreeList);
			}
		}
		break;

	case WM_ENABLE :
		ppks = (PGPKEYSSTRUCT*)GetWindowLong (hWnd, GWL_USERDATA);

		if (ppks->bMainWindow) 
			PKEnableDlgList ((BOOL)wParam);

		if (wParam)
			ppks->kmConfig.ulOptionFlags &= ~KMF_DISABLEKEYPROPS;
		else
			ppks->kmConfig.ulOptionFlags |= KMF_DISABLEKEYPROPS;

		ppks->kmConfig.ulMask = PGPKM_OPTIONS;
		PGPkmConfigure (ppks->hKM, &(ppks->kmConfig));
		break;

	case WM_DESTROY :
		ppks = (PGPKEYSSTRUCT*)GetWindowLong (hWnd, GWL_USERDATA);

		if (ppks->hGM) {
			PGPgmDestroyGroupManager (ppks->hGM);
			ppks->hGM = NULL;
		}
	
		PGPkmDestroyKeyManager (ppks->hKM, ppks->bMainWindow);
		PGPgmDestroyGroupManager (ppks->hGM);

		if (ppks->bMainWindow) {
			if (PGPKeySetRefIsValid (ppks->KeySetMain))
				PGPFreeKeySet (ppks->KeySetMain);
			if (bMakeBackups) PKBackup (hWnd);
			PKDestroyToolbar (ppks->hWndToolBar);
			ImageList_Destroy (himlLocks);
			PostQuitMessage(0);
		}
		else {
			if (PGPKeySetRefIsValid (ppks->KeySetDisp))
				PGPFreeKeySet (ppks->KeySetDisp);
		}

		if (PGPKeySetRefIsValid (ppks->keysetAuth))
			PGPFreeKeySet (ppks->keysetAuth);

		PKDialogListFunc (hWnd, FALSE, NULL, NULL);
		pkFree (ppks);
		ppks=NULL;
		break;

	case WM_INITMENU :
		ppks = (PGPKEYSSTRUCT*)GetWindowLong (hWnd, GWL_USERDATA);
		if ((HMENU)wParam == ppks->hMenuKeyMan) 
			PKSetMainMenu (ppks);
		break;

	case WM_SIZE :
		ppks = (PGPKEYSSTRUCT*)GetWindowLong (hWnd, GWL_USERDATA);
		if (ppks->bGroupsVisible) {
			ppks->iGroupsHeight = HIWORD(lParam) * ppks->iGroupsPercent;
			ppks->iGroupsHeight /= 100;
			ppks->iKeysHeight = 
				HIWORD(lParam)-ppks->iToolHeight-STATUSBARHEIGHT-
				ppks->iGroupsHeight-GRABBARHEIGHT;
			SetWindowPos (ppks->hWndTreeList, NULL, 
				0, 0, 
				LOWORD(lParam), 
				ppks->iKeysHeight,
				SWP_NOMOVE|SWP_NOZORDER);
			SetWindowPos (ppks->hWndTreeListGroups, NULL, 0,
				HIWORD(lParam)-ppks->iGroupsHeight-STATUSBARHEIGHT,
				LOWORD(lParam),
				ppks->iGroupsHeight,
				SWP_NOZORDER);
		}
		else {
			ppks->iKeysHeight = 
				HIWORD(lParam)-ppks->iToolHeight-STATUSBARHEIGHT;

			SetWindowPos (ppks->hWndTreeList, NULL, 
				0, 0, 
				LOWORD(lParam), 
				ppks->iKeysHeight,
				SWP_NOMOVE|SWP_NOZORDER);
		}

		SendMessage (ppks->kmConfig.hWndStatusBar, WM_SIZE, wParam, lParam);

		if (ppks->bMainWindow) 
			iWidths[0] = 0;
		else 
			iWidths[0] = LOCKWIDTH;
		iWidths[1] = LOWORD(lParam)-TOTALLEDWIDTH-16;
		iWidths[2] = LOWORD(lParam)-16;
		SendMessage (ppks->kmConfig.hWndStatusBar, SB_SETPARTS, 3, 
					(LPARAM)iWidths);

		if (ppks->hWndSearchControl) {
			SendMessage (ppks->hWndSearchControl, WM_SIZE, wParam, 
				MAKELPARAM (LOWORD(lParam), ppks->iToolHeight));
			InvalidateRect (ppks->hWndSearchControl, NULL, FALSE);
		}

		if (ppks->hWndToolBar) {
			SetWindowPos (ppks->hWndToolBar, NULL, 
				0, 0, 
				LOWORD(lParam), 
				ppks->iToolHeight - TOOLBARYOFFSET,
				SWP_NOMOVE|SWP_NOZORDER); 
		}

		return 0;

	case WM_MOUSEMOVE :
		ppks = (PGPKEYSSTRUCT*)GetWindowLong (hWnd, GWL_USERDATA);
		if (ppks->bGroupsVisible) {
			INT		iY, iVSize, iYGrab;
			iY = HIWORD(lParam);
			if (ppks->bGrabbed) {
				GetClientRect (hWnd, &rc);
				iVSize = rc.bottom-rc.top;
				if (iVSize <= 0) break;

				iY = (iVSize-STATUSBARHEIGHT-GRABBARHEIGHT) -iY;
				if ((iY > 50) && (iY < (iVSize -50))) {
					ppks->iGroupsPercent = (100 * iY) / iVSize;
					ppks->iGroupsHeight = iY;
				}

				ppks->iKeysHeight = 
					iVSize-ppks->iToolHeight-STATUSBARHEIGHT-
					ppks->iGroupsHeight-GRABBARHEIGHT;
				SetWindowPos (ppks->hWndTreeList, NULL, 
					0, 0, 
					rc.right-rc.left, 
					ppks->iKeysHeight,
					SWP_NOMOVE|SWP_NOZORDER);
				SetWindowPos (ppks->hWndTreeListGroups, NULL, 0,
					iVSize-ppks->iGroupsHeight-STATUSBARHEIGHT,
					rc.right-rc.left,
					ppks->iGroupsHeight,
					SWP_NOZORDER);
			}
			else {
				iYGrab = ppks->iToolHeight+ppks->iKeysHeight;
				if ((iY >= iYGrab-2) && 
					(iY <= iYGrab+GRABBARHEIGHT+2)) {
					ppks->bGrabEnabled = TRUE;
					ppks->hCursorOld = 
						SetCursor (LoadCursor (NULL, IDC_SIZENS));
					SetCapture (hWnd);
				}
				else {
					if (ppks->bGrabEnabled) {
						ppks->bGrabEnabled = FALSE;
						SetCursor (ppks->hCursorOld);
						ReleaseCapture ();
					}
				}
			}
		}
		break;

	case WM_LBUTTONDOWN :
		ppks = (PGPKEYSSTRUCT*)GetWindowLong (hWnd, GWL_USERDATA);
		if (ppks->bGrabEnabled) {
			ppks->bGrabbed = TRUE;
		}
		break;

	case WM_LBUTTONUP :
		ppks = (PGPKEYSSTRUCT*)GetWindowLong (hWnd, GWL_USERDATA);
		if (ppks->bGrabbed) {
			ppks->bGrabbed = FALSE;
		}
		break;

	case WM_SYSCOLORCHANGE :
		ppks = (PGPKEYSSTRUCT*)GetWindowLong (hWnd, GWL_USERDATA);
		PostMessage (ppks->hWndTreeList, WM_SYSCOLORCHANGE, 0, 0);
		break;

	case WM_SETTINGCHANGE :
		ppks = (PGPKEYSSTRUCT*)GetWindowLong (hWnd, GWL_USERDATA);
		if (wParam == SPI_SETWHEELSCROLLLINES)
			sUpdateWheelScrollLines (ppks);
		else 
			PostMessage (ppks->hWndTreeList, WM_SYSCOLORCHANGE, 0, 0);
		break;

	case WM_DRAWITEM :
		if (wParam == IDC_STATUSBAR) {
			ppks = (PGPKEYSSTRUCT*)GetWindowLong (hWnd, GWL_USERDATA);
			sDrawStatus ((LPDRAWITEMSTRUCT)lParam, ppks);
			return TRUE;
		}
		break;

	case WM_COPYDATA :
		ppks = (PGPKEYSSTRUCT*)GetWindowLong (hWnd, GWL_USERDATA);
		sImportData (ppks, (PCOPYDATASTRUCT)lParam);
		return TRUE;

	case WM_NOTIFY :
		ppks = (PGPKEYSSTRUCT*)GetWindowLong (hWnd, GWL_USERDATA);
		{
		LPNMHDR pnmh = (LPNMHDR) lParam;

		// did it come from the keys treelist ?
		if (wParam == IDC_TREELIST) {
			if (pnmh->code == TLN_SELCHANGED) {
				PGPgmPerformAction (ppks->hGM, GM_UNSELECTALL);
			}

			PGPkmDefaultNotificationProc (ppks->hKM, lParam);

			switch (pnmh->code) {
			case TLN_CONTEXTMENU :
				ppks->bGroupsFocused = FALSE;
				ppks->uKeySelectionFlags = ((LPNM_TREELIST)lParam)->flags;
				PKContextMenu (ppks, hWnd, 
					((LPNM_TREELIST)lParam)->ptDrag.x,
					((LPNM_TREELIST)lParam)->ptDrag.y);
				break;

			case TLN_SELCHANGED :
				ppks->bGroupsFocused = FALSE;
				ppks->uKeySelectionFlags = ((LPNM_TREELIST)lParam)->flags;
				PKSetToolbarButtonStates (ppks);
				break;

			case TLN_KEYDOWN :
				if (ppks->bGroupsVisible) {
					switch (((TL_KEYDOWN*)lParam)->wVKey) {
					case VK_TAB :
						SendMessage (ppks->kmConfig.hWndStatusBar, 
								SB_SETTEXT, STATUS_MSG_PANE, (LPARAM)"");
						ppks->bGroupsFocused = !ppks->bGroupsFocused;
						if (ppks->bGroupsFocused) 
							SetFocus (ppks->hWndTreeListGroups);
						else 
							SetFocus (ppks->hWndTreeList);
						PKSetToolbarButtonStates (ppks);

⌨️ 快捷键说明

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