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

📄 pkmsgprc.c

📁 PGP8.0源码 请认真阅读您的文件包然后写出其具体功能
💻 C
📖 第 1 页 / 共 5 页
字号:

		{
			TL_WATERMARK	tlwm;
			HDC				hdc;
			INT				iNumBits;

			// Determine if display will support watermark
			hdc = GetDC (NULL);
			iNumBits = GetDeviceCaps (hdc, BITSPIXEL) * 
					GetDeviceCaps (hdc, PLANES);
			ReleaseDC (NULL, hdc);

			if (iNumBits > 8)
			{
				BITMAP	bmp;

				// Associate the watermark bitmap with the tree view control.
				if (IsNull (s_hbmpWatermark))
				{
					s_hbmpWatermark = LoadBitmap (
							g_hinst, MAKEINTRESOURCE(IDB_KEYSWATERMARK));
				}
				GetObject (s_hbmpWatermark, sizeof(bmp), &bmp);

				tlwm.hbm		= s_hbmpWatermark;
				tlwm.iAlpha		= 0;
				tlwm.crBkgrnd	= RGB (255,255,255);	// white
				tlwm.size.cx	= bmp.bmWidth;
				tlwm.size.cy	= bmp.bmHeight;
				tlwm.ulFlags	= TLWM_KEEPASPECTRATIO | 
								  TLWM_CONSTANTBKGRND |
								  TLWM_SHRINKONLY;

				TreeList_SetWatermarkBmp (ppks->hwndTreeList, &tlwm);

				if (ppks->uFlags & PK_MAINWINDOW)
				{
					tlwm.hbm = NULL;
					TreeList_SetWatermarkBmp (ppks->hwndTreeListGroups, &tlwm);
				}
			}
		}

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

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

		// initialize the token icon
		sCheckForTokens (ppks->hwndMain);

		return 0;
	}

	case WM_QUERYENDSESSION :
		ppks = (PGPKEYSSTRUCT*)GetWindowLong (hwnd, GWL_USERDATA);
		if (ppks->uFlags & PK_MAINWINDOW) 
		{
			if (s_bKeyHasBeenGenerated) 
				return FALSE;
		}
		return TRUE;

	case WM_CLOSE :
		ppks = (PGPKEYSSTRUCT*)GetWindowLong (hwnd, GWL_USERDATA);
		if (ppks->uFlags & PK_MAINWINDOW) 
		{
			if (PKExistSplitKeyDialog (ppks))
			{
				PKSplitKeyWarn (hwnd);
				break;
			}

			PKAutoBackup (ppks);

			if (s_bKeyHasBeenGenerated) 
			{
				BOOL	bMakeBackups;

				if (!PKBackupWarn (hwnd, TRUE, &bMakeBackups)) 
					break;

				if (bMakeBackups)
				{
					if (!PKUserBackup (hwnd, ppks->keydbMain))
						break;
				}
			}

			PGPclScheduleNextCRLUpdate (g_context, ppks->keydbMain);

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

			HtmlHelp (hwnd, NULL, HH_CLOSE_ALL, 0);
			if (s_hwndOpenSearch) 
				SendMessage (s_hwndOpenSearch, WM_CLOSE, 0, 0);

			PKSendMessageWindowList (PK_M_CLOSEWINDOW, 0, 0);
		}
		else
		{
			SendMessage (hwnd, PK_M_CLOSEWINDOW, 0, 0);
		}

		DestroyWindow (hwnd);
		return 0;

	case PK_M_CLOSEWINDOW :
		ppks = (PGPKEYSSTRUCT*)GetWindowLong (hwnd, GWL_USERDATA);
		if (ppks->uFlags & PK_PDAWINDOW)
		{
			PGPKeyDBRef		keydb;
			PGPPDASTRUCT*	pPDA;

			keydb = PGPPeekKeySetKeyDB (ppks->keysetDisp);
			pPDA = sPDAFromWindow (hwnd);

			if (PGPKeyDBRefIsValid (keydb))
			{
				if (IsntNull (pPDA))
				{
					sSaveKeySetToPdaFile (hwnd, pPDA->hmod,
							PGPPeekKeyDBRootKeySet (keydb), TRUE); 
				}
			}
		}
		else if (ppks->uFlags & PK_SEARCHWINDOW) 
		{
			KillTimer (hwnd, LEDTIMER);
			s_hwndOpenSearch = NULL;
		}
		break;

	case WM_ACTIVATE :
		if (LOWORD (wParam) == WA_INACTIVE) 
			g_hwndActive = NULL;
		else
		{
			g_hwndActive = hwnd;
			ppks = (PGPKEYSSTRUCT*)GetWindowLong (hwnd, GWL_USERDATA);
			if (ppks->uFlags & PK_MAINWINDOW) 
			{
				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->uFlags & PK_KEYWINDOW) 
			PKEnableWindowList ((BOOL)wParam);

		PKEnableAllObjectPropertiesWindows (ppks, (BOOL)wParam);
		break;

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

		// we're not shutting down
		if (!wParam)
		{
			// check if we are the reason
			if (s_bKeyHasBeenGenerated)
			{
				// explain to user
				PKMessageBox (hwnd, IDS_CAPTIONINFO, 
						IDS_CLOSEKEYSFIRST, MB_OK|MB_ICONINFORMATION);
			}
			break;
		}

		// otherwise session is ending
		PKAutoBackup (ppks);
		PGPclScheduleNextCRLUpdate (g_context, ppks->keydbMain);

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

		// fall through

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

		if (ppks->hGM) 
		{
			PGPgmDestroyGroupManager (ppks->hGM);
			ppks->hGM = NULL;
		}
	
		RevokeDragDrop (ppks->hwndTreeList);
		PKReleaseDropTarget (ppks->pDropTarget);  
		CoLockObjectExternal ((IUnknown*)ppks->pDropTarget, FALSE, TRUE);
		DragAcceptFiles (ppks->hwndTreeList, FALSE);

		PKDeleteAllObjectPropertiesWindows (ppks);
		if (ppks->uFlags & PK_MAINWINDOW)
			PGPclKeyListDestroy (ppks->hKL, TRUE);
		else
			PGPclKeyListDestroy (ppks->hKL, FALSE);

		ppks->hKL = NULL;

		if (ppks->uFlags & PK_MAINWINDOW) 
		{
			PGPPrefRef		prefref;

			// this is because we've just saved a bunch of 
			// prefs concerning columns, windows, etc.
			if (IsntPGPError (PGPclPeekClientLibPrefRefs (&prefref, NULL)))
				PGPclFlushClientLibPrefs (prefref, NULL);

			if (PGPKeyDBRefIsValid (ppks->keydbMain))
				PGPFreeKeyDB (ppks->keydbMain);

			PKAddRemoveWindowList (hwnd, FALSE, FALSE, FALSE);
			PKPostMessageWindowList (WM_DESTROY, 0, 0);

			PKDestroyToolbar (ppks->hwndToolBar);

			if (IsntNull (s_hbmpWatermark))
				DeleteObject (s_hbmpWatermark);

			PostQuitMessage(0);
		}
		else 
		{
			PGPKeyDBRef		keydb;

			keydb = PGPPeekKeySetKeyDB (ppks->keysetDisp);
			if (PGPKeySetRefIsValid (ppks->keysetDisp))
				PGPFreeKeySet (ppks->keysetDisp);

			if (ppks->uFlags & PK_FILEWINDOW)
			{
				if (PGPKeyDBRefIsValid (ppks->keydbMain))
					PGPFreeKeyDB (ppks->keydbMain);
			}
			else if (ppks->uFlags & PK_PDAWINDOW)
			{
				PGPPDASTRUCT*	pPDA;

				pPDA = sPDAFromWindow (hwnd);
				if (IsntNull (pPDA))
					pPDA->hwnd = NULL;

				if (PGPKeyDBRefIsValid (keydb))
					PGPFreeKeyDB (keydb);
			}
			else
			{
				if (PGPKeyDBRefIsValid (keydb) &&
					(keydb != ppks->keydbMain))
				{
					PGPFreeKeyDB (keydb);
				}
			}
			
			PKAddRemoveWindowList (hwnd, FALSE, FALSE, FALSE);
		}

		if (PGPKeyDBRefIsValid (ppks->keydbAuth))
			PGPFreeKeyDB (ppks->keydbAuth);

		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 :
	{
		INT		iWidths[3];

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

		if ((HIWORD(lParam) == 0) || (LOWORD(lParam) == 0))
		{
			RECT	rc;

			GetClientRect (hwnd, &rc);
			lParam = MAKELPARAM (rc.right, rc.bottom);
		}

		if (ppks->bGroupsVisible) 
		{
			ppks->iGroupsHeight = HIWORD(lParam) * ppks->iGroupsPercent;
			ppks->iGroupsHeight /= 100;
			ppks->iKeysHeight = 
				HIWORD(lParam)-ppks->iToolHeight-s_uStatusBarHeight-
				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-s_uStatusBarHeight,
				LOWORD(lParam),
				ppks->iGroupsHeight,
				SWP_NOZORDER);
		}
		else 
		{
			ppks->iKeysHeight = 
				HIWORD(lParam)-ppks->iToolHeight-s_uStatusBarHeight;

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

		SendMessage (ppks->klConfig.hwndStatusBar, WM_SIZE, wParam, lParam);

		if ((ppks->uFlags & PK_MAINWINDOW) && (g_uNumTokens > 0))
			iWidths[0] = ICONWIDTH;
		else if (ppks->uFlags & PK_SEARCHWINDOW) 
			iWidths[0] = ICONWIDTH;
		else 
			iWidths[0] = 0;

		iWidths[1] = LOWORD(lParam)-TOTALLEDWIDTH-16;
		iWidths[2] = LOWORD(lParam)-16;
		SendMessage (ppks->klConfig.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) 
		{
			INT		iToolHeight;

			iToolHeight = HIWORD(lParam) - s_uStatusBarHeight;
			if (iToolHeight > ppks->iToolHeight)
				iToolHeight = ppks->iToolHeight;

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

		return 0;
	}

	case WM_MOUSEMOVE :
	{
		RECT	rc;

		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-s_uStatusBarHeight-GRABBARHEIGHT) -iY;
				if ((iY > 50) && (iY < (iVSize -50))) 
				{
					ppks->iGroupsPercent = (100 * iY) / iVSize;
					ppks->iGroupsHeight = iY;
				}

				ppks->iKeysHeight = 
					iVSize-ppks->iToolHeight-s_uStatusBarHeight-
					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-s_uStatusBarHeight,
					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_TREELISTKEYS) 
		{
			if (pnmh->code == TLN_SELCHANGED) 
				PGPgmPerformAction (ppks->hGM, GM_UNSELECTALL);

			PGPclKeyListDefaultNotificationProc (ppks->hKL, 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_LISTITEMCLICKED : 
				if (PKIsActionEnabled (ppks, KM_CERTIFY))
					PKPerformAction (ppks, KM_CERTIFY);
				break;

			case TLN_ITEMDBLCLICKED :
				if (PKIsActionEnabled (ppks, KM_PROPERTIES))
					PKPerformAction (ppks, KM_PROPERTIES);
				break;

			case TLN_KEYDOWN :
				switch (((TL_KEYDOWN*)lParam)->wVKey) {
				case VK_TAB :
					if (ppks->bGroupsVisible) 
					{
						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;

				case VK_DELETE :
					SendMessage (hwnd, WM_COMMAND, IDM_DELETEKEY, 0);
					break;
				}
				break;

			case TLN_BEGINDRAG :
				PKEnableDropTarget (ppks->pDropTarget, FALSE);
				PKDragAndDrop (ppks);
				PKEnableDropTarget (ppks->pDropTarget, 
						!ppks->bReadOnly && (ppks->uFlags & PK_KEYWINDOW));
				break;

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

			default :
				break;
			}
		}

		// did it come from the group treelist ?
		else if (wParam == IDC_TREELISTGROUP) 
		{
			if (pnmh->code == TLN_SELCHANGED) 
				PKPerformAction (ppks, KM_UNSELECTALL);

⌨️ 快捷键说明

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