|
|
// File: CplMain.cpp
#include "precomp.h"
#include "resource.h"
#include "Conf.h"
#include "ConfCpl.h"
#include "confwnd.h"
#include "ConfPolicies.h"
//*** Global Data *****************************************************
// Global flag keeps setting that changed for windows msg broadcast
DWORD g_dwChangedSettings = 0;
BOOL g_fInOptionsDialog = FALSE;
static const int nMaxPropPages = 7;
INT_PTR CreatePropSheet(HWND hwndOwner, HINSTANCE hInst, int nStartPage) { int pageMap[nMaxPropPages]; ZeroMemory(&pageMap, sizeof(pageMap));
PROPSHEETPAGE psp[nMaxPropPages]; ZeroMemory(&psp, sizeof(psp));
RegEntry rePol(POLICIES_KEY, HKEY_CURRENT_USER); RegEntry reAudio(AUDIO_KEY, HKEY_CURRENT_USER);
ASSERT(nStartPage < nMaxPropPages);
int nPages = 0;
if (!rePol.GetNumber( REGVAL_POL_NO_GENERALPAGE, DEFAULT_POL_NO_GENERALPAGE )) { pageMap[OPTIONS_GENERAL_PAGE] = nPages; FillInPropertyPage(&psp[nPages++], IDD_OPT_GENERAL, UserDlgProc); ASSERT(nPages <= nMaxPropPages); } if (!rePol.GetNumber( REGVAL_POL_NO_SECURITYPAGE, DEFAULT_POL_NO_SECURITYPAGE )) { pageMap[OPTIONS_SECURITY_PAGE] = nPages; FillInPropertyPage(&psp[nPages++], IDD_SECURITY, SecurityDlgProc); ASSERT(nPages <= nMaxPropPages);
} if (!rePol.GetNumber( REGVAL_POL_NO_AUDIOPAGE, DEFAULT_POL_NO_AUDIOPAGE ) && !rePol.GetNumber( REGVAL_POL_NO_AUDIO, DEFAULT_POL_NO_AUDIO) && ISSOUNDCARDPRESENT(reAudio.GetNumber( REGVAL_SOUNDCARDCAPS, SOUNDCARD_NONE)) ) { pageMap[OPTIONS_AUDIO_PAGE] = nPages; FillInPropertyPage(&psp[nPages++], IDD_AUDIO, AudioDlgProc); ASSERT(nPages <= nMaxPropPages); } if (!rePol.GetNumber( REGVAL_POL_NO_VIDEOPAGE, DEFAULT_POL_NO_VIDEOPAGE ) && (!rePol.GetNumber( REGVAL_POL_NO_VIDEO_SEND, DEFAULT_POL_NO_VIDEO_SEND) || !rePol.GetNumber( REGVAL_POL_NO_VIDEO_RECEIVE, DEFAULT_POL_NO_VIDEO_RECEIVE))) { pageMap[OPTIONS_VIDEO_PAGE] = nPages; FillInPropertyPage(&psp[nPages++], IDD_VIDEO, VideoDlgProc); ASSERT(nPages <= nMaxPropPages); }
// If no pages are allowed, tell the user and get out
if ( !nPages ) { ConfMsgBox ( hwndOwner, (LPCTSTR)IDS_ALLPAGESDISABLED ); return 0; }
PROPSHEETHEADER psh; InitStruct(&psh);
psh.dwFlags = PSH_PROPSHEETPAGE | PSH_NOAPPLYNOW; psh.hwndParent = hwndOwner; psh.hInstance = hInst; ASSERT(NULL == psh.hIcon); psh.pszCaption = (LPSTR)IDS_CPLNAME; psh.nPages = nPages; psh.nStartPage = pageMap[nStartPage]; psh.ppsp = (LPCPROPSHEETPAGE) &psp;
return (PropertySheet(&psh)); }
/* L A U N C H C O N F C P L */ /*-------------------------------------------------------------------------
%%Function: LaunchConfCpl
-------------------------------------------------------------------------*/ VOID LaunchConfCpl(HWND hwnd, int nStartPage) {
if (g_fInOptionsDialog) { return; }
g_fInOptionsDialog = TRUE; CreatePropSheet(hwnd, GetInstanceHandle(), nStartPage); g_fInOptionsDialog = FALSE;
// Broadcast change notification if anything changed
if (g_dwChangedSettings) { HandleConfSettingsChange(g_dwChangedSettings); g_dwChangedSettings = 0; } }
BOOL CanLaunchConfCpl() { return !g_fInOptionsDialog; }
|