|
|
/** FILE: cpl.c ************ Module Header ********************************
* * Initialization module and UPS Control Panel applet procedure. * Additionally, this file also contains the "CPlApplet" procedure which * complies with and services the ".CPL" protocol between the Control * Panel main window procedure and its' applets. * * History: * 12:30 on Tues 23 Apr 1991 -by- Steve Cathcart [stevecat] * Took base code from Win 3.1 source * 10:30 on Tues 04 Feb 1992 -by- Steve Cathcart [stevecat] * Updated code to latest Win 3.1 sources * 10:00 on Thur Aug 27 1992 -by- Congpa You [congpay] * Specialize the code for UPS. ***************************************************************************/ //==========================================================================
// Include files
//==========================================================================
#include "ups.h"
#include "cpl.h"
//==========================================================================
// Local Definitions
//==========================================================================
typedef struct { int idIcon; int idName; int idInfo; int idChild; BOOL bEnabled; DWORD dwContext; PSTR pszHelp; } APPLET_INFO;
//==========================================================================
// External Declarations
//==========================================================================
/* functions */ extern INT_PTR APIENTRY UPSDlg (HWND, UINT, WPARAM, LPARAM); extern BOOL RegisterArrowClass(HANDLE);
//==========================================================================
// Data Declarations
//==========================================================================
HANDLE hModule = NULL;
char szSetupInfPath[PATHMAX];
char szErrLS[133]; char szErrMem[133]; char szCtlPanel[30];
char szWinCom[PATHMAX]; /* Path to WIN.COM directory */ char szSystemIniPath[PATHMAX]; /* Path to SYSTEM.INI */ char szCtlIni[PATHMAX]; /* Path to CONTROL.INI */
char szCONTROLINI[] = "control.ini";
// REVIEW change to lower case.
char szSYSTEMINI[] = "SYSTEM.INI"; char szSETUPINF[] = "SETUP.INF";
DWORD dwContext = 0L;
char szControlHlp[] = "control.hlp";
UINT wHelpMessage;
char szCplApplet[] = "CPlApplet";
APPLET_INFO applets[] = { { UPSICON , CHILDREN , INFO , CHILD_UPS , TRUE, IDH_CHILD_UPS , szControlHlp }, };
#define NUM_APPLETS (sizeof(applets)/sizeof(applets[0]))
//==========================================================================
// Local Function Prototypes
//==========================================================================
void RunApplet(HWND hwnd, int cmd);
//==========================================================================
// Functions
//==========================================================================
// Win32 NT Dll Initialization procedure
BOOL DllInitialize( IN PVOID hmod, IN ULONG ulReason, IN PCONTEXT pctx OPTIONAL) { if (ulReason != DLL_PROCESS_ATTACH) { return TRUE; } else { hModule = hmod; }
return TRUE;
UNREFERENCED_PARAMETER(pctx); }
//---------------------------------------------------------------------------
BOOL InitControlPanel(HWND hwndParent) { OFSTRUCT os;
if (!RegisterArrowClass(hModule)) { return FALSE; }
LoadString (hModule, ERRMEM, szErrMem, sizeof (szErrMem)); LoadString (hModule, LSFAIL, szErrLS, sizeof (szErrLS)); LoadString (hModule, CPCAPTION, szCtlPanel, sizeof (szCtlPanel));
wsprintf (szSystemIniPath, "%s%s", (LPSTR)szWinCom, (LPSTR)szSYSTEMINI); wsprintf (szCtlIni, "%s%s", (LPSTR)szWinCom, (LPSTR)szCONTROLINI);
if (OpenFile (szSETUPINF, &os, OF_EXIST) >= 0) strcpy (szSetupInfPath, os.szPathName); else strcpy (szSetupInfPath, szSETUPINF); // not found, use this anyway?
wHelpMessage = RegisterWindowMessage("ShellHelp");
return TRUE;
UNREFERENCED_PARAMETER(hwndParent); }
void TermControlPanel() { UnRegisterArrowClass (hModule); return; }
LONG APIENTRY CPlApplet(HWND hWnd, UINT Msg, LPARAM lParam1, LPARAM lParam2) { int i, count; LPNEWCPLINFO lpCPlInfo; LPCPLINFO lpOldCPlInfo; static iInitCount = 0;
switch (Msg) { case CPL_INIT: if (!iInitCount) { if (!InitControlPanel(hWnd)) return FALSE; }
iInitCount++; return TRUE;
case CPL_GETCOUNT: for (i = count = 0; i < NUM_APPLETS; i++) if (applets[i].bEnabled) count++;
return (LONG)count;
case CPL_INQUIRE:
lpOldCPlInfo = (LPCPLINFO)lParam2;
// find the proper applet not counting those that are disabled
for (i = count = 0; i < NUM_APPLETS; i++) { if (applets[i].bEnabled) { if (count == (int)lParam1) break; count++; } }
lpOldCPlInfo->idIcon = applets[i].idIcon; lpOldCPlInfo->idName = applets[i].idName; lpOldCPlInfo->idInfo = applets[i].idInfo; lpOldCPlInfo->lData = (LONG)applets[i].idChild; return TRUE;
case CPL_NEWINQUIRE:
lpCPlInfo = (LPNEWCPLINFO)lParam2;
// find the proper applet not counting those that are disabled
for (i = count = 0; i < NUM_APPLETS; i++) { if (applets[i].bEnabled) { if (count == (int)lParam1) break; count++; } }
lpCPlInfo->hIcon = LoadIcon(hModule, MAKEINTRESOURCE(applets[i].idIcon)); LoadString(hModule, applets[i].idName, lpCPlInfo->szName, sizeof(lpCPlInfo->szName));
if (!LoadString(hModule, applets[i].idInfo, lpCPlInfo->szInfo, sizeof(lpCPlInfo->szInfo))) lpCPlInfo->szInfo[0] = 0;
lpCPlInfo->dwSize = sizeof(NEWCPLINFO); lpCPlInfo->lData = (LONG)applets[i].idChild; lpCPlInfo->dwHelpContext = applets[i].dwContext; strcpy(lpCPlInfo->szHelpFile, applets[i].pszHelp);
return TRUE;
case CPL_DBLCLK: dwContext = applets[(int)lParam1].dwContext; RunApplet(hWnd, (int)lParam2); break;
case CPL_EXIT: iInitCount--; if (!iInitCount) TermControlPanel(); break;
default: break; } return 0L; }
void RunApplet(HWND hwnd, int cmd) { switch (cmd) { case CHILD_UPS: DialogBox(hModule, MAKEINTRESOURCE(DLG_UPS), hwnd, UPSDlg); break; }
}
void CPHelp (HWND hWnd) { WinHelp (hWnd, szControlHlp, HELP_CONTEXT, dwContext); }
|