//+--------------------------------------------------------------------------- ///////////////////////////////////////////////////////////////////////////////// // // Microsoft Windows // Copyright (C) Microsoft Corporation, 2000-2001. // // File: SaferLevelGeneral.cpp // // Contents: Implementation of CSaferLevelGeneral // //---------------------------------------------------------------------------- #include "stdafx.h" #include #include #include "SaferLevelGeneral.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CSaferLevelGeneral property page CSaferLevelGeneral::CSaferLevelGeneral( CSaferLevel& rSaferLevel, bool bReadOnly, LONG_PTR lNotifyHandle, LPDATAOBJECT pDataObject, DWORD dwDefaultSaferLevel) : CHelpPropertyPage(CSaferLevelGeneral::IDD), m_rSaferLevel (rSaferLevel), m_bReadOnly (bReadOnly), m_bSetAsDefault (false), m_lNotifyHandle (lNotifyHandle), m_bDirty (false), m_pDataObject (pDataObject), m_dwDefaultSaferLevel (dwDefaultSaferLevel), m_bFirst (true), m_bLevelChanged (false) { //{{AFX_DATA_INIT(CSaferLevelGeneral) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT m_rSaferLevel.IncrementOpenPageCount (); } CSaferLevelGeneral::~CSaferLevelGeneral() { if ( m_lNotifyHandle ) { if ( m_bLevelChanged ) { MMCPropertyChangeNotify ( m_lNotifyHandle, // handle to a notification (LPARAM) m_pDataObject); // unique identifier } MMCFreeNotifyHandle (m_lNotifyHandle); } m_rSaferLevel.DecrementOpenPageCount (); } void CSaferLevelGeneral::DoDataExchange(CDataExchange* pDX) { CHelpPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CSaferLevelGeneral) // NOTE: the ClassWizard will add DDX and DDV calls here //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CSaferLevelGeneral, CHelpPropertyPage) //{{AFX_MSG_MAP(CSaferLevelGeneral) ON_BN_CLICKED(IDC_SAFER_LEVEL_SET_AS_DEFAULT, OnSaferLevelSetAsDefault) ON_EN_SETFOCUS(IDC_SAFER_LEVEL_DESCRIPTION, OnSetfocusSaferLevelDescription) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CSaferLevelGeneral message handlers void CSaferLevelGeneral::DoContextHelp (HWND hWndControl) { _TRACE (1, L"Entering CSaferLevelGeneral::DoContextHelp\n"); static const DWORD help_map[] = { IDC_SAFER_LEVEL_NAME, IDH_SAFER_LEVEL_NAME, IDC_SAFER_LEVEL_DESCRIPTION, IDH_SAFER_LEVEL_DESCRIPTION, IDC_SAFER_LEVEL_SET_AS_DEFAULT, IDH_SAFER_LEVEL_SET_AS_DEFAULT, IDC_SAFER_LEVEL_STATUS, IDH_SAFER_LEVEL_STATUS, 0, 0 }; if ( !::WinHelp ( hWndControl, GetF1HelpFilename(), HELP_WM_HELP, (DWORD_PTR) help_map) ) { _TRACE (0, L"WinHelp () failed: 0x%x\n", GetLastError ()); } _TRACE (-1, L"Leaving CSaferLevelGeneral::DoContextHelp\n"); } BOOL CSaferLevelGeneral::OnInitDialog() { CHelpPropertyPage::OnInitDialog(); SetDlgItemText (IDC_SAFER_LEVEL_NAME, m_rSaferLevel.GetObjectName ()); SetDlgItemText (IDC_SAFER_LEVEL_DESCRIPTION, m_rSaferLevel.GetDescription ()); if ( m_rSaferLevel.IsDefault () ) { m_bSetAsDefault = true; CString text; VERIFY (text.LoadString (IDS_IS_DEFAULT_LEVEL)); SetDlgItemText (IDC_SAFER_LEVEL_STATUS, text); GetDlgItem (IDC_SAFER_LEVEL_SET_AS_DEFAULT)->EnableWindow (FALSE); GetDlgItem (IDC_LEVEL_INSTRUCTIONS)->EnableWindow (FALSE); } if ( m_bReadOnly || ( SAFER_LEVELID_DISALLOWED != m_rSaferLevel.GetLevel () && SAFER_LEVELID_FULLYTRUSTED != m_rSaferLevel.GetLevel () ) ) { CString text; if ( SAFER_LEVELID_CONSTRAINED == m_rSaferLevel.GetLevel () ) { VERIFY (text.LoadString (IDS_CANT_SET_CONSTRAINED_AS_DEFAULT)); SetDlgItemText (IDC_LEVEL_INSTRUCTIONS, text); } GetDlgItem (IDC_SAFER_LEVEL_SET_AS_DEFAULT)->EnableWindow (FALSE); GetDlgItem (IDC_LEVEL_INSTRUCTIONS)->EnableWindow (FALSE); } return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } BOOL CSaferLevelGeneral::OnApply () { if ( !m_bReadOnly && m_bDirty ) { HRESULT hr = S_OK; BOOL bResult = FALSE; if ( m_bSetAsDefault ) hr = m_rSaferLevel.SetAsDefault (); if ( SUCCEEDED (hr) ) { m_bLevelChanged = true; bResult = CHelpPropertyPage::OnApply (); } else { CString text; CString caption; CThemeContextActivator activator; VERIFY (caption.LoadString (IDS_SAFER_WINDOWS_EXTENSION_REGISTRY)); text.FormatMessage (IDS_CANT_SET_AS_DEFAULT, m_rSaferLevel.GetObjectName (), GetSystemMessage (hr)); MessageBox (text, caption, MB_ICONWARNING | MB_OK); } return bResult; } else return CHelpPropertyPage::OnApply (); } void CSaferLevelGeneral::OnSaferLevelSetAsDefault() { if ( !m_bSetAsDefault ) { int iRet = IDYES; if ( m_rSaferLevel.GetLevel () < m_dwDefaultSaferLevel ) { CString text; CString caption; CThemeContextActivator activator; VERIFY (caption.LoadString (IDS_SAFER_WINDOWS_EXTENSION_REGISTRY)); VERIFY (text.LoadString (IDS_DEFAULT_LEVEL_CHANGE_WARNING)); iRet = MessageBox (text, caption, MB_ICONWARNING | MB_YESNO); } if ( IDYES == iRet ) { m_dwDefaultSaferLevel = m_rSaferLevel.GetLevel (); m_bDirty = true; m_bSetAsDefault = true; CString text; VERIFY (text.LoadString (IDS_IS_DEFAULT_LEVEL)); SetDlgItemText (IDC_SAFER_LEVEL_STATUS, text); SetModified (TRUE); GetDlgItem (IDC_SAFER_LEVEL_SET_AS_DEFAULT)->EnableWindow (FALSE); } } } /////////////////////////////////////////////////////////////////////////////// // This method traps keyboard commands from the dialog, which has only // disabled controls, usually. That prevented the closing of the dialog // when the user pressed ESC. // 222693 SAFER: Pressing ESC doesn't dismiss SAFER Level dialogs /////////////////////////////////////////////////////////////////////////////// BOOL CSaferLevelGeneral::OnCommand(WPARAM wParam, LPARAM lParam) { WORD id = LOWORD (wParam); if ( IDCANCEL == id ) { GetParent ()->SendMessage (WM_COMMAND, wParam, lParam); } return CHelpPropertyPage::OnCommand(wParam, lParam); } void CSaferLevelGeneral::OnSetfocusSaferLevelDescription() { if ( m_bFirst ) { SendDlgItemMessage (IDC_SAFER_LEVEL_DESCRIPTION, EM_SETSEL, (WPARAM) 0, 0); m_bFirst = false; } }