clprefsgeneral.c
来自「PGP8.0源码 请认真阅读您的文件包然后写出其具体功能」· C语言 代码 · 共 397 行
C
397 行
/*____________________________________________________________________________
Copyright (C) 2002 PGP Corporation
All rights reserved.
CLprefsGeneral.c - handle general PGP preferences dialogs
$Id: CLprefsGeneral.c,v 1.18 2002/08/06 20:09:19 dallen Exp $
____________________________________________________________________________*/
#include "pgpPFLConfig.h"
// project header files
#include "PGPclx.h"
#include "CLprefs.h"
#define MAXCACHETIMELIMIT 360000
#define MAXWIPEPASSES 32
#define MAXWIPEPASSESDIGITS 2
#define COMMENTBLOCK_MAX_LENGTH 60
// external globals
extern HINSTANCE g_hInst;
static DWORD aGeneralIds[] = { // Help IDs
IDC_ENCRYPTTOSELF, IDH_PGPCLPREF_ENCRYPTTOSELF,
IDC_USEFASTKEYGEN, IDH_PGPCLPREF_USEFASTKEYGEN,
IDC_SHOWTRAYICON, IDH_PGPCLPREF_SHOWTRAYICON,
IDC_COMMENTBLOCK, IDH_PGPCLPREF_COMMENTBLOCK,
IDC_CACHELOGGEDON, IDH_PGPCLPREF_CACHELOGGEDON,
IDC_CACHETIMED, IDH_PGPCLPREF_CACHETIMED,
IDC_CACHEDURATION, IDH_PGPCLPREF_CACHEDURATION,
IDC_SHARECACHE, IDH_PGPCLPREF_SHARECACHE,
IDC_NOCACHE, IDH_PGPCLPREF_NOCACHING,
IDC_NUMPASSES, IDH_PGPCLPREF_NUMWIPEPASSES,
IDC_NUMPASSESSPIN, IDH_PGPCLPREF_NUMWIPEPASSESSPIN,
IDC_NUMPASSESTEXT, IDH_PGPCLPREF_NUMWIPEPASSES,
IDC_WIPECONFIRM, IDH_PGPCLPREF_WIPECONFIRM,
IDC_WIPEONDELETE, IDH_PGPCLPREF_WIPEONDELETE,
0,0
};
// _____________________________________________________
//
// Message processing function for General prefs property sheet
LRESULT WINAPI
CLGeneralPropDlgProc (
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
PPREFSDLGSTRUCT ppds;
switch (uMsg) {
case WM_INITDIALOG:
{
UINT u, uSec;
INT i;
CHAR sz[64];
PGPBoolean b;
RECT rc;
PGPPrefRef prefref;
SetWindowLong (hwnd, GWL_USERDATA, ((PROPSHEETPAGE*)lParam)->lParam);
ppds = (PPREFSDLGSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);
if (ppds->bNeedsCentering)
{
PGPclCenterWindowOnMonitor (GetParent (hwnd), kPGPclWindowMonitor);
ppds->bNeedsCentering = FALSE;
}
prefref = CLGetPrefRef (ppds);
// initialize miscellaneous controls
if (ppds->bToolsPrefsEnabled)
{
CLLoadCheckBoxPref (hwnd, IDC_ENCRYPTTOSELF,
ppds, prefref, kPGPPrefEncryptToSelf);
}
else
{
CheckDlgButton (hwnd, IDC_ENCRYPTTOSELF, BST_UNCHECKED);
ShowWindow (GetDlgItem (hwnd, IDC_ENCRYPTTOSELF), SW_HIDE);
EnableWindow (GetDlgItem (hwnd, IDC_ENCRYPTTOSELF), FALSE);
}
CLLoadCheckBoxPref (hwnd, IDC_USEFASTKEYGEN,
ppds, prefref, kPGPPrefFastKeyGen);
CLLoadCheckBoxPref (hwnd, IDC_SHOWTRAYICON,
ppds, prefref, kPGPPrefShowTrayIcon);
SendDlgItemMessage (hwnd, IDC_COMMENTBLOCK, EM_SETLIMITTEXT,
COMMENTBLOCK_MAX_LENGTH, 0);
sz[0] = '\0';
PGPGetPrefStringBuffer (
prefref, kPGPPrefComment, sizeof(sz), sz);
SetDlgItemText (hwnd, IDC_COMMENTBLOCK, sz);
CLDisablePrefControl (hwnd, IDC_COMMENTBLOCK,
ppds, prefref, kPGPPrefComment);
// initialize caching controls
GetWindowRect (GetDlgItem (hwnd, IDC_CACHEDURATION), &rc);
MapWindowPoints (NULL, hwnd, (LPPOINT)&rc, 2);
ppds->gen.hwndCacheDuration =
CreateWindowEx (0, DATETIMEPICK_CLASS,
"DateTime",
WS_BORDER|WS_CHILD|WS_VISIBLE|WS_TABSTOP|
DTS_TIMEFORMAT,
rc.left, rc.top,
rc.right-rc.left, rc.bottom-rc.top,
hwnd, (HMENU)IDC_CACHEDURATION,
g_hInst, NULL);
SendMessage (ppds->gen.hwndCacheDuration, DTM_SETFORMAT, 0,
(LPARAM)"HH' : 'mm' : 'ss");
SetWindowPos (ppds->gen.hwndCacheDuration,
GetDlgItem (hwnd, IDC_NOCACHE),
0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
GetSystemTime (&(ppds->gen.stCacheDuration));
PGPGetPrefNumber (prefref, kPGPPrefCacheSeconds, &uSec);
u = uSec / 3600;
ppds->gen.stCacheDuration.wHour = u;
uSec -= (u * 3600);
u = uSec / 60;
ppds->gen.stCacheDuration.wMinute = u;
uSec -= (u * 60);
ppds->gen.stCacheDuration.wSecond = uSec;
ppds->gen.stCacheDuration.wMilliseconds = 0;
SendMessage (ppds->gen.hwndCacheDuration, DTM_SETSYSTEMTIME, GDT_VALID,
(LPARAM)&(ppds->gen.stCacheDuration));
// initialize cache type
PGPGetPrefNumber (prefref, kPGPPrefCacheType, &u);
switch (u) {
case kPGPPrefCacheTypeSeconds: i = IDC_CACHETIMED; break;
case kPGPPrefCacheTypeLogon: i = IDC_CACHELOGGEDON; break;
default: i = IDC_NOCACHE; break;
}
CheckRadioButton (hwnd, IDC_CACHELOGGEDON, IDC_NOCACHE, i);
CLDisablePrefControl (hwnd, IDC_CACHETIMED,
ppds, prefref, kPGPPrefCacheType);
CLDisablePrefControl (hwnd, IDC_CACHELOGGEDON,
ppds, prefref, kPGPPrefCacheType);
CLDisablePrefControl (hwnd, IDC_NOCACHE,
ppds, prefref, kPGPPrefCacheType);
if (u == kPGPPrefCacheTypeSeconds)
{
CLDisablePrefControl (ppds->gen.hwndCacheDuration, 0,
ppds, prefref, kPGPPrefCacheSeconds);
}
else
EnableWindow (ppds->gen.hwndCacheDuration, FALSE);
// initialize cache sharing
CLLoadCheckBoxPref (hwnd, IDC_SHARECACHE,
ppds, prefref, kPGPPrefShareCache);
if (u == kPGPPrefCacheTypeNone)
EnableWindow (GetDlgItem (hwnd, IDC_SHARECACHE), FALSE);
// initialize wipe preferences
if (ppds->bToolsPrefsEnabled)
{
SendDlgItemMessage (hwnd, IDC_NUMPASSESSPIN, UDM_SETRANGE,
0, (LPARAM)MAKELONG (MAXWIPEPASSES, 1));
SendDlgItemMessage (hwnd, IDC_NUMPASSES, EM_SETLIMITTEXT,
MAXWIPEPASSESDIGITS, 0);
PGPGetPrefNumber (prefref, kPGPPrefFileWipePasses, &u);
SendDlgItemMessage (hwnd, IDC_NUMPASSESSPIN, UDM_SETPOS,
0, (LPARAM)MAKELONG (u, 0));
CLDisablePrefControl (hwnd, IDC_NUMPASSES,
ppds, prefref, kPGPPrefFileWipePasses);
CLLoadCheckBoxPref (hwnd, IDC_WIPECONFIRM,
ppds, prefref, kPGPPrefWarnOnWipe);
b = CLLoadCheckBoxPref (hwnd, IDC_WIPEONDELETE,
ppds, prefref, kPGPPrefAutoWipeOnDelete);
}
else
{
CheckDlgButton (hwnd, IDC_WIPECONFIRM, BST_UNCHECKED);
CheckDlgButton (hwnd, IDC_WIPEONDELETE, BST_UNCHECKED);
ShowWindow (GetDlgItem (hwnd, IDC_WIPINGGROUP), SW_HIDE);
ShowWindow (GetDlgItem (hwnd, IDC_WIPINGICON), SW_HIDE);
ShowWindow (GetDlgItem (hwnd, IDC_NUMPASSESTEXT), SW_HIDE);
ShowWindow (GetDlgItem (hwnd, IDC_NUMPASSES), SW_HIDE);
ShowWindow (GetDlgItem (hwnd, IDC_NUMPASSESSPIN), SW_HIDE);
ShowWindow (GetDlgItem (hwnd, IDC_WIPECONFIRM), SW_HIDE);
ShowWindow (GetDlgItem (hwnd, IDC_WIPEONDELETE), SW_HIDE);
EnableWindow (GetDlgItem (hwnd, IDC_NUMPASSES), FALSE);
EnableWindow (GetDlgItem (hwnd, IDC_NUMPASSESSPIN), FALSE);
EnableWindow (GetDlgItem (hwnd, IDC_WIPECONFIRM), FALSE);
EnableWindow (GetDlgItem (hwnd, IDC_WIPEONDELETE), FALSE);
}
return TRUE;
}
case WM_HELP :
case WM_CONTEXTMENU :
return PGPclHtmlHelp (hwnd, uMsg, wParam, lParam,
(char*)kPGPclHelpFile, aGeneralIds);
case WM_COMMAND :
ppds = (PPREFSDLGSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);
switch (LOWORD (wParam)) {
case IDC_CACHELOGGEDON :
case IDC_CACHETIMED :
case IDC_NOCACHE :
{
PGPPrefRef prefref = CLGetPrefRef (ppds);
if (!CLDisablePrefControl (ppds->gen.hwndCacheDuration, 0, ppds,
prefref, kPGPPrefCacheSeconds))
{
EnableWindow (ppds->gen.hwndCacheDuration,
IsDlgButtonChecked (
hwnd, IDC_CACHETIMED) == BST_CHECKED);
}
if (!CLDisablePrefControl (GetDlgItem (hwnd, IDC_SHARECACHE),
0, ppds, prefref, kPGPPrefShareCache))
{
EnableWindow (GetDlgItem (hwnd, IDC_SHARECACHE),
IsDlgButtonChecked (
hwnd, IDC_NOCACHE) == BST_UNCHECKED);
}
break;
}
}
break;
case WM_NOTIFY :
switch (((NMHDR FAR *) lParam)->code) {
case PSN_HELP :
PGPclHtmlHelp (hwnd, kPGPclHelpContext, 0, 0,
(char*)kPGPclHelpFile, (DWORD*)IDH_PGPCLPREF_GENERALDIALOG);
break;
case PSN_APPLY :
{
PGPBoolean bPurge = FALSE;
UINT uTypeNew, uTypeOld;
UINT uSecsNew, uSecsOld;
PGPBoolean bShareNew, bShareOld;
UINT uNumPasses;
CHAR sz[64];
ppds = (PPREFSDLGSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);
if (ppds->bUseClientLibPrefs &&
!PGPPrefRefIsValid (ppds->prefref))
{
PGPclPeekClientLibPrefRefs (&ppds->prefref, NULL);
}
PGPGetPrefNumber (ppds->prefref, kPGPPrefCacheType, &uTypeOld);
PGPGetPrefNumber (ppds->prefref, kPGPPrefCacheSeconds, &uSecsOld);
PGPGetPrefBoolean (ppds->prefref, kPGPPrefShareCache, &bShareOld);
// caching prefs
if (IsDlgButtonChecked (hwnd, IDC_CACHELOGGEDON) == BST_CHECKED)
uTypeNew = kPGPPrefCacheTypeLogon;
else if (IsDlgButtonChecked (hwnd, IDC_CACHETIMED) == BST_CHECKED)
uTypeNew = kPGPPrefCacheTypeSeconds;
else
uTypeNew = kPGPPrefCacheTypeNone;
SendMessage (ppds->gen.hwndCacheDuration, DTM_GETSYSTEMTIME, 0,
(LPARAM)&(ppds->gen.stCacheDuration));
uSecsNew = ppds->gen.stCacheDuration.wHour * 3600;
uSecsNew += (ppds->gen.stCacheDuration.wMinute * 60);
uSecsNew += ppds->gen.stCacheDuration.wSecond;
if (uTypeNew == kPGPPrefCacheTypeSeconds)
{
if (uSecsNew != uSecsOld)
{
bPurge = TRUE;
PGPclErrorBox (hwnd, PGPSetPrefNumber (ppds->prefref,
kPGPPrefCacheSeconds, uSecsNew));
}
}
PGPclErrorBox (hwnd, PGPSetPrefNumber (ppds->prefref,
kPGPPrefCacheType, uTypeNew));
if (uTypeNew != uTypeOld)
bPurge = TRUE;
bShareNew = CLSaveCheckBoxPref (hwnd, IDC_SHARECACHE,
ppds->prefref, kPGPPrefShareCache);
if (bShareNew != bShareOld)
bPurge = TRUE;
if (bPurge)
{
PGPPurgePassphraseCache (ppds->context);
PGPPurgeKeyDBCache (ppds->context);
}
// miscellaneous prefs
CLSaveCheckBoxPref (hwnd, IDC_ENCRYPTTOSELF,
ppds->prefref, kPGPPrefEncryptToSelf);
CLSaveCheckBoxPref (hwnd, IDC_USEFASTKEYGEN,
ppds->prefref, kPGPPrefFastKeyGen);
if (!GetDlgItemText (hwnd, IDC_COMMENTBLOCK, sz, sizeof(sz)))
sz[0] = '\0';
PGPclErrorBox (hwnd,
PGPSetPrefString (ppds->prefref, kPGPPrefComment, sz));
// wiping prefs
uNumPasses = GetDlgItemInt (hwnd, IDC_NUMPASSES, NULL, FALSE);
if (uNumPasses < 1)
uNumPasses = 1;
if (uNumPasses > MAXWIPEPASSES)
uNumPasses = MAXWIPEPASSES;
PGPclErrorBox (hwnd, PGPSetPrefNumber (ppds->prefref,
kPGPPrefFileWipePasses, uNumPasses));
CLSaveCheckBoxPref (hwnd, IDC_WIPECONFIRM,
ppds->prefref, kPGPPrefWarnOnWipe);
CLSaveCheckBoxPref (hwnd, IDC_WIPEONDELETE,
ppds->prefref, kPGPPrefAutoWipeOnDelete);
CLSaveCheckBoxPref (hwnd, IDC_SHOWTRAYICON,
ppds->prefref, kPGPPrefShowTrayIcon);
ppds->bPrefsModified = TRUE;
ppds->returnErr = kPGPError_NoErr;
SetWindowLong (hwnd, DWL_MSGRESULT, PSNRET_NOERROR);
return TRUE;
}
case PSN_KILLACTIVE :
{
UINT uCache;
ppds = (PPREFSDLGSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);
SendMessage (ppds->gen.hwndCacheDuration, DTM_GETSYSTEMTIME, 0,
(LPARAM)&(ppds->gen.stCacheDuration));
uCache = ppds->gen.stCacheDuration.wHour * 3600;
uCache += (ppds->gen.stCacheDuration.wMinute * 60);
uCache += ppds->gen.stCacheDuration.wSecond;
if (uCache > MAXCACHETIMELIMIT)
{
PGPclMessageBox (hwnd, IDS_CAPTIONINFO,
IDS_INVALIDCACHEVALUE, MB_OK|MB_ICONINFORMATION);
SetFocus (ppds->gen.hwndCacheDuration);
SetWindowLong (hwnd, DWL_MSGRESULT, TRUE);
return TRUE;
}
if (IsDlgButtonChecked (hwnd, IDC_CACHETIMED) == BST_CHECKED)
{
if (uCache == 0)
{
PGPclMessageBox (hwnd, IDS_CAPTIONINFO,
IDS_INVALIDCACHEDURATION,
MB_OK|MB_ICONINFORMATION);
SetFocus (ppds->gen.hwndCacheDuration);
SetWindowLong (hwnd, DWL_MSGRESULT, TRUE);
return TRUE;
}
}
SetWindowLong (hwnd, DWL_MSGRESULT, FALSE);
return TRUE;
}
}
}
return FALSE;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?