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 + -
显示快捷键?