371 lines
6.6 KiB
C
371 lines
6.6 KiB
C
/*++
|
||
|
||
Copyright (c) 1996 Microsoft Corporation
|
||
|
||
Module Name:
|
||
|
||
faxcfg.c
|
||
|
||
Abstract:
|
||
|
||
Implementation of the control panel applet entry point
|
||
|
||
Environment:
|
||
|
||
Windows NT fax configuration applet
|
||
|
||
Revision History:
|
||
|
||
02/27/96 -davidx-
|
||
Created it.
|
||
|
||
05/22/96 -davidx-
|
||
Share the same DLL with remote admin program.
|
||
|
||
mm/dd/yy -author-
|
||
description
|
||
|
||
--*/
|
||
|
||
#include <stdlib.h>
|
||
#include <windows.h>
|
||
#include <commctrl.h>
|
||
#include <cpl.h>
|
||
#include <tchar.h>
|
||
|
||
#include "faxcfg.h"
|
||
#include "resource.h"
|
||
|
||
|
||
//
|
||
// Fax configuration applet index
|
||
//
|
||
|
||
#define FAX_CLIENT_APPLET 0
|
||
#define FAX_SERVER_APPLET 1
|
||
|
||
//
|
||
// Definition of global variables
|
||
//
|
||
|
||
HANDLE ghInstance; // DLL instance handle
|
||
INT faxConfigType; // fax configuration type
|
||
|
||
//
|
||
// Forward declaration of local functions
|
||
//
|
||
|
||
VOID FillOutCPlInfo(CPLINFO *, INT);
|
||
INT DoFaxConfiguration(HWND, INT, LPTSTR);
|
||
|
||
|
||
|
||
BOOL
|
||
DllEntryPoint(
|
||
HANDLE hModule,
|
||
ULONG ulReason,
|
||
PCONTEXT pContext
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
DLL initialization procedure.
|
||
|
||
Arguments:
|
||
|
||
hModule - DLL instance handle
|
||
ulReason - Reason for the call
|
||
pContext - Pointer to context (not used by us)
|
||
|
||
Return Value:
|
||
|
||
TRUE if DLL is initialized successfully, FALSE otherwise.
|
||
|
||
--*/
|
||
|
||
{
|
||
switch (ulReason) {
|
||
|
||
case DLL_PROCESS_ATTACH:
|
||
|
||
ghInstance = hModule;
|
||
break;
|
||
|
||
case DLL_PROCESS_DETACH:
|
||
|
||
break;
|
||
}
|
||
|
||
return TRUE;
|
||
}
|
||
|
||
|
||
|
||
LONG
|
||
CPlApplet(
|
||
HWND hwndCPl,
|
||
UINT uMsg,
|
||
LONG lParam1,
|
||
LONG lParam2
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Control panel applet entry point
|
||
|
||
Arguments:
|
||
|
||
hwndCPl - Identifies the Control Panel window
|
||
uMsg - Specifies the message being sent to the Control Panel applet
|
||
lParam1 - Specifies additional message-specific information
|
||
lParam2 - Specifies additional message-specific information
|
||
|
||
Return Value:
|
||
|
||
Depends on the message
|
||
|
||
--*/
|
||
|
||
{
|
||
static BOOL Failed = FALSE;
|
||
|
||
|
||
switch (uMsg) {
|
||
|
||
case CPL_INIT:
|
||
|
||
{
|
||
DWORD Size;
|
||
WCHAR ComputerName[MAX_COMPUTERNAME_LENGTH+4];
|
||
|
||
ComputerName[0] = L'\\';
|
||
ComputerName[1] = L'\\';
|
||
|
||
Size = sizeof(ComputerName)/sizeof(WCHAR);
|
||
|
||
GetComputerName( &ComputerName[2], &Size );
|
||
|
||
return (faxConfigType = FaxConfigInit(ComputerName, TRUE)) >= 0;
|
||
}
|
||
|
||
case CPL_GETCOUNT:
|
||
|
||
//
|
||
// We export one or two applets depending on whether
|
||
// we're doing client, server, or workstation configuration
|
||
//
|
||
|
||
return (faxConfigType == FAXCONFIG_SERVER) ? 2 : 1;
|
||
|
||
case CPL_INQUIRE:
|
||
|
||
//
|
||
// Fill out the CPLINFO structure depending on the fax configuration type
|
||
//
|
||
|
||
FillOutCPlInfo((CPLINFO *) lParam2, lParam1);
|
||
break;
|
||
|
||
case CPL_DBLCLK:
|
||
|
||
//
|
||
// Treat this as CPL_STARTWPARMS with no parameter
|
||
//
|
||
if (Failed) {
|
||
return 1;
|
||
}
|
||
return DoFaxConfiguration(hwndCPl, lParam1, NULL);
|
||
|
||
case CPL_STARTWPARMS:
|
||
|
||
//
|
||
// Display fax configuration dialog: client, server, or workstation
|
||
//
|
||
|
||
if (!(DoFaxConfiguration(hwndCPl, lParam1, (LPTSTR) lParam2) == 0)) {
|
||
Failed = TRUE;
|
||
return 1;
|
||
}
|
||
return 0;
|
||
|
||
case CPL_EXIT:
|
||
|
||
FaxConfigCleanup();
|
||
break;
|
||
}
|
||
|
||
return 0;
|
||
}
|
||
|
||
|
||
|
||
VOID
|
||
FillOutCPlInfo(
|
||
CPLINFO *pCPlInfo,
|
||
INT cplIndex
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Fill out the CPLINFO structure corresponding to the
|
||
specified fax configuration control panel applet
|
||
|
||
Arguments:
|
||
|
||
pCPlInfo - Points to a CPLINFO buffer
|
||
cplIndex - Index of the interested fax conguration applet
|
||
|
||
Return Value:
|
||
|
||
NONE
|
||
|
||
--*/
|
||
|
||
{
|
||
pCPlInfo->lData = 0;
|
||
|
||
switch (faxConfigType) {
|
||
|
||
case FAXCONFIG_SERVER:
|
||
|
||
if (cplIndex == FAX_SERVER_APPLET) {
|
||
|
||
//
|
||
// Fax server configuration
|
||
//
|
||
|
||
pCPlInfo->idIcon = IDI_FAX_SERVER;
|
||
pCPlInfo->idName = IDS_FAX_SERVER;
|
||
pCPlInfo->idInfo = IDS_CONFIG_FAX_SERVER;
|
||
|
||
} else {
|
||
|
||
//
|
||
// Fax client configuration
|
||
//
|
||
|
||
pCPlInfo->idIcon = IDI_FAX_CLIENT;
|
||
pCPlInfo->idName = IDS_FAX_CLIENT;
|
||
pCPlInfo->idInfo = IDS_CONFIG_FAX_CLIENT;
|
||
}
|
||
break;
|
||
|
||
default:
|
||
|
||
//
|
||
// Fax client or workstation configuration
|
||
//
|
||
|
||
pCPlInfo->idIcon = IDI_FAX;
|
||
pCPlInfo->idName = IDS_FAX;
|
||
pCPlInfo->idInfo = IDS_CONFIG_FAX;
|
||
break;
|
||
}
|
||
}
|
||
|
||
|
||
|
||
INT
|
||
DoFaxConfiguration(
|
||
HWND hwndCPl,
|
||
INT cplIndex,
|
||
LPTSTR pCmdLine
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Display fax configuration dialogs: client, server, or workstation
|
||
|
||
Arguments:
|
||
|
||
hwndCPl - Handle to the Control Panel window
|
||
cplIndex - Index of the interested fax configuration applet
|
||
pCmdLine - Command line parameters
|
||
|
||
Return Value:
|
||
|
||
0 if successful, -1 if there is an error
|
||
|
||
--*/
|
||
|
||
#define MAX_PAGES 16
|
||
#define MAX_TITLE_LEN 64
|
||
|
||
{
|
||
HPROPSHEETPAGE hPropSheetPages[MAX_PAGES];
|
||
PROPSHEETHEADER psh;
|
||
CPLINFO cplInfo;
|
||
TCHAR dlgTitle[MAX_TITLE_LEN];
|
||
INT nPages, nStartPage;
|
||
|
||
//
|
||
// Get an array of property sheet page handles
|
||
//
|
||
|
||
switch (faxConfigType) {
|
||
|
||
case FAXCONFIG_WORKSTATION:
|
||
|
||
nPages = FaxConfigGetWorkstationPages(hPropSheetPages, MAX_PAGES);
|
||
break;
|
||
|
||
case FAXCONFIG_SERVER:
|
||
|
||
if (cplIndex == FAX_SERVER_APPLET) {
|
||
|
||
nPages = FaxConfigGetServerPages(hPropSheetPages, MAX_PAGES);
|
||
break;
|
||
}
|
||
|
||
default:
|
||
|
||
nPages = FaxConfigGetClientPages(hPropSheetPages, MAX_PAGES);
|
||
break;
|
||
};
|
||
|
||
if (nPages < 0 || nPages > MAX_PAGES)
|
||
return -1;
|
||
|
||
//
|
||
// Determine which page to activate initially
|
||
//
|
||
|
||
nStartPage = pCmdLine ? _ttol(pCmdLine) : 0;
|
||
|
||
if (nStartPage < 0 || nStartPage >= nPages)
|
||
nStartPage = 0;
|
||
|
||
//
|
||
// Fill out PROPSHEETHEADER structure
|
||
//
|
||
|
||
FillOutCPlInfo(&cplInfo, cplIndex);
|
||
LoadString(ghInstance, cplInfo.idInfo, dlgTitle, MAX_TITLE_LEN);
|
||
|
||
ZeroMemory(&psh, sizeof(psh));
|
||
psh.dwSize = sizeof(PROPSHEETHEADER);
|
||
psh.dwFlags = PSH_USEICONID;
|
||
psh.hwndParent = hwndCPl;
|
||
psh.hInstance = ghInstance;
|
||
psh.pszIcon = MAKEINTRESOURCE(cplInfo.idIcon);
|
||
psh.pszCaption = dlgTitle;
|
||
psh.nPages = nPages;
|
||
psh.nStartPage = nStartPage;
|
||
psh.phpage = hPropSheetPages;
|
||
|
||
//
|
||
// Display the property sheet
|
||
//
|
||
|
||
return (PropertySheet(&psh) == -1) ? -1 : 0;
|
||
}
|
||
|