📄 pkmsgprc.c
字号:
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 + -