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

📄 pkmsgprc.c

📁 PGP8.0源码 请认真阅读您的文件包然后写出其具体功能
💻 C
📖 第 1 页 / 共 5 页
字号:
			PGPgmDefaultNotificationProc (ppks->hGM, lParam);

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

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

			case TLN_KEYDOWN :
				switch (((TL_KEYDOWN*)lParam)->wVKey) {
				case VK_TAB :
					SendMessage (ppks->klConfig.hwndStatusBar, SB_SETTEXT, 
									STATUS_MSG_PANE, (LPARAM)"");
					ppks->bGroupsFocused = !ppks->bGroupsFocused;
					if (ppks->bGroupsFocused) 
						SetFocus (ppks->hwndTreeListGroups);
					else 
						SetFocus (ppks->hwndTreeList);
					PKSetToolbarButtonStates (ppks);
					break;
				}
				break;

			case TLN_HELP :
				PostMessage (hwnd, WM_COMMAND, IDM_HELPTOPICS, 0);
				break;

			default :
				break;
			}
		}

		// did it come from the search window keyserver code ?
		else if ((ppks->hwndSearchControl) &&
				 (pnmh->hwndFrom == ppks->hwndSearchControl)) 
		{
			switch (pnmh->code)
			{
				case SEARCH_REQUEST_SIZING: 
				{
					PSIZEREQUEST pRequest = (PSIZEREQUEST)lParam;
					RECT rc;
					GetClientRect (ppks->hwndTreeList, &rc);
					if ((rc.bottom - rc.top) > (pRequest->delta + 50))
						return TRUE;
					else
						return FALSE;
				}

				case SEARCH_SIZING: 
				{
					PSIZEREQUEST pRequest = (PSIZEREQUEST)lParam;
					RECT rcTool, rcMain;
					GetWindowRect (pnmh->hwndFrom, &rcTool);
					ppks->iToolHeight = rcTool.bottom-rcTool.top;

					GetClientRect (hwnd, &rcMain);

					SetWindowPos (ppks->hwndTreeList, NULL, 
						0, ppks->iToolHeight, 
						rcMain.right-rcMain.left, 
						rcMain.bottom-rcMain.top
							-ppks->iToolHeight
							-s_uStatusBarHeight, 
						SWP_NOZORDER);
					InvalidateRect (hwnd, NULL, FALSE);
					break;
				}

				case SEARCH_DISPLAY_KEYSET: 
				{
					PSEARCHRESULT	pResult = (PSEARCHRESULT)lParam;
					PGPKeySetRef	KeySetPrevious;
					HCURSOR			hCursorOld;
					CHAR			sz[64];

					// stop LEDs, if going
					if (ppks->bSearchInProgress) 
					{
						KillTimer (hwnd, LEDTIMER);
						ppks->bSearchInProgress = FALSE;
						ppks->iStatusValue = -1;
						InvalidateRect (ppks->klConfig.hwndStatusBar, 
											NULL, FALSE);
						UpdateWindow (ppks->klConfig.hwndStatusBar);
					}

					// if error, post message and drop out
					if (IsPGPError (pResult->error) && 
						(pResult->error != 
								kPGPError_ServerPartialSearchResults)) 
					{
						KillTimer (hwnd, LEDTIMER);
						ppks->bSearchInProgress = FALSE;
						ppks->iStatusValue = -1;
						SendMessage (ppks->klConfig.hwndStatusBar, 
								SB_SETTEXT, STATUS_MSG_PANE, (LPARAM)"");
						InvalidateRect (ppks->klConfig.hwndStatusBar, 
										NULL, FALSE);
						PGPclErrorBox (NULL, pResult->error);
						break;
					}

					// load new keyset into window
					LoadString (g_hinst, IDS_SYNCINGKEYSETS, sz, sizeof(sz));
					SendMessage (ppks->klConfig.hwndStatusBar, SB_SETTEXT, 
									STATUS_MSG_PANE, (LPARAM)sz);
					UpdateWindow (ppks->klConfig.hwndStatusBar);

					hCursorOld = SetCursor (LoadCursor (NULL, IDC_WAIT));

					KeySetPrevious = ppks->keysetDisp;
					ppks->keysetDisp = (PGPKeySetRef)(pResult->pData);

					if (!(pResult->flags & FLAG_SEARCH_CURRENT))
					{
						if (pResult->flags & FLAG_SEARCH_LOCAL_KEYSET) 
						{
							if (!ppks->bLocalKeySet)
								PKDeleteAllObjectPropertiesWindows (ppks);
							ppks->bLocalKeySet = TRUE;
						}
						else 
						{
							PKDeleteAllObjectPropertiesWindows (ppks);
							ppks->bLocalKeySet = FALSE;
						}
					}

					if (ppks->bLocalKeySet)
					{
						ppks->klConfig.keyserver.protocol = 
											kPGPKeyServerProtocol_Invalid;
						ppks->klConfig.uOptions =
							kPGPclKeyList_EnableReloads |
							kPGPclKeyList_EnableDragOut;
						if (!g_bExpertMode)
							ppks->klConfig.uOptions |= 
									kPGPclKeyList_GreenDotMode;
						if (g_bMarginalAsInvalid) 
							ppks->klConfig.uOptions |= 
									kPGPclKeyList_MarginalIsInvalid;
						if (ppks->bReadOnly)
							ppks->klConfig.uOptions |= 
									kPGPclKeyList_ReadOnly;
					}
					else 
					{
						memcpy (&ppks->klConfig.keyserver, 
								&pResult->keyserver, 
								sizeof(PGPKeyServerEntry));
						ppks->klConfig.uOptions = 
							kPGPclKeyList_EnableDragOut;
						if (!g_bExpertMode)
							ppks->klConfig.uOptions |= 
									kPGPclKeyList_GreenDotMode;
						if (g_bMarginalAsInvalid) 
							ppks->klConfig.uOptions |= 
									kPGPclKeyList_MarginalIsInvalid;
						if (pResult->flags & FLAG_AREA_PENDING) 
							ppks->klConfig.uOptions |= 
									kPGPclKeyList_PendingBucket;
					}
					ppks->klConfig.uMask = kPGPclKeyList_Options |
											kPGPclKeyList_KeyServer;
					PGPclKeyListConfigure (ppks->hKL, &(ppks->klConfig));

					// display keyset
					PGPclKeyListLoadKeys (ppks->hKL, 
							ppks->keydbMain, ppks->keysetDisp);
					SetFocus (ppks->hwndTreeList);

					// sync downloaded keyset with main and redisplay
					if (PGPKeySetRefIsValid (ppks->keysetDisp))
					{
						PGPCheckKeyRingSigs (ppks->keysetDisp, 
								ppks->keydbMain, TRUE, NULL, NULL);
						PGPclKeyListLoadKeys (ppks->hKL, 
								ppks->keydbMain, ppks->keysetDisp);
					}

					sDisplayKSKeyResult (ppks->keysetDisp, 
										ppks->klConfig.hwndStatusBar,
										pResult->error);

					// stop LEDs, if going
					if (ppks->bSearchInProgress) 
					{
						KillTimer (hwnd, LEDTIMER);
						ppks->bSearchInProgress = FALSE;
						ppks->iStatusValue = -1;
						InvalidateRect (ppks->klConfig.hwndStatusBar, 
											NULL, FALSE);
					}

					if (KeySetPrevious) 
					{
						PGPKeyDBRef		keydbPrevious;

						keydbPrevious = PGPPeekKeySetKeyDB (KeySetPrevious);
						PGPFreeKeySet (KeySetPrevious);
						if (!(pResult->flags & FLAG_SEARCH_CURRENT) &&
							(PGPKeyDBRefIsValid (keydbPrevious)) &&
							(keydbPrevious != ppks->keydbMain))
						{
							PGPFreeKeyDB (keydbPrevious);
						}
					}
					
					SetCursor (hCursorOld);

					SendMessage (ppks->hwndSearchControl, 
											SEARCH_SET_FOCUS, 0, 0);
					break;
				}

				case SEARCH_PROGRESS :
				{
					PSEARCHPROGRESS pProgress = (PSEARCHPROGRESS)lParam;

					if (pProgress->total) 
					{
						// we're starting a query
						if (!ppks->bSearchInProgress) 
						{
							ppks->bSearchInProgress = TRUE;
							ppks->klConfig.uOptions |= 
													kPGPclKeyList_DisableStatusBar;
							ppks->klConfig.uMask = kPGPclKeyList_Options;
							PGPclKeyListConfigure (ppks->hKL, &(ppks->klConfig));

							ppks->iStatusValue = 0;
							if (pProgress->step == SEARCH_PROGRESS_INFINITE) 
							{
								ppks->iStatusDirection = 1;
								SetTimer (hwnd, LEDTIMER, 
													LEDTIMERPERIOD, NULL);
							}
							else 
							{
								ppks->iStatusDirection = 0;
								ppks->iStatusValue = 0;
							}
							// reset icon to "unlocked"
							SendMessage (ppks->klConfig.hwndStatusBar, 
									SB_SETICON, ICON_PANE, 
									(LPARAM)g_hiconOpenLock);
							// signal that we're not authenticated yet
							ppks->iTLSstatus = TLS_NOTAUTHENTICATED;
						}
						else 
						{
							if (pProgress->step != SEARCH_PROGRESS_INFINITE) 
							{
								ppks->iStatusDirection = 0;
								ppks->iStatusValue = 
									(pProgress->step * 9) / pProgress->total;
								InvalidateRect (ppks->klConfig.hwndStatusBar, 
													NULL, FALSE);
							}
						}
					}
					else 
					{
						if (ppks->bSearchInProgress) 
						{
							KillTimer (hwnd, LEDTIMER);
							ppks->bSearchInProgress = FALSE;
							ppks->iStatusValue = -1;
							InvalidateRect (ppks->klConfig.hwndStatusBar, 
											NULL, FALSE);
						}
					}

					SendMessage (ppks->klConfig.hwndStatusBar, SB_SETTEXT, 
							STATUS_MSG_PANE, (LPARAM)(pProgress->message));
					break;
				}

				case SEARCH_SECURE_STATUS :
				{
					PSEARCHSECURE	pSecure = (PSEARCHSECURE)lParam;
					
					if (pSecure->secure) 
					{
						SendMessage (ppks->klConfig.hwndStatusBar, 
								SB_SETICON, ICON_PANE, 
								(LPARAM)g_hiconClosedLock);

						ppks->iTLSstatus = TLS_AUTHENTICATED;

						lstrcpy (ppks->szTLSserver, pSecure->szServerName);
						ppks->tlsCipher = pSecure->tlsCipher;

						if (PGPKeyDBRefIsValid (ppks->keydbAuth))
							PGPFreeKeyDB (ppks->keydbAuth);
						PGPNewKeyDB (g_context, &ppks->keydbAuth);
						PGPCopyKeyDBObj (pSecure->keyAuth, 
								ppks->keydbAuth, &ppks->keyAuth);
					}
					else 
					{
						SendMessage (ppks->klConfig.hwndStatusBar, 
								SB_SETICON, ICON_PANE, 
								(LPARAM)g_hiconOpenLock);
						ppks->iTLSstatus = TLS_NOTAUTHENTICATED;
					}
	
					break;
				}

				case SEARCH_ABORT :
				{
					PSEARCHABORT pAbort = (PSEARCHABORT)lParam;
					CHAR sz[256];
					if (ppks->bSearchInProgress) 
					{
						KillTimer (hwnd, LEDTIMER);
						ppks->bSearchInProgress = FALSE;
						ppks->iStatusValue = -1;
						InvalidateRect (ppks->klConfig.hwndStatusBar, 
											NULL, FALSE);
					}
					LoadString (g_hinst, IDS_SEARCHABORTED, 
									sz, sizeof(sz));
					SendMessage (ppks->klConfig.hwndStatusBar, SB_SETTEXT,
									STATUS_MSG_PANE, (LPARAM)sz);
					SendMessage (ppks->hwndSearchControl, 
											SEARCH_SET_FOCUS, 0, 0);
					break;
				}

				default :
					break;
			}

			if (!ppks->bSearchInProgress) 
			{
				ppks->klConfig.uOptions &= ~kPGPclKeyList_DisableStatusBar;
				ppks->klConfig.uMask = kPGPclKeyList_Options;
				PGPclKeyListConfigure (ppks->hKL, &(ppks->klConfig));
			}
		}

		// did it come from the status bar?
		else if ((ppks->klConfig.hwndStatusBar) &&
				 (pnmh->hwndFrom == ppks->klConfig.hwndStatusBar)) 
		{
			if (pnmh->code == NM_CLICK) 
			{
				POINT pt;
				GetCursorPos (&pt);
				ScreenToClient (ppks->klConfig.hwndStatusBar, &pt);
				if (pt.x <= ICONWIDTH) 
				{
					if ((ppks->uFlags & PK_MAINWINDOW) &&
						(g_uNumTokens > 0))
					{
						if (PKTokenProperties (ppks))
							PostMessage (hwnd, PK_M_RELOADKEYRINGS, 0, 0);
					}
					else if (ppks->uFlags & PK_SEARCHWINDOW) 
					{
						switch (ppks->iTLSstatus) {
						case TLS_NOSEARCHYET :
							PKMessageBox (hwnd, IDS_CAPTIONINFO, 
									IDS_NOCONNECTIONYET, 
									MB_OK|MB_ICONINFORMATION);
							break;

						case TLS_NOTAUTHENTICATED :
							PKMessageBox (hwnd, IDS_CAPTIONINFO, 
									IDS_CONNECTIONNOTAUTHENTICATED, 
									MB_OK|MB_ICONINFORMATION);
							break;

						case TLS_AUTHENTICATED :
							PGPclConfirmRemoteAuthentication (
									g_context, hwnd, ppks->szTLSserver,
									ppks->keyAuth, ppks->tlsCipher,
									ppks->keydbMain, 
									kPGPclAuthShowAuthentication);
							break;
						}
					}
				}
			}
		}

		// else assume it's from the tooltip control of the toolbar
		else if (pnmh->code == TTN_NEEDTEXT) 
			PKGetToolbarTooltipText ((LPTOOLTIPTEXT)lParam);
		}
		break;

	case WM_PAINT :
		{
			HDC			hdc;
			PAINTSTRUCT ps;
			RECT		rc;
			HPEN		hpen;
			HPEN		hpenOld;
			INT			iWidth;

			ppks = (PGPKEYSSTRUCT*)GetWindowLong (hwnd, GWL_USERDATA);

			hdc = BeginPaint (hwnd, &ps);

			if (ppks->hwndToolBar && (ppks->iToolHeight > 0)) 
			{
				GetWindowRect (hwnd, &rc);
				iWidth = rc.right-rc.left;

				hpen = CreatePen (PS_SOLID, 0, GetSysColor (COLOR_3DSHADOW));
				hpenOld = SelectObject (hdc, hpen);
				MoveToEx (hdc, 0, 0, NULL);
				LineTo (hdc, iWidth, 0);

				hpen = CreatePen (PS_SOLID, 0, GetSysColor (COLOR_3DHILIGHT));
				DeleteObject (SelectObject (hdc, hpen));
				MoveToEx (hdc, 0, 1, NULL);
				LineTo (hdc, iWidth, 1);

				DeleteObject (SelectObject (hdc, hpenOld));
			}

			EndPaint (hwnd, &ps);
		}
		return 0;

	case WM_TIMER :
		ppks = (PGPKEYSSTRUCT*)GetWindowLong (hwnd, GWL_USERDATA);

		// it's time to load the keyring from disk
		if (wParam == RELOADTIMER) 
		{
			KillTimer (hwnd, wParam);

			// do the actual loading
			if (sReloadKeyrings (ppks))
			{
				// repaint window
				InvalidateRect (hwnd, NULL, FALSE);
				PKSetToolbarButtonStates (ppks);

				// store the file names for backup purposes
				PKKeyDBOpened (ppks);

				// do some first-time post-processing
				if (s_bFirstKeyringLoad) 
				{
					s_bFirstKeyringLoad = FALSE;

					// import key files if passed from the command line
					sProcessFileList (GetCommandLine (), ppks, TRUE, TRUE);

					// display groups if groups were displayed last session
					if (g_bShowGroups) 
					{
						PostMessage (hwnd, WM_COMMAND,
								MAKEWPARAM (IDM_VIEWGROUPS, 0), 0);
					}

					// compute when we should next update CRLs
					PGPclScheduleNextCRLUpdate (g_context, ppks->keydbMain);

					SetFocus (ppks->hwndTreeList);
				}

				// if there is an open search window, notify it of change
				if ((ppks->uFlags & PK_KEYWINDOW) && s_hwndOpenSearch)
				{
					PostMessage (s_hwndOpenSearch, 
							PK_M_RELOADKEYRINGS, 0, (LPARAM)(ppks->keydbMain));
				}

				// notify the token dialog of change
				PKReloadTokenProperties (TRUE);
			}
		}
		else if (wParam == LEDTIMER)
		{
			ppks->iStatusValue += ppks->iStatusDirection;
			if (ppks->iStatusValue <= 0) 
			{
				ppks->iStatusValue = 0;
				ppks->iStatusDirection = 1;
			}
			else if (ppks->iStatusValue >= NUMLEDS-1) 
			{
				ppks->iStatusValue = NUMLEDS-1;
				ppks->iStatusDirection = -1;
			}
			InvalidateRect (ppks->klConfig.hwndStatusBar, NULL, FALSE);
		}
		break;

	case PK_M_REFRESHKEYRINGS :
		ppks = (PGPKEYSSTRUCT*)GetWindowLong (hwnd, GWL_USERDATA);

		if ((HWND)wParam != hwnd)
		{
			if (lParam)
			{
				if (ppks->uFlags & PK_MAINWINDOW)
				{
					PGPclKeyListLoadKeys (ppks->hKL, NULL, NULL);
					PGPclKeyListLoadKeys (
						ppks->hKL, ppks->keydbMain, 
						PGPPeekKeyDBRootKeySet (ppks->keydbMain));
				}
				else if (ppks->uFlags & PK_SEARCHWINDOW)
				{
					if (ppks->bLocalKeySet)
					{
						PGPclKeyListLoadKeys (ppks->hKL, NULL, NULL);
						PGPclKeyListLoadKeys (
							ppks->hKL, ppks->keydbMain, ppks->keysetDisp);
					}
				}
			}
			else
				PGPclKeyListReloadKeys (ppks->hKL, FALSE);
		}

		if ((ppks->uFlags & PK_MAINWINDOW) &&
			(ppks->bGroupsVisible))
		{
			PGPgmReLoadGroups (ppks->hGM);
		}

		if (ppks->uFlags & PK_PDAWINDOW)
		{
			PGPKeyDBRef		keydbDefault;

			if (IsntPGPError (PGPclOpenDefaultKeyrings (
			

⌨️ 快捷键说明

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