⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 installoptions.c

📁 PGP8.0源码 请认真阅读您的文件包然后写出其具体功能
💻 C
字号:
/*____________________________________________________________________________
	Copyright (C) 2002 PGP Corporation
	All rights reserved.

	$Id: InstallOptions.c,v 1.21 2002/11/19 14:50:01 pbj Exp $
____________________________________________________________________________*/

#include <windows.h>
#include "PGPadmin.h"
#include "Utils.h"
#include "resource.h"

#include "PGPadminHelp.h"
#include "pgpClientLib.h"

#define RecordCheckboxClick(control, variable)						\
	if (IsDlgButtonChecked(hwndDlg, control) == BST_CHECKED)		\
	{																\
		variable = TRUE;											\
		pConfig->nInstallCount++;									\
	}																\
	else															\
	{																\
		variable = FALSE;											\
		pConfig->nInstallCount--;									\
	}																\
																	\
	if (!pConfig->nInstallCount)									\
	{																\
		char szErrorMsg[255];										\
		char szTitle[255];											\
																	\
		LoadString(g_hInstance, IDS_TITLE, szTitle, 254);			\
		LoadString(g_hInstance, IDS_ATLEASTONE, szErrorMsg, 254);	\
		MessageBox(hwndDlg, szErrorMsg, szTitle, MB_ICONWARNING);	\
		CheckDlgButton(hwndDlg, control, BST_CHECKED);				\
		variable = TRUE;											\
		pConfig->nInstallCount++;									\
	}
			

static void sInitGUI(HWND hwndDlg, pgpConfigInfo *pConfig);

static DWORD aHelpIds[] = {
	IDC_PRESELECT,			IDH_PGPADMIN_PRESELECT,
	IDC_USERINSTALLDIR,		IDH_PGPADMIN_USERINSTALLDIR,
	IDC_INSTALLPROGRAMS,	IDH_PGPADMIN_INSTALLPROGRAMS,
	IDC_INSTALLLOGIN,		IDH_PGPADMIN_INSTALLLOGIN,
	IDC_INSTALLDISK,		IDH_PGPADMIN_INSTALLDISK,
	IDC_INSTALLEUDORA,		IDH_PGPADMIN_INSTALLEUDORA,
	IDC_INSTALLOUTLOOK,		IDH_PGPADMIN_INSTALLOUTLOOK,
	IDC_INSTALLOUTEXPRESS,	IDH_PGPADMIN_INSTALLOUTEXPRESS,
	IDC_INSTALLICQ,			IDH_PGPADMIN_INSTALLICQ,
	IDC_INSTALLLOTUS,		IDH_PGPADMIN_INSTALLLOTUS,
	IDC_INSTALLGROUPWISE,	IDH_PGPADMIN_INSTALLGROUPWISE,
	IDC_INSTALLMANUAL,		IDH_PGPADMIN_INSTALLMANUAL,
	IDC_UNINSTALL,			IDH_PGPADMIN_UNINSTALL,
	IDC_AUTOREBOOT,			IDH_PGPADMIN_AUTOREBOOT,
	IDC_SILENTPOSTINSTALL,	IDH_PGPADMIN_SILENTAFTERINSTALL,
    0,0
};

typedef struct _PGPProductCheckbox
{
	DWORD				dwCtrl;
	InstallerProduct	nProducts;
}
PGPProductCheckbox;

static PGPProductCheckbox aCheckboxes[] =
{
	{IDC_INSTALLDISK, Installer_PGPds | Installer_PGPdisk | Installer_AtLeastOne},
	{IDC_INSTALLEUDORA, Installer_PGPds | Installer_PGPmail | Installer_AtLeastOne},
	{IDC_INSTALLOUTLOOK, Installer_PGPds | Installer_PGPmail | Installer_AtLeastOne},
	{IDC_INSTALLOUTEXPRESS, Installer_PGPds | Installer_PGPmail | Installer_AtLeastOne},
	{IDC_INSTALLICQ, Installer_PGPds | Installer_PGPmail | Installer_AtLeastOne},
	{IDC_INSTALLLOTUS, Installer_PGPds | Installer_PGPmail | Installer_AtLeastOne},
	{IDC_INSTALLGROUPWISE, Installer_PGPds | Installer_PGPmail | Installer_AtLeastOne},
	{IDC_UNINSTALL, Installer_All},
	{IDC_AUTOREBOOT, Installer_All},
	{IDC_SILENTPOSTINSTALL, Installer_All}
};

static int nNumCheckboxes = sizeof(aCheckboxes) / sizeof(PGPProductCheckbox);


BOOL CALLBACK InstallOptionsDlgProc(HWND hwndDlg, 
									UINT uMsg, 
									WPARAM wParam, 
									LPARAM lParam)
{
	BOOL			bReturnCode = FALSE;
	pgpConfigInfo *	pConfig		= NULL;

	g_hCurrentDlgWnd = hwndDlg;
	pConfig = (pgpConfigInfo *) GetWindowLong(hwndDlg, GWL_USERDATA);

	switch(uMsg)
	{
	case WM_INITDIALOG:
		CommonDlgProc(hwndDlg, uMsg, wParam, lParam);
		pConfig = (pgpConfigInfo *) GetWindowLong(hwndDlg, GWL_USERDATA);
		pConfig->bInstallPrograms = TRUE;
		sInitGUI(hwndDlg, pConfig);
		break;

	case WM_HELP:
	case WM_CONTEXTMENU:
		return PGPclHtmlHelp (hwndDlg, uMsg, wParam, lParam, 
				(char *) kPGPclAdminHelpFile, aHelpIds);

	case WM_NOTIFY:
		{
			LPNMHDR pnmh;

			pnmh = (LPNMHDR) lParam;
			switch(pnmh->code)
			{
			case PSN_HELP:
				PGPclHtmlHelp (hwndDlg, kPGPclHelpContext, 0, 0, 
						(char *) kPGPclAdminHelpFile, 
						(DWORD *) IDH_PGPADMIN_INSTALLOPTIONSDIALOG);
				break;

			case PSN_KILLACTIVE:
				{
					int nLength;

					if (pConfig->szUserInstallDir)
					{
						PGPFreeData(pConfig->szUserInstallDir);
						pConfig->szUserInstallDir = NULL;
					}

					nLength = GetWindowTextLength(GetDlgItem(hwndDlg, 
													IDC_USERINSTALLDIR));

					if (nLength)
					{
						pConfig->szUserInstallDir = (char *)
							PGPNewData(pConfig->memoryMgr,
								nLength+1, kPGPMemoryMgrFlags_Clear);

						GetWindowText(GetDlgItem(hwndDlg, 
										IDC_USERINSTALLDIR),
										pConfig->szUserInstallDir, 
										nLength+1);
						pConfig->szUserInstallDir[nLength] = 0;
					}

					break;
				}

			default:
				bReturnCode = CommonDlgProc(hwndDlg, uMsg, wParam, lParam);
				break;
			}
			break;
		}

	case WM_COMMAND:
		switch (LOWORD(wParam))
		{
		case IDC_PRESELECT:
			if (IsDlgButtonChecked(hwndDlg, IDC_PRESELECT) == BST_CHECKED)
				pConfig->bPreselectInstall = TRUE;
			else
				pConfig->bPreselectInstall = FALSE;

			sInitGUI(hwndDlg, pConfig);
			bReturnCode = TRUE;
			PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
			break;

		case IDC_INSTALLPROGRAMS:
			pConfig->bInstallPrograms = TRUE;
			sInitGUI(hwndDlg, pConfig);
			bReturnCode = TRUE;
			PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
			break;

		case IDC_INSTALLLOGIN:
			if (IsDlgButtonChecked(hwndDlg, IDC_INSTALLLOGIN) == BST_CHECKED)
				pConfig->bInstallLogin = TRUE;
			else
				pConfig->bInstallLogin = FALSE;
			PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
			break;

		case IDC_INSTALLEUDORA:
			RecordCheckboxClick(IDC_INSTALLEUDORA, pConfig->bInstallEudora);
			bReturnCode = TRUE;
			PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
			break;

		case IDC_INSTALLOUTLOOK:
			RecordCheckboxClick(IDC_INSTALLOUTLOOK, pConfig->bInstallOutlook);
			bReturnCode = TRUE;
			PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
			break;

		case IDC_INSTALLOUTEXPRESS:
			RecordCheckboxClick(IDC_INSTALLOUTEXPRESS, pConfig->bInstallOutExpress);
			bReturnCode = TRUE;
			PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
			break;

		case IDC_INSTALLICQ:
			RecordCheckboxClick(IDC_INSTALLICQ, pConfig->bInstallICQ);
			bReturnCode = TRUE;
			PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
			break;

		case IDC_INSTALLLOTUS:
			RecordCheckboxClick(IDC_INSTALLLOTUS, pConfig->bInstallLotus);
			bReturnCode = TRUE;
			PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
			break;

		case IDC_INSTALLGROUPWISE:
			RecordCheckboxClick(IDC_INSTALLGROUPWISE, pConfig->bInstallGroupwise);
			bReturnCode = TRUE;
			PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
			break;

		case IDC_INSTALLMANUAL:
			if (IsDlgButtonChecked(hwndDlg, IDC_INSTALLMANUAL) == BST_CHECKED)
				pConfig->bInstallManual = TRUE;
			else
				pConfig->bInstallManual = FALSE;

			bReturnCode = TRUE;
			PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
			break;

		case IDC_INSTALLDISK:
			RecordCheckboxClick(IDC_INSTALLDISK, pConfig->bInstallDisk);
			bReturnCode = TRUE;
			PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
			break;

		case IDC_UNINSTALL:
			if (IsDlgButtonChecked(hwndDlg, IDC_UNINSTALL) == BST_CHECKED)
				pConfig->bUninstallOld = TRUE;
			else
				pConfig->bUninstallOld = FALSE;

			bReturnCode = TRUE;
			PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
			break;

		case IDC_AUTOREBOOT:
			if (IsDlgButtonChecked(hwndDlg, IDC_AUTOREBOOT) == BST_CHECKED)
				pConfig->bAutoReboot = TRUE;
			else
				pConfig->bAutoReboot = FALSE;

			bReturnCode = TRUE;
			PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
			break;

		case IDC_USERINSTALLDIR:
			PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
			break;

		case IDC_SILENTPOSTINSTALL:
			if (IsDlgButtonChecked(hwndDlg, IDC_SILENTPOSTINSTALL) == BST_CHECKED)
				pConfig->bRemainSilentAfterInstall = TRUE;
			else
				pConfig->bRemainSilentAfterInstall = FALSE;

			bReturnCode = TRUE;
			PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
			break;
		}

		break;

	default:
		bReturnCode = CommonDlgProc(hwndDlg, uMsg, wParam, lParam);
		break;
	}

	return(bReturnCode);
}


static void sInitGUI(HWND hwndDlg, pgpConfigInfo *pConfig)
{
	InstallerProduct nProduct;
	RECT rc;
	POINT pt;
	int nIndex;

	if (pConfig->bPreselectInstall)
		CheckDlgButton(hwndDlg, IDC_PRESELECT, BST_CHECKED);
	else
		CheckDlgButton(hwndDlg, IDC_PRESELECT, BST_UNCHECKED);

	EnableWindow(GetDlgItem(hwndDlg, IDC_INSTALLDIRTEXT), 
		pConfig->bPreselectInstall);
	EnableWindow(GetDlgItem(hwndDlg, IDC_USERINSTALLDIR), 
		pConfig->bPreselectInstall);
	EnableWindow(GetDlgItem(hwndDlg, IDC_INSTALLDISK), 
		pConfig->bPreselectInstall);
	EnableWindow(GetDlgItem(hwndDlg, IDC_INSTALLEUDORA), 
		pConfig->bPreselectInstall);
	EnableWindow(GetDlgItem(hwndDlg, IDC_INSTALLOUTLOOK), 
		pConfig->bPreselectInstall);
	EnableWindow(GetDlgItem(hwndDlg, IDC_INSTALLOUTEXPRESS), 
		pConfig->bPreselectInstall);
	EnableWindow(GetDlgItem(hwndDlg, IDC_INSTALLICQ), 
		pConfig->bPreselectInstall);
	EnableWindow(GetDlgItem(hwndDlg, IDC_INSTALLLOTUS), 
		pConfig->bPreselectInstall);
	EnableWindow(GetDlgItem(hwndDlg, IDC_INSTALLGROUPWISE), 
		pConfig->bPreselectInstall);
	EnableWindow(GetDlgItem(hwndDlg, IDC_UNINSTALL), 
		pConfig->bPreselectInstall);
	EnableWindow(GetDlgItem(hwndDlg, IDC_AUTOREBOOT), 
		pConfig->bPreselectInstall);
	EnableWindow(GetDlgItem(hwndDlg, IDC_SILENTPOSTINSTALL), 
		pConfig->bPreselectInstall);

	if (pConfig->szUserInstallDir == NULL)
		SetWindowText(GetDlgItem(hwndDlg, IDC_USERINSTALLDIR), "");
	else
		SetWindowText(GetDlgItem(hwndDlg, IDC_USERINSTALLDIR), 
			pConfig->szUserInstallDir);

	if (pConfig->bInstallPrograms)
		CheckDlgButton(hwndDlg, IDC_INSTALLPROGRAMS, BST_CHECKED);
	else
		CheckDlgButton(hwndDlg, IDC_INSTALLPROGRAMS, BST_UNCHECKED);
	
	if (pConfig->bInstallLogin)
		CheckDlgButton(hwndDlg, IDC_INSTALLLOGIN, BST_CHECKED);
	else
		CheckDlgButton(hwndDlg, IDC_INSTALLLOGIN, BST_UNCHECKED);
	
	if (pConfig->bInstallDisk)
		CheckDlgButton(hwndDlg, IDC_INSTALLDISK, BST_CHECKED);
	else
		CheckDlgButton(hwndDlg, IDC_INSTALLDISK, BST_UNCHECKED);
	
	if (pConfig->bInstallEudora)
		CheckDlgButton(hwndDlg, IDC_INSTALLEUDORA, BST_CHECKED);
	else
		CheckDlgButton(hwndDlg, IDC_INSTALLEUDORA, BST_UNCHECKED);
	
	if (pConfig->bInstallOutlook)
		CheckDlgButton(hwndDlg, IDC_INSTALLOUTLOOK, BST_CHECKED);
	else
		CheckDlgButton(hwndDlg, IDC_INSTALLOUTLOOK, BST_UNCHECKED);
	
	if (pConfig->bInstallOutExpress)
		CheckDlgButton(hwndDlg, IDC_INSTALLOUTEXPRESS, BST_CHECKED);
	else
		CheckDlgButton(hwndDlg, IDC_INSTALLOUTEXPRESS, BST_UNCHECKED);
	
	if (pConfig->bInstallICQ)
		CheckDlgButton(hwndDlg, IDC_INSTALLICQ, BST_CHECKED);
	else
		CheckDlgButton(hwndDlg, IDC_INSTALLICQ, BST_UNCHECKED);
	
	if (pConfig->bInstallLotus)
		CheckDlgButton(hwndDlg, IDC_INSTALLLOTUS, BST_CHECKED);
	else
		CheckDlgButton(hwndDlg, IDC_INSTALLLOTUS, BST_UNCHECKED);
	
	if (pConfig->bInstallGroupwise)
		CheckDlgButton(hwndDlg, IDC_INSTALLGROUPWISE, BST_CHECKED);
	else
		CheckDlgButton(hwndDlg, IDC_INSTALLGROUPWISE, BST_UNCHECKED);
	
	if (pConfig->bInstallManual)
		CheckDlgButton(hwndDlg, IDC_INSTALLMANUAL, BST_CHECKED);
	else
		CheckDlgButton(hwndDlg, IDC_INSTALLMANUAL, BST_UNCHECKED);
	
	if (pConfig->bUninstallOld)
		CheckDlgButton(hwndDlg, IDC_UNINSTALL, BST_CHECKED);
	else
		CheckDlgButton(hwndDlg, IDC_UNINSTALL, BST_UNCHECKED);

	if (pConfig->bAutoReboot)
		CheckDlgButton(hwndDlg, IDC_AUTOREBOOT, BST_CHECKED);
	else
		CheckDlgButton(hwndDlg, IDC_AUTOREBOOT, BST_UNCHECKED);

	if (pConfig->bRemainSilentAfterInstall)
		CheckDlgButton(hwndDlg, IDC_SILENTPOSTINSTALL, BST_CHECKED);
	else
		CheckDlgButton(hwndDlg, IDC_SILENTPOSTINSTALL, BST_UNCHECKED);
	
	nProduct = GetInstalledProduct(NULL);
	GetWindowRect(GetDlgItem(hwndDlg, IDC_USERINSTALLDIR), &rc);
	pt.x = rc.left;
	pt.y = rc.top;
	ScreenToClient(hwndDlg, &pt);
	pt.y += 32;
	pConfig->nInstallCount = 0;

	for (nIndex=0; nIndex<nNumCheckboxes; nIndex++)
	{
		if (aCheckboxes[nIndex].nProducts & nProduct)
		{
			SetWindowPos(GetDlgItem(hwndDlg, aCheckboxes[nIndex].dwCtrl), 0, 
				pt.x, pt.y, 0, 0, 
				SWP_NOZORDER | SWP_NOSIZE | SWP_SHOWWINDOW);
			pt.y += 23;

			if (aCheckboxes[nIndex].nProducts & Installer_AtLeastOne)
				pConfig->nInstallCount++;
		}
		else switch(aCheckboxes[nIndex].dwCtrl)
		{
		case IDC_INSTALLDISK:
			pConfig->bInstallDisk = FALSE;
			break;
		
		case IDC_INSTALLEUDORA:
			pConfig->bInstallEudora = FALSE;
			break;
	
		case IDC_INSTALLOUTLOOK:
			pConfig->bInstallOutlook = FALSE;
			break;

		case IDC_INSTALLOUTEXPRESS:
			pConfig->bInstallOutExpress = FALSE;
			break;

		case IDC_INSTALLICQ:
			pConfig->bInstallICQ = FALSE;
			break;

		case IDC_INSTALLLOTUS:
			pConfig->bInstallLotus = FALSE;
			break;

		case IDC_INSTALLGROUPWISE:
			pConfig->bInstallGroupwise = FALSE;
			break;
		}
	}

	return;
}


/*__Editor_settings____

	Local Variables:
	tab-width: 4
	End:
	vi: ts=4 sw=4
	vim: si
_____________________*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -