windows-nt/Source/XPSP1/NT/shell/osshell/accessib/accwiz/pgwizopt.cpp
2020-09-26 16:20:57 +08:00

158 lines
4.4 KiB
C++

//Copyright (c) 1997-2000 Microsoft Corporation
#include "pch.hxx" // pch
#pragma hdrstop
#include "resource.h"
#include "pgWizOpt.h"
#include "w95trace.h"
BOOL IsAdmin();
CWizardOptionsPg::CWizardOptionsPg(
LPPROPSHEETPAGE ppsp
) : WizardPage(ppsp, IDS_WIZOPTTITLE, IDS_WIZOPTSUBTITLE)
{
m_dwPageId = IDD_WIZOPTIONS;
ppsp->pszTemplate = MAKEINTRESOURCE(m_dwPageId);
restoreOpt = FALSE;
}
CWizardOptionsPg::~CWizardOptionsPg(
VOID
)
{
}
DWORD g_rgdwWizNoOptionsSelected[] = {IDD_WIZNOOPTIONSSELECTED};
DWORD g_rgdwWizDoBlind[] = {
IDD_FNTWIZSCROLLBAR, // scroll bar
IDD_PREV_ICON2,
IDD_PREV_COLOR,
IDD_MSEWIZMOUSECURSOR,
IDD_CARET
};
DWORD g_rgdwWizDoSounds[] = {
IDD_SNDWIZSENTRYSHOWSOUNDS,
IDD_SNDWIZSENTRYSHOWSOUNDS2,
};
DWORD g_rgdwWizDoKeyboardMouse[] = {
IDD_KBDWIZSTICKYKEYS,
IDD_KBDWIZFILTERKEYS1,
IDD_KBDWIZFILTERKEYS2,
IDD_KBDWIZTOGGLEKEYS,
IDD_KBDWIZSHOWEXTRAKEYBOARDHELP,
IDD_MSEWIZMOUSEKEYS,
IDD_MSEWIZMOUSECURSOR,
IDD_MSEWIZBUTTONCONFIG,
IDD_MSEWIZMOUSESPEED
};
DWORD g_rgdwWizDoAdmin[] = {
IDD_WIZACCESSTIMEOUT,
IDD_WIZWORKSTATIONDEFAULT
};
DWORD g_rgdwWizFinalPages[] = {
IDD_WIZFINISH
};
BOOL CWizardOptionsPg::AdjustWizPageOrder()
{
BOOL bDoBlind = Button_GetCheck(GetDlgItem(m_hwnd, IDC_DOBLIND));
BOOL bDoSounds = Button_GetCheck(GetDlgItem(m_hwnd, IDC_DOSOUND));
BOOL bDoKeyboardMouse = Button_GetCheck(GetDlgItem(m_hwnd, IDC_DOKEYBOARDMOUSE));
BOOL bDoAdmin = Button_GetCheck(GetDlgItem(m_hwnd, IDC_DOADMIN));
BOOL bDoNoOptions = (!bDoBlind && !bDoSounds && !bDoKeyboardMouse && !bDoAdmin && !restoreOpt);
// First remove all possible pages since we want to insert them in the correct order
// Return value does not matter since the pages may not be in the array
sm_WizPageOrder.RemovePages(g_rgdwWizNoOptionsSelected, ARRAYSIZE(g_rgdwWizNoOptionsSelected));
sm_WizPageOrder.RemovePages(g_rgdwWizDoBlind, ARRAYSIZE(g_rgdwWizDoBlind));
sm_WizPageOrder.RemovePages(g_rgdwWizDoSounds, ARRAYSIZE(g_rgdwWizDoSounds));
sm_WizPageOrder.RemovePages(g_rgdwWizDoKeyboardMouse, ARRAYSIZE(g_rgdwWizDoKeyboardMouse));
sm_WizPageOrder.RemovePages(g_rgdwWizDoAdmin, ARRAYSIZE(g_rgdwWizDoAdmin));
sm_WizPageOrder.RemovePages(g_rgdwWizFinalPages, ARRAYSIZE(g_rgdwWizFinalPages));
// Then Add in pages in groups in the reverse order that we want them to appear.
// We do them this way since they are inserted after this page, so the first group inserted
// will be the last group at the end of this.
// NOTE: We do not care about the return value from AddPages() in the sense
// that we they do not allocate or free memory so it does not hurt to keep calling them. We
// Will propogate a return value of FALSE if any of them fail.
BOOL bSuccess = TRUE;
// Add Final Pages
bSuccess = bSuccess && sm_WizPageOrder.AddPages(m_dwPageId, g_rgdwWizFinalPages, ARRAYSIZE(g_rgdwWizFinalPages));
if(bDoNoOptions)
bSuccess = bSuccess && sm_WizPageOrder.AddPages(m_dwPageId, g_rgdwWizNoOptionsSelected, ARRAYSIZE(g_rgdwWizNoOptionsSelected));
if(bDoAdmin)
{
bSuccess = bSuccess && sm_WizPageOrder.AddPages(m_dwPageId, g_rgdwWizDoAdmin, ARRAYSIZE(g_rgdwWizDoAdmin));
// Incase you are NOT an admin Remove admin page
if ( !IsAdmin() )
sm_WizPageOrder.RemovePages(&g_rgdwWizDoAdmin[1], 1);
}
if(bDoKeyboardMouse)
bSuccess = bSuccess && sm_WizPageOrder.AddPages(m_dwPageId, g_rgdwWizDoKeyboardMouse, ARRAYSIZE(g_rgdwWizDoKeyboardMouse));
if(bDoSounds)
bSuccess = bSuccess && sm_WizPageOrder.AddPages(m_dwPageId, g_rgdwWizDoSounds, ARRAYSIZE(g_rgdwWizDoSounds));
if(bDoBlind)
bSuccess = bSuccess && sm_WizPageOrder.AddPages(m_dwPageId, g_rgdwWizDoBlind, ARRAYSIZE(g_rgdwWizDoBlind));
return bSuccess;
}
LRESULT
CWizardOptionsPg::OnCommand(
HWND hwnd,
WPARAM wParam,
LPARAM lParam
)
{
LRESULT lResult = 1;
WORD wNotifyCode = HIWORD(wParam);
WORD wCtlID = LOWORD(wParam);
HWND hwndCtl = (HWND)lParam;
switch(wCtlID)
{
case IDC_BTNRESTORETODEFAULT:
g_Options.ApplyWindowsDefault();
restoreOpt = TRUE;
break;
default:
break;
}
return lResult;
}
BOOL IsAdmin()
{
HKEY hkey;
BOOL fOk = (ERROR_SUCCESS == RegOpenKeyExA( HKEY_USERS, ".Default", 0, KEY_ALL_ACCESS, &hkey ));
if(fOk)
{
RegCloseKey(hkey);
}
return fOk;
}