📄 pkmenu.c
字号:
CheckMenuItem (hMP, IDM_VIEWADK, MF_BYCOMMAND|MF_UNCHECKED);
if (ppks->iToolHeight > 0)
CheckMenuItem (hMP, IDM_VIEWTOOLBAR, MF_BYCOMMAND|MF_CHECKED);
else
CheckMenuItem (hMP, IDM_VIEWTOOLBAR, MF_BYCOMMAND|MF_UNCHECKED);
// "Keys" menu
hMP = GetSubMenu (ppks->hMenuKeyMan, MENU_KEYS);
sSetItem (hMP, IDM_CERTIFYKEY, PGPkmIsActionEnabled (hKM, KM_CERTIFY));
sSetItem (hMP, IDM_ENABLEKEY, PGPkmIsActionEnabled (hKM, KM_ENABLE));
sSetItem (hMP, IDM_DISABLEKEY, PGPkmIsActionEnabled (hKM, KM_DISABLE));
sSetItem (hMP, IDM_REVOKEKEY, PGPkmIsActionEnabled (hKM, KM_REVOKE));
sSetItem (hMP, IDM_REVERIFY,
PGPkmIsActionEnabled (hKM, KM_REVERIFYSIGS));
if (PGPkmIsActionEnabled (hKM, KM_SETASPRIMARY)) {
sSetMenuDefaultOrPrimary (hMP, FALSE);
EnableMenuItem (hMP, IDM_SETASDEFAULT, MF_BYCOMMAND|MF_ENABLED);
}
else {
sSetMenuDefaultOrPrimary (hMP, TRUE);
sSetItem (hMP, IDM_SETASDEFAULT,
PGPkmIsActionEnabled (hKM, KM_SETASDEFAULT));
}
sSetItem (hMP, IDM_CREATEKEY, (!g_bReadOnly) && g_bKeyGenEnabled);
sSetItem (hMP, IDM_SPLITKEY, PGPkmIsActionEnabled (hKM, KM_SPLITKEY));
sSetItem (hMP, IDM_IMPORTKEYS, PGPkmIsActionEnabled (hKM, KM_IMPORT));
sSetItem (hMP, IDM_EXPORTKEYS, PGPkmIsActionEnabled (hKM, KM_EXPORT));
sSetItem (hMP, IDM_PROPERTIES,
PGPkmIsActionEnabled (hKM, KM_PROPERTIES));
// "Add" popup submenu
hMP = GetSubMenu (hMP, SUBMENU_ADD);
sSetItem (hMP, IDM_ADDUSERID,
PGPkmIsActionEnabled (hKM, KM_ADDUSERID));
sSetItem (hMP, IDM_ADDPHOTOID,
PGPkmIsActionEnabled (hKM, KM_ADDPHOTOID));
sSetItem (hMP, IDM_ADDREVOKER,
PGPkmIsActionEnabled (hKM, KM_ADDREVOKER));
sSetItem (hMP, IDM_ADDCERTIFICATE,
g_bX509CertRequestEnabled &&
PGPkmIsActionEnabled (hKM, KM_ADDCERTIFICATE));
// "Servers" menu
hMP = GetSubMenu (ppks->hMenuKeyMan, MENU_SERVER);
DeleteMenu (hMP, SENDTOSERVERPOS, MF_BYPOSITION);
LoadString (g_hInst, IDS_SENDTOSERVERMENU, sz, sizeof(sz));
if (PGPkmIsActionEnabled (hKM, KM_SENDTOSERVER)) {
ppks->hMenuKeyserver = sCreateKeyserverMenu ();
InsertMenu (hMP, SENDTOSERVERPOS, MF_BYPOSITION|MF_POPUP|MF_STRING,
(UINT)ppks->hMenuKeyserver, sz);
}
else {
InsertMenu (hMP, SENDTOSERVERPOS, MF_BYPOSITION|MF_STRING,
IDM_SENDTOSERVERPOPUP, sz);
sSetItem (hMP, IDM_SENDTOSERVERPOPUP, FALSE);
}
sSetItem (hMP, IDM_GETFROMSERVER,
PGPkmIsActionEnabled (hKM, KM_GETFROMSERVER));
sSetItem (hMP, IDM_RETRIEVECERTIFICATE,
PGPkmIsActionEnabled (hKM, KM_RETRIEVECERTIFICATE));
// "Groups" menu
hMP = GetSubMenu (ppks->hMenuKeyMan, MENU_GROUPS);
if (ppks->bGroupsVisible) {
sSetItem (hMP, IDM_GROUPPROPERTIES,
PGPgmIsActionEnabled (hGM, GM_PROPERTIES));
}
else {
sSetItem (hMP, IDM_GROUPPROPERTIES, FALSE);
}
}
// ______________________________________________________
//
// Put up appropriate context menu on basis of key idx
// of currently focused item. Called in response to right
// mouse click.
//
// hWnd = handle of parent window
// uSelFlags = bits indicate what types of objects are selected
// x, y = mouse position when right button clicked (screen coords)
VOID
PKContextMenu (
PGPKEYSSTRUCT* ppks,
HWND hWnd,
INT x,
INT y)
{
HMENU hMC;
HMENU hMCS;
HMENU hMenuTrackPopup;
HKEYMAN hKM;
HGROUPMAN hGM;
UINT uAddIndex;
CHAR sz[64];
if (ppks->bGroupsFocused) {
hGM = ppks->hGM;
switch (ppks->uGroupSelectionFlags) {
case 0 :
hMC = NULL;
break;
case PGPGM_GROUPFLAG :
hMC = LoadMenu (g_hInst, MAKEINTRESOURCE (IDR_MENUGROUP));
sSetItem (hMC, IDM_PASTEKEY,
PGPgmIsActionEnabled (hGM, GM_PASTE));
sSetItem (hMC, IDM_DELETEKEY,
PGPgmIsActionEnabled (hGM, GM_DELETE));
sSetItem (hMC, IDM_GETFROMSERVER,
PGPgmIsActionEnabled (hGM, GM_GETFROMSERVER));
sSetItem (hMC, IDM_GROUPPROPERTIES,
PGPgmIsActionEnabled (hGM, GM_PROPERTIES));
hMenuTrackPopup = GetSubMenu (hMC, 0);
break;
case PGPGM_KEYFLAG :
hMC = LoadMenu (g_hInst, MAKEINTRESOURCE (IDR_MENUGROUPKEY));
sSetItem (hMC, IDM_PASTEKEY,
PGPgmIsActionEnabled (hGM, GM_PASTE));
sSetItem (hMC, IDM_DELETEKEY,
PGPgmIsActionEnabled (hGM, GM_DELETE));
sSetItem (hMC, IDM_FINDKEY,
PGPgmIsActionEnabled (hGM, GM_LOCATEKEYS));
sSetItem (hMC, IDM_GETFROMSERVER,
PGPgmIsActionEnabled (hGM, GM_GETFROMSERVER));
sSetItem (hMC, IDM_PROPERTIES,
PGPgmIsActionEnabled (hGM, GM_LOCATEKEYS));
hMenuTrackPopup = GetSubMenu (hMC, 0);
break;
default :
hMC = LoadMenu (g_hInst, MAKEINTRESOURCE (IDR_MENUGROUP));
sSetItem (hMC, IDM_PASTEKEY, FALSE);
sSetItem (hMC, IDM_DELETEKEY,
PGPgmIsActionEnabled (hGM, GM_DELETE));
sSetItem (hMC, IDM_GETFROMSERVER,
PGPgmIsActionEnabled (hGM, GM_GETFROMSERVER));
sSetItem (hMC, IDM_GROUPPROPERTIES, FALSE);
hMenuTrackPopup = GetSubMenu (hMC, 0);
break;
}
}
else {
hKM = ppks->hKM;
switch (ppks->uKeySelectionFlags) {
case 0 :
hMC = LoadMenu (g_hInst, MAKEINTRESOURCE (IDR_MENUNONE));
sSetItem (hMC, IDM_PASTEKEY,
PGPkmIsActionEnabled (hKM, KM_PASTE));
hMenuTrackPopup = GetSubMenu (hMC, 0);
break;
case PGPKM_KEYFLAG :
if (ppks->bMainWindow) {
hMC = LoadMenu (g_hInst, MAKEINTRESOURCE (IDR_MENUKEY));
uAddIndex = 6;
}
else {
if (ppks->bLocalKeySet) {
hMC = LoadMenu (g_hInst,
MAKEINTRESOURCE (IDR_MENUKEYSEARCHLOCAL));
uAddIndex = 6;
}
else {
hMC = LoadMenu (g_hInst,
MAKEINTRESOURCE (IDR_MENUKEYSEARCHSERVER));
uAddIndex = 7;
}
sSetItem (hMC, IDM_ADDTOMAIN,
PGPkmIsActionEnabled (hKM, KM_ADDTOMAIN));
}
hMenuTrackPopup = GetSubMenu (hMC, 0);
sSetItem (hMC, IDM_COPYKEY,
PGPkmIsActionEnabled (hKM, KM_COPY));
sSetItem (hMC, IDM_PASTEKEY,
PGPkmIsActionEnabled (hKM, KM_PASTE));
sSetItem (hMC, IDM_DELETEKEY,
PGPkmIsActionEnabled (hKM, KM_DELETE));
sSetItem (hMC, IDM_DELETESERVER,
PGPkmIsActionEnabled (hKM, KM_DELETEFROMSERVER));
sSetItem (hMC, IDM_CERTIFYKEY,
PGPkmIsActionEnabled (hKM, KM_CERTIFY));
sSetItem (hMC, IDM_ENABLEKEY,
PGPkmIsActionEnabled (hKM, KM_ENABLE));
if (ppks->bLocalKeySet)
sSetItem (hMC, IDM_DISABLEKEY,
PGPkmIsActionEnabled (hKM, KM_DISABLE));
else
sSetItem (hMC, IDM_DISABLEKEY,
PGPkmIsActionEnabled (hKM, KM_DISABLEONSERVER));
sSetItem (hMC, IDM_SPLITKEY,
PGPkmIsActionEnabled (hKM, KM_SPLITKEY));
sSetItem (hMC, IDM_REVOKEKEY,
PGPkmIsActionEnabled (hKM, KM_REVOKE));
sSetItem (hMC, IDM_REVERIFY,
PGPkmIsActionEnabled (hKM, KM_REVERIFYSIGS));
sSetItem (hMC, IDM_SETASDEFAULT,
PGPkmIsActionEnabled (hKM, KM_SETASDEFAULT));
sSetItem (hMC, IDM_EXPORTKEYS,
PGPkmIsActionEnabled (hKM, KM_EXPORT));
LoadString (g_hInst, IDS_SENDTOSERVERMENU, sz, sizeof(sz));
if (PGPkmIsActionEnabled (hKM, KM_SENDTOSERVER)) {
ppks->hMenuKeyserver = sCreateKeyserverMenu ();
InsertMenu (hMenuTrackPopup, 13,
MF_BYPOSITION|MF_POPUP|MF_STRING,
(UINT)ppks->hMenuKeyserver, sz);
}
else {
InsertMenu (hMC, 13, MF_BYPOSITION|MF_STRING,
IDM_SENDTOSERVERPOPUP, sz);
sSetItem (hMenuTrackPopup, IDM_SENDTOSERVERPOPUP, FALSE);
}
sSetItem (hMC, IDM_GETFROMSERVER,
PGPkmIsActionEnabled (hKM, KM_GETFROMSERVER));
sSetItem (hMC, IDM_PROPERTIES,
PGPkmIsActionEnabled (hKM, KM_PROPERTIES));
// take care of "Add" popup submenu
hMCS = GetSubMenu (hMenuTrackPopup, uAddIndex);
sSetItem (hMCS, IDM_ADDUSERID,
PGPkmIsActionEnabled (hKM, KM_ADDUSERID));
sSetItem (hMCS, IDM_ADDPHOTOID,
PGPkmIsActionEnabled (hKM, KM_ADDPHOTOID));
sSetItem (hMCS, IDM_ADDREVOKER,
PGPkmIsActionEnabled (hKM, KM_ADDREVOKER));
sSetItem (hMCS, IDM_ADDCERTIFICATE,
g_bX509CertRequestEnabled &&
PGPkmIsActionEnabled (hKM, KM_ADDCERTIFICATE));
break;
case PGPKM_UIDFLAG :
hMC = LoadMenu (g_hInst, MAKEINTRESOURCE (IDR_MENUUID));
sSetItem (hMC, IDM_DELETEKEY,
PGPkmIsActionEnabled (hKM, KM_DELETE));
sSetItem (hMC, IDM_CERTIFYKEY,
PGPkmIsActionEnabled (hKM, KM_CERTIFY));
sSetItem (hMC, IDM_SETASDEFAULT,
PGPkmIsActionEnabled (hKM, KM_SETASPRIMARY));
sSetItem (hMC, IDM_PROPERTIES,
PGPkmIsActionEnabled (hKM, KM_PROPERTIES));
hMenuTrackPopup = GetSubMenu (hMC, 0);
// take care of "Add" popup submenu
uAddIndex = 4;
hMCS = GetSubMenu (hMenuTrackPopup, uAddIndex);
sSetItem (hMCS, IDM_ADDCERTIFICATE,
g_bX509CertRequestEnabled &&
PGPkmIsActionEnabled (hKM, KM_ADDCERTIFICATE));
break;
case PGPKM_CERTFLAG :
hMC = LoadMenu (g_hInst, MAKEINTRESOURCE (IDR_MENUCERT));
sSetItem (hMC, IDM_DELETEKEY,
PGPkmIsActionEnabled (hKM, KM_DELETE));
sSetItem (hMC, IDM_REVOKEKEY,
PGPkmIsActionEnabled (hKM, KM_REVOKE));
sSetItem (hMC, IDM_GETFROMSERVER,
PGPkmIsActionEnabled (hKM, KM_GETFROMSERVER));
sSetItem (hMC, IDM_PROPERTIES,
PGPkmIsActionEnabled (hKM, KM_PROPERTIES));
hMenuTrackPopup = GetSubMenu (hMC, 0);
break;
default :
hMC = LoadMenu (g_hInst, MAKEINTRESOURCE (IDR_MENUPROMISCUOUS));
sSetItem (hMC, IDM_DELETEKEY,
PGPkmIsActionEnabled (hKM, KM_DELETE));
sSetItem (hMC, IDM_CERTIFYKEY,
PGPkmIsActionEnabled (hKM, KM_CERTIFY));
sSetItem (hMC, IDM_PROPERTIES,
PGPkmIsActionEnabled (hKM, KM_PROPERTIES));
hMenuTrackPopup = GetSubMenu (hMC, 0);
break;
}
}
if (!hMC) return;
TrackPopupMenu (hMenuTrackPopup, TPM_LEFTALIGN | TPM_RIGHTBUTTON,
x, y, 0, hWnd, NULL);
DestroyMenu (hMC);
}
// ______________________________________________________
//
// Put up keyserver menu for send to server button in toolbar
//
// hWnd = handle of parent window
VOID
PKToolbarKeyserverMenu (
HWND hWnd,
LPRECT lprect)
{
HMENU hMenuKeyserver;
POINT pt;
hMenuKeyserver = sCreateKeyserverMenu ();
GetCursorPos (&pt);
TrackPopupMenu (hMenuKeyserver,
TPM_LEFTALIGN|TPM_TOPALIGN|TPM_LEFTBUTTON,
lprect->left +2, lprect->bottom +4, 0, hWnd, NULL);
DestroyMenu (hMenuKeyserver);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -