clnewuser.c
来自「PGP8.0源码 请认真阅读您的文件包然后写出其具体功能」· C语言 代码 · 共 842 行 · 第 1/2 页
C
842 行
/*____________________________________________________________________________
Copyright (C) 2002 PGP Corporation
All rights reserved.
CLnewuser.c - handle initializing things for new user
$Id: CLnewuser.c,v 1.11 2002/10/21 19:54:17 pbj Exp $
____________________________________________________________________________*/
#include "pgpPFLConfig.h"
// project header files
#include "PGPclx.h"
#include "pgpWin32IPC.h"
#include <commdlg.h>
#define NEWUSER_CANCEL 0
#define NEWUSER_DISABLE 1
#define NEWUSER_EXISTINGKEYRINGS 2
#define NEWUSER_NEWUSER 3
#define NEWUSERWIZ_INTRO 0
#define NEWUSERWIZ_ENABLE 1
#define NEWUSERWIZ_TYPE 2
#define NEWUSERWIZ_FILES 3
#define NEWUSERWIZ_DONE 4
#define NUM_WIZ_PAGES 5
// external globals
extern HINSTANCE g_hInst;
// typedefs
typedef struct
{
PGPContextRef context;
PGPtlsContextRef tlscontext;
PGPPrefRef prefref;
HWND hwndWiz;
HWND hwndParent;
HBITMAP hbitmapIntro;
HBITMAP hbitmapDone;
HPALETTE hpaletteIntro;
HPALETTE hpaletteDone;
HFONT hfontIntro;
HFONT hfontInterior;
BOOL bEnabled;
BOOL bNewUser;
BOOL bFinishSelected;
CHAR szPubring[MAX_PATH];
CHAR szSecring[MAX_PATH];
} NEWUSERSTRUCT, *PNEWUSERSTRUCT;
// ____________________________________
//
// let user browse to keyring
static BOOL
sBrowseKeyring (
HWND hwnd,
BOOL bSecring,
LPSTR pszFile,
INT iLen)
{
CHAR szInitDir[MAX_PATH];
CHAR szFile[MAX_PATH];
CHAR szFilter[128];
CHAR szTitle[128];
CHAR szDefExt[16];
OPENFILENAME ofn;
CHAR* p;
if (bSecring)
{
LoadString (g_hInst, IDS_PRIVKEYCAPTION, szTitle, sizeof(szTitle));
LoadString (g_hInst, IDS_DEFPRIVRINGEXT, szDefExt, sizeof(szDefExt));
LoadString (g_hInst, IDS_PRIVKEYRINGFILTER, szFilter, sizeof(szFilter));
}
else
{
LoadString (g_hInst, IDS_PUBKEYCAPTION, szTitle, sizeof(szTitle));
LoadString (g_hInst, IDS_DEFPUBRINGEXT, szDefExt, sizeof(szDefExt));
LoadString (g_hInst, IDS_PUBKEYRINGFILTER, szFilter, sizeof(szFilter));
}
while (p = strrchr (szFilter, '@')) *p = '\0';
lstrcpy (szInitDir, pszFile);
p = strrchr (szInitDir, '\\');
if (p)
*p = '\0';
szFile[0] = '\0';
ofn.lStructSize = sizeof (ofn);
ofn.hwndOwner = hwnd;
ofn.hInstance = (HANDLE)g_hInst;
ofn.lpstrFilter = szFilter;
ofn.lpstrCustomFilter = (LPTSTR)NULL;
ofn.nMaxCustFilter = 0L;
ofn.nFilterIndex = 1L;
ofn.lpstrFile = szFile;
ofn.nMaxFile = iLen;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = szInitDir;
ofn.lpstrTitle = szTitle;
ofn.Flags = OFN_HIDEREADONLY|OFN_SHAREAWARE|OFN_NOCHANGEDIR;
ofn.nFileOffset = 0;
ofn.nFileExtension = 0;
ofn.lpstrDefExt = szDefExt;
ofn.lCustData = 0;
if (GetOpenFileName (&ofn))
{
lstrcpy (pszFile, szFile);
return TRUE;
}
return FALSE;
}
// ______________________________________________
//
// Dialog procedure for handling beginning introductory panel
static LRESULT WINAPI
sNewUserWizIntroDlgProc (
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
BOOL bReturnCode = FALSE;
PNEWUSERSTRUCT pnus = NULL;
switch (uMsg) {
case WM_INITDIALOG:
{
PROPSHEETPAGE *ppspMsgRec = (PROPSHEETPAGE *) lParam;
pnus = (PNEWUSERSTRUCT) ppspMsgRec->lParam;
SetWindowLong (hwnd, GWL_USERDATA, (LPARAM)pnus);
// center dialog on screen
PGPclCenterWindowOnMonitor (GetParent(hwnd), kPGPclWindowMonitor);
SendDlgItemMessage (hwnd, IDC_HEADING, WM_SETFONT,
(WPARAM)pnus->hfontIntro, (LPARAM)FALSE);
break;
}
case WM_ACTIVATE :
InvalidateRect (hwnd, NULL, TRUE);
break;
case WM_PAINT :
pnus = (PNEWUSERSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);
if (pnus->hpaletteIntro)
{
PAINTSTRUCT ps;
HDC hDC = BeginPaint (hwnd, &ps);
SelectPalette (hDC, pnus->hpaletteIntro, FALSE);
RealizePalette (hDC);
EndPaint (hwnd, &ps);
}
break;
case WM_NOTIFY:
{
LPNMHDR pnmh = (LPNMHDR) lParam;
switch(pnmh->code) {
case PSN_SETACTIVE:
pnus = (PNEWUSERSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);
PostMessage(GetParent(hwnd),
PSM_SETWIZBUTTONS, 0, PSWIZB_NEXT);
SendDlgItemMessage(hwnd, IDC_WIZBITMAP, STM_SETIMAGE,
IMAGE_BITMAP, (LPARAM) pnus->hbitmapIntro);
SetWindowLong(hwnd, DWL_MSGRESULT, 0L);
bReturnCode = TRUE;
break;
}
break;
}
}
return bReturnCode;
}
// ______________________________________________
//
// Dialog procedure for enabling PGP panel
static LRESULT WINAPI
sNewUserWizEnableDlgProc (
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
BOOL bReturnCode = FALSE;
PNEWUSERSTRUCT pnus = NULL;
switch (uMsg) {
case WM_INITDIALOG:
{
PROPSHEETPAGE *ppspMsgRec = (PROPSHEETPAGE *) lParam;
pnus = (PNEWUSERSTRUCT) ppspMsgRec->lParam;
SetWindowLong (hwnd, GWL_USERDATA, (LPARAM)pnus);
SendDlgItemMessage (hwnd, IDC_HEADING, WM_SETFONT,
(WPARAM)pnus->hfontInterior, (LPARAM)FALSE);
CheckRadioButton (hwnd,
IDC_ENABLEPGP, IDC_DISABLEPGP, IDC_ENABLEPGP);
break;
}
case WM_NOTIFY:
{
LPNMHDR pnmh = (LPNMHDR) lParam;
switch (pnmh->code) {
case PSN_SETACTIVE:
pnus = (PNEWUSERSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);
PostMessage(GetParent(hwnd),
PSM_SETWIZBUTTONS, 0, PSWIZB_NEXT|PSWIZB_BACK);
SetWindowLong(hwnd, DWL_MSGRESULT, 0L);
bReturnCode = TRUE;
break;
case PSN_KILLACTIVE :
pnus = (PNEWUSERSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);
if (IsDlgButtonChecked (hwnd, IDC_ENABLEPGP) == BST_CHECKED)
pnus->bEnabled = TRUE;
else
pnus->bEnabled = FALSE;
SetWindowLong (hwnd, DWL_MSGRESULT, 0L);
bReturnCode = TRUE;
break;
}
break;
}
}
return bReturnCode;
}
// ______________________________________________
//
// Dialog procedure for user type panel
static LRESULT WINAPI
sNewUserWizTypeDlgProc (
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
BOOL bReturnCode = FALSE;
PNEWUSERSTRUCT pnus = NULL;
switch (uMsg) {
case WM_INITDIALOG:
{
PROPSHEETPAGE *ppspMsgRec = (PROPSHEETPAGE *) lParam;
pnus = (PNEWUSERSTRUCT) ppspMsgRec->lParam;
SetWindowLong (hwnd, GWL_USERDATA, (LPARAM)pnus);
SendDlgItemMessage (hwnd, IDC_HEADING, WM_SETFONT,
(WPARAM)pnus->hfontInterior, (LPARAM)FALSE);
CheckRadioButton (hwnd,
IDC_NEWUSER, IDC_EXISTINGKEYRINGS, IDC_NEWUSER);
break;
}
case WM_NOTIFY:
{
LPNMHDR pnmh = (LPNMHDR) lParam;
switch (pnmh->code) {
case PSN_SETACTIVE:
pnus = (PNEWUSERSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);
PostMessage (GetParent (hwnd),
PSM_SETWIZBUTTONS, 0, PSWIZB_BACK|PSWIZB_NEXT);
if (!pnus->bEnabled)
SetWindowLong(hwnd, DWL_MSGRESULT, -1L); // skip page
else
SetWindowLong(hwnd, DWL_MSGRESULT, 0L);
bReturnCode = TRUE;
break;
case PSN_KILLACTIVE :
pnus = (PNEWUSERSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);
if (IsDlgButtonChecked (hwnd, IDC_NEWUSER) == BST_CHECKED)
pnus->bNewUser = TRUE;
else
pnus->bNewUser = FALSE;
SetWindowLong (hwnd, DWL_MSGRESULT, 0L);
bReturnCode = TRUE;
break;
}
break;
}
}
return bReturnCode;
}
// ______________________________________________
//
// Dialog procedure for keyring file selection panel
static LRESULT WINAPI
sNewUserWizFileDlgProc (
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
BOOL bReturnCode = FALSE;
PNEWUSERSTRUCT pnus = NULL;
switch (uMsg) {
case WM_INITDIALOG:
{
PROPSHEETPAGE *ppspMsgRec = (PROPSHEETPAGE *) lParam;
pnus = (PNEWUSERSTRUCT) ppspMsgRec->lParam;
SetWindowLong (hwnd, GWL_USERDATA, (LPARAM)pnus);
SendDlgItemMessage (hwnd, IDC_HEADING, WM_SETFONT,
(WPARAM)pnus->hfontInterior, (LPARAM)FALSE);
break;
}
case WM_COMMAND :
{
INT iLenPub, iLenSec;
pnus = (PNEWUSERSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);
switch (LOWORD (wParam)) {
case IDC_PUBRINGBROWSE :
if (sBrowseKeyring (hwnd, FALSE, pnus->szPubring, MAX_PATH))
SetDlgItemText (hwnd, IDC_PUBRING, pnus->szPubring);
break;
case IDC_SECRINGBROWSE :
if (sBrowseKeyring (hwnd, TRUE, pnus->szSecring, MAX_PATH))
SetDlgItemText (hwnd, IDC_SECRING, pnus->szSecring);
break;
}
iLenPub = SendDlgItemMessage (
hwnd, IDC_PUBRING, WM_GETTEXTLENGTH, 0, 0);
iLenSec = SendDlgItemMessage (
hwnd, IDC_SECRING, WM_GETTEXTLENGTH, 0, 0);
if ((iLenPub > 0) && (iLenSec > 0))
{
PostMessage (GetParent (hwnd),
PSM_SETWIZBUTTONS, 0, PSWIZB_BACK|PSWIZB_NEXT);
}
break;
}
case WM_NOTIFY:
{
LPNMHDR pnmh = (LPNMHDR) lParam;
switch (pnmh->code) {
case PSN_SETACTIVE:
pnus = (PNEWUSERSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);
PostMessage (GetParent (hwnd),
PSM_SETWIZBUTTONS, 0, PSWIZB_BACK);
if (!pnus->bEnabled || pnus->bNewUser)
SetWindowLong(hwnd, DWL_MSGRESULT, -1L); // skip page
else
SetWindowLong(hwnd, DWL_MSGRESULT, 0L);
bReturnCode = TRUE;
break;
}
break;
}
}
return bReturnCode;
}
// ______________________________________________
//
// Dialog procedure for "Finish" dialog
static LRESULT WINAPI
sNewUserWizDoneDlgProc (
HWND hwnd,
UINT uMsg,
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?