//Copyright (c) 1997-2000 Microsoft Corporation #ifndef _INC_PGEXTRAS_H #define _INC_PGEXTRAS_H #include "pgbase.h" #include "Select.h" class CYesNoPg : public WizardPage { public: CYesNoPg(LPPROPSHEETPAGE ppsp, int nIdTitle, int nIdSubTitle, int nPageId) : WizardPage(ppsp, nIdTitle, nIdSubTitle) { m_dwPageId = nPageId; ppsp->pszTemplate = MAKEINTRESOURCE(m_dwPageId); } protected: virtual BOOL IsOptionSet() = 0; virtual void SetOptions(BOOL bOn) = 0; virtual int GetSettingsPage() {return 0;} // Default is no next page LRESULT OnInitDialog(HWND hwnd, WPARAM wParam, LPARAM lParam) { // Make sure the controls exist _ASSERTE(GetDlgItem(m_hwnd, IDC_RADIOYES)); _ASSERTE(GetDlgItem(m_hwnd, IDC_RADIONO)); // Set Yes/No buttons Button_SetCheck(GetDlgItem(m_hwnd, IDC_RADIOYES), IsOptionSet()); Button_SetCheck(GetDlgItem(m_hwnd, IDC_RADIONO), !IsOptionSet()); return 1; } LRESULT OnCommand(HWND hwnd, WPARAM wParam, LPARAM lParam) { LRESULT lResult = 1; SetOptions(Button_GetCheck(GetDlgItem(m_hwnd, IDC_RADIOYES))); g_Options.ApplyPreview(); return lResult; } LRESULT OnPSN_WizNext(HWND hwnd, INT idCtl, LPPSHNOTIFY pnmh) { DWORD dwTemp = GetSettingsPage(); if(dwTemp) { if(Button_GetCheck(GetDlgItem(m_hwnd, IDC_RADIOYES))) sm_WizPageOrder.AddPages(m_dwPageId, &dwTemp, 1); else sm_WizPageOrder.RemovePages(&dwTemp, 1); } return WizardPage::OnPSN_WizNext(hwnd, idCtl, pnmh); } }; class CSoundSentryPg : public CYesNoPg { public: CSoundSentryPg(LPPROPSHEETPAGE ppsp) : CYesNoPg(ppsp, IDS_SNDWIZSENTRYTITLE, IDS_SNDWIZSENTRYSUBTITLE, IDD_SNDWIZSENTRYSHOWSOUNDS) {} protected: BOOL IsOptionSet() { return (g_Options.m_schemePreview.m_SOUNDSENTRY.dwFlags & SSF_SOUNDSENTRYON); } void SetOptions(BOOL bOn) { if(bOn) { g_Options.m_schemePreview.m_SOUNDSENTRY.dwFlags |= SSF_SOUNDSENTRYON; g_Options.m_schemePreview.m_SOUNDSENTRY.dwFlags &= SSF_VALID; // Hard code to flash 'Window' if we are setting this option g_Options.m_schemePreview.m_SOUNDSENTRY.iWindowsEffect = SSWF_WINDOW; // For NT: The other options are not supported. a-anilk g_Options.m_schemePreview.m_SOUNDSENTRY.iFSTextEffect = 0; g_Options.m_schemePreview.m_SOUNDSENTRY.iFSGrafEffect = 0; } else g_Options.m_schemePreview.m_SOUNDSENTRY.dwFlags &= ~SSF_SOUNDSENTRYON; } }; class CShowSoundsPg : public CYesNoPg { public: CShowSoundsPg(LPPROPSHEETPAGE ppsp) : CYesNoPg(ppsp, IDS_SNDWIZSHOWSOUNDSTITLE, IDS_SNDWIZSHOWSOUNDSSUBTITLE, IDD_SNDWIZSENTRYSHOWSOUNDS2) {} protected: BOOL IsOptionSet() { return (g_Options.m_schemePreview.m_bShowSounds); } void SetOptions(BOOL bOn) { g_Options.m_schemePreview.m_bShowSounds = bOn; } }; class CFilterKeysPg : public CYesNoPg { public: CFilterKeysPg(LPPROPSHEETPAGE ppsp) : CYesNoPg(ppsp, IDS_WIZFILTERKEYSTITLE, IDS_WIZFILTERKEYSSUBTITLE, IDD_KBDWIZFILTERKEYS1) {} protected: BOOL IsOptionSet() { // Return TRUE if filterkeys is ON return (g_Options.m_schemePreview.m_FILTERKEYS.dwFlags & FKF_FILTERKEYSON); } void SetOptions(BOOL bOn) { if(bOn) { g_Options.m_schemePreview.m_FILTERKEYS.dwFlags |= FKF_FILTERKEYSON; // this code only sets iBounceMSec and doesn't let users set the // other filter key options so init the other values to zero g_Options.m_schemePreview.m_FILTERKEYS.iWaitMSec = 0; g_Options.m_schemePreview.m_FILTERKEYS.iDelayMSec = 0; g_Options.m_schemePreview.m_FILTERKEYS.iRepeatMSec = 0; } else { g_Options.m_schemePreview.m_FILTERKEYS.dwFlags &= ~FKF_FILTERKEYSON; } } int GetSettingsPage() {return IDD_KBDWIZFILTERKEYS2;} }; /***************************************/ // // Times are in milliseconds // #define BOUNCESIZE 5 UINT BounceTable[BOUNCESIZE] = { { 500 }, { 700 }, { 1000 }, { 1500 }, { 2000 } }; class CFilterKeysSettingsPg : public WizardPage { public: CFilterKeysSettingsPg(LPPROPSHEETPAGE ppsp) : WizardPage(ppsp, IDS_WIZFILTERKEYSETTING, IDS_WIZFILTERKEYSSUBTITLE) { m_dwPageId = IDD_KBDWIZFILTERKEYS2; ppsp->pszTemplate = MAKEINTRESOURCE(m_dwPageId); } protected: void UpdateTime() { INT_PTR nBounceRate = SendDlgItemMessage(m_hwnd,IDC_BK_BOUNCERATE, TBM_GETPOS, 0,0); if(nBounceRate < 1 || nBounceRate > BOUNCESIZE) nBounceRate = 1; // Look up in table nBounceRate = BounceTable[nBounceRate - 1]; TCHAR buf[10], buf2[20]; wsprintf(buf,__TEXT("%d.%d"),nBounceRate/1000, (nBounceRate%1000)/100); GetNumberFormat(LOCALE_USER_DEFAULT, 0, buf, NULL, buf2, 20); SetDlgItemText(m_hwnd, IDC_BK_TIME, buf2); } LRESULT OnInitDialog(HWND hwnd, WPARAM wParam, LPARAM lParam) { _ASSERTE(g_Options.m_schemePreview.m_FILTERKEYS.iBounceMSec); _ASSERTE(GetDlgItem(m_hwnd, IDC_RADIOBEEPYES)); _ASSERTE(GetDlgItem(m_hwnd, IDC_RADIOBEEPNO)); Button_SetCheck(GetDlgItem(m_hwnd, IDC_RADIOBEEPYES), (g_Options.m_schemePreview.m_FILTERKEYS.dwFlags & FKF_CLICKON)); Button_SetCheck(GetDlgItem(m_hwnd, IDC_RADIOBEEPNO), !(g_Options.m_schemePreview.m_FILTERKEYS.dwFlags & FKF_CLICKON)); // Set slider for bounce rate SendDlgItemMessage(m_hwnd,IDC_BK_BOUNCERATE, TBM_SETRANGE, TRUE,MAKELONG(1,BOUNCESIZE)); // Figure out initial settings // Make sure initial slider settings is not SMALLER than current setting int nIndex = 0; for(int i=BOUNCESIZE - 1;i>=0;i--) { if(BounceTable[i] >= g_Options.m_schemePreview.m_FILTERKEYS.iBounceMSec) nIndex = i; else break; } SendDlgItemMessage(m_hwnd,IDC_BK_BOUNCERATE, TBM_SETPOS, TRUE, nIndex+1); UpdateTime(); return 1; } LRESULT HandleMsg(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { case WM_HSCROLL: { UpdateTime(); if(Button_GetCheck(GetDlgItem(m_hwnd, IDC_RADIOBEEPYES))) g_Options.m_schemePreview.m_FILTERKEYS.dwFlags |= FKF_CLICKON; else g_Options.m_schemePreview.m_FILTERKEYS.dwFlags &= ~FKF_CLICKON; // Bounce Keys INT_PTR nIndex = SendDlgItemMessage(m_hwnd, IDC_BK_BOUNCERATE, TBM_GETPOS, 0, 0); // this code only sets iBounceMSec and doesn't let users set the // other filter key options so init the other values to zero g_Options.m_schemePreview.m_FILTERKEYS.iWaitMSec = 0; g_Options.m_schemePreview.m_FILTERKEYS.iDelayMSec = 0; g_Options.m_schemePreview.m_FILTERKEYS.iRepeatMSec = 0; g_Options.m_schemePreview.m_FILTERKEYS.iBounceMSec = BounceTable[nIndex - 1]; g_Options.ApplyPreview(); } break; default: break; } return 0; } // Handle Next> and make sure you transfer all settings as the user may not // always change bounce repeat rate : a-anilk LRESULT 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_RADIOBEEPYES: case IDC_RADIOBEEPNO: if(Button_GetCheck(GetDlgItem(m_hwnd, IDC_RADIOBEEPYES))) g_Options.m_schemePreview.m_FILTERKEYS.dwFlags |= FKF_CLICKON; else g_Options.m_schemePreview.m_FILTERKEYS.dwFlags &= ~FKF_CLICKON; g_Options.ApplyPreview(); lResult = 0; break; default: break; } return lResult; } }; //////////////////////////////////////////////////////////////////// // Mouse Keys class CMouseKeysPg : public CYesNoPg { public: CMouseKeysPg(LPPROPSHEETPAGE ppsp) : CYesNoPg(ppsp, IDS_MSEWIZMOUSEKEYSTITLE, IDS_MSEWIZMOUSEKEYSSUBTITLE, IDD_MSEWIZMOUSEKEYS) {} protected: BOOL IsOptionSet() { return (g_Options.m_schemePreview.m_MOUSEKEYS.dwFlags & MKF_MOUSEKEYSON); } void SetOptions(BOOL bOn) { if(bOn) g_Options.m_schemePreview.m_MOUSEKEYS.dwFlags |= MKF_MOUSEKEYSON; else g_Options.m_schemePreview.m_MOUSEKEYS.dwFlags &= ~MKF_MOUSEKEYSON; } int GetSettingsPage() {return IDD_MSEWIZMOUSEKEYS1;} }; static UINT g_nSpeedTable[] = { 10, 20, 30, 40, 60, 80, 120, 180, 360 }; static UINT g_nAccelTable[] = { 5000, 4500, 4000, 3500, 3000, 2500, 2000, 1500, 1000 }; class CMouseKeysSettingsPg : public WizardPage { public: CMouseKeysSettingsPg(LPPROPSHEETPAGE ppsp) : WizardPage(ppsp, IDS_MSEWIZMOUSEKEYSETTING, IDS_MSEWIZMOUSEKEYSSUBTITLE) { m_dwPageId = IDD_MSEWIZMOUSEKEYS1; ppsp->pszTemplate = MAKEINTRESOURCE(m_dwPageId); } protected: LRESULT OnInitDialog(HWND hwnd, WPARAM wParam, LPARAM lParam) { // ALWAYS use modifiers // Button_SetCheck(GetDlgItem(m_hwnd, IDC_MK_USEMODKEYS), g_Options.m_schemePreview.m_MOUSEKEYS.dwFlags & MKF_MODIFIERS); if(g_Options.m_schemePreview.m_MOUSEKEYS.dwFlags & MKF_REPLACENUMBERS) Button_SetCheck(GetDlgItem(m_hwnd, IDC_MK_NLON), TRUE); else Button_SetCheck(GetDlgItem(m_hwnd, IDC_MK_NLOFF), TRUE); SendDlgItemMessage(m_hwnd,IDC_MK_TOPSPEED, TBM_SETRANGE, TRUE,MAKELONG(0,8)); SendDlgItemMessage(m_hwnd,IDC_MK_ACCEL, TBM_SETRANGE, TRUE,MAKELONG(0,8)); int nIndex = 0; for(int i=8;i>=0;i--) { if(g_nSpeedTable[i] >= g_Options.m_schemePreview.m_MOUSEKEYS.iMaxSpeed) nIndex = i; else break; } SendDlgItemMessage(m_hwnd,IDC_MK_TOPSPEED, TBM_SETPOS, TRUE, nIndex); for(i=8;i>=0;i--) { if(g_nAccelTable[i] <= g_Options.m_schemePreview.m_MOUSEKEYS.iTimeToMaxSpeed) nIndex = i; else break; } SendDlgItemMessage(m_hwnd,IDC_MK_ACCEL, TBM_SETPOS, TRUE, nIndex); return 1; } void GetSettingsFromControls() { INT_PTR nIndex; g_Options.m_schemePreview.m_MOUSEKEYS.dwFlags |= MKF_MOUSEKEYSON; if(TRUE/*Button_GetCheck(GetDlgItem(m_hwnd, IDC_MK_USEMODKEYS))*/) // NOTE: ALWAYS use modifiers g_Options.m_schemePreview.m_MOUSEKEYS.dwFlags |= MKF_MODIFIERS; else g_Options.m_schemePreview.m_MOUSEKEYS.dwFlags &= ~MKF_MODIFIERS; if(Button_GetCheck(GetDlgItem(m_hwnd, IDC_MK_NLON))) g_Options.m_schemePreview.m_MOUSEKEYS.dwFlags |= MKF_REPLACENUMBERS; else g_Options.m_schemePreview.m_MOUSEKEYS.dwFlags &= ~MKF_REPLACENUMBERS; nIndex = SendDlgItemMessage(m_hwnd, IDC_MK_TOPSPEED, TBM_GETPOS, 0, 0); g_Options.m_schemePreview.m_MOUSEKEYS.iMaxSpeed = g_nSpeedTable[nIndex]; nIndex = SendDlgItemMessage(m_hwnd, IDC_MK_ACCEL, TBM_GETPOS, 0, 0); g_Options.m_schemePreview.m_MOUSEKEYS.iTimeToMaxSpeed = g_nAccelTable[nIndex]; #pragma message("Handle THis!") // 3/15/95 - // Always init the control speed to 1/8 of the screen width/ // g_mk.iCtrlSpeed = GetSystemMetrics(SM_CXSCREEN) / 16; g_Options.ApplyPreview(); } LRESULT HandleMsg(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { case WM_HSCROLL: GetSettingsFromControls(); break; default: break; } return 0; } LRESULT 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_MK_NLON: case IDC_MK_NLOFF: GetSettingsFromControls(); lResult = 0; break; default: break; } return lResult; } }; // //////////////////////////////////////////////////////////////////// class CStickyKeysPg : public CYesNoPg { public: CStickyKeysPg(LPPROPSHEETPAGE ppsp) : CYesNoPg(ppsp, IDS_WIZSTICKYKEYSTITLE, IDS_WIZSTICKYKEYSSUBTITLE, IDD_KBDWIZSTICKYKEYS) {} protected: BOOL IsOptionSet() { return g_Options.m_schemePreview.m_STICKYKEYS.dwFlags & SKF_STICKYKEYSON; } void SetOptions(BOOL bOn) { if(bOn) { g_Options.m_schemePreview.m_STICKYKEYS.dwFlags |= SKF_STICKYKEYSON; // Turn selected flags on g_Options.m_schemePreview.m_STICKYKEYS.dwFlags |= SKF_TRISTATE; g_Options.m_schemePreview.m_STICKYKEYS.dwFlags |= SKF_TWOKEYSOFF; g_Options.m_schemePreview.m_STICKYKEYS.dwFlags |= SKF_AUDIBLEFEEDBACK; } else g_Options.m_schemePreview.m_STICKYKEYS.dwFlags &= ~SKF_STICKYKEYSON; } }; class CToggleKeysPg : public CYesNoPg { public: CToggleKeysPg(LPPROPSHEETPAGE ppsp) : CYesNoPg(ppsp, IDS_WIZTOGGLEKEYSTITLE, IDS_WIZTOGGLEKEYSSUBTITLE, IDD_KBDWIZTOGGLEKEYS) {} protected: BOOL IsOptionSet() { return g_Options.m_schemePreview.m_TOGGLEKEYS.dwFlags & TKF_TOGGLEKEYSON; } void SetOptions(BOOL bOn) { if(bOn) g_Options.m_schemePreview.m_TOGGLEKEYS.dwFlags |= TKF_TOGGLEKEYSON; else g_Options.m_schemePreview.m_TOGGLEKEYS.dwFlags &= ~TKF_TOGGLEKEYSON; } }; class CShowKeyboardHelpPg : public CYesNoPg { public: CShowKeyboardHelpPg(LPPROPSHEETPAGE ppsp) : CYesNoPg(ppsp, IDS_WIZSHOWEXTRAKEYBOARDHELPTITLE, IDS_WIZSHOWEXTRAKEYBOARDHELPSUBTITLE, IDD_KBDWIZSHOWEXTRAKEYBOARDHELP) {} protected: BOOL IsOptionSet() { return g_Options.m_schemePreview.m_bShowExtraKeyboardHelp; } void SetOptions(BOOL bOn) { g_Options.m_schemePreview.m_bShowExtraKeyboardHelp = bOn; } }; class CMouseSpeedPg : public WizardPage { public: CMouseSpeedPg(LPPROPSHEETPAGE ppsp) : WizardPage(ppsp, IDS_MSEWIZMOUSESPEEDTITLE, IDS_MSEWIZMOUSESPEEDSUBTITLE) { m_dwPageId = IDD_MSEWIZMOUSESPEED; ppsp->pszTemplate = MAKEINTRESOURCE(m_dwPageId); } protected: LRESULT OnInitDialog(HWND hwnd, WPARAM wParam, LPARAM lParam) { // Set slider for mouse speed, (limit 1 to 20), and set its initial value SendDlgItemMessage(m_hwnd,IDC_SLIDER1, TBM_SETRANGE, TRUE,MAKELONG(1,20)); SendDlgItemMessage(m_hwnd,IDC_SLIDER1, TBM_SETPOS, TRUE, min(20, max(1, g_Options.m_schemePreview.m_nMouseSpeed))); return 1; } LRESULT HandleMsg(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { case WM_HSCROLL: g_Options.m_schemePreview.m_nMouseSpeed = (UINT)SendDlgItemMessage(m_hwnd, IDC_SLIDER1, TBM_GETPOS, 0, 0); g_Options.ApplyPreview(); break; default: break; } return 0; } }; class CMouseTrailsPg : public CYesNoPg { public: CMouseTrailsPg(LPPROPSHEETPAGE ppsp) : CYesNoPg(ppsp, IDS_MSEWIZMOUSETRAILSTITLE, IDS_MSEWIZMOUSETRAILSSUBTITLE, IDD_MSEWIZMOUSETRAILS) {} protected: BOOL IsOptionSet() { return (g_Options.m_schemePreview.m_nMouseTrails > 1); } void SetOptions(BOOL bOn) { g_Options.m_schemePreview.m_nMouseTrails = bOn?7:0; } }; #endif // _INC_PGEXTRAS_H