📄 installoptions.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 + -