Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

127 lines
3.2 KiB

// 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;
}