//+--------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1998. // // File: CacheSet.h // // Contents: CCacheSettingsDlg implementation. Allows the setting of file sharing // caching options. // //---------------------------------------------------------------------------- #include "stdafx.h" #include "CacheSet.h" #include "filesvc.h" #include #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CCacheSettingsDlg dialog CCacheSettingsDlg::CCacheSettingsDlg( CWnd* pParent, DWORD& dwFlags) : CDialog(CCacheSettingsDlg::IDD, pParent), m_dwFlags (dwFlags) { //{{AFX_DATA_INIT(CCacheSettingsDlg) //}}AFX_DATA_INIT } void CCacheSettingsDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CCacheSettingsDlg) //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CCacheSettingsDlg, CDialog) //{{AFX_MSG_MAP(CCacheSettingsDlg) ON_BN_CLICKED(IDC_CACHE_OPTIONS_MANUAL, OnCSCNoAuto) ON_BN_CLICKED(IDC_CACHE_OPTIONS_AUTO, OnCSCAuto) ON_BN_CLICKED(IDC_CACHE_OPTIONS_NOCACHE, OnCSCNoAuto) ON_BN_CLICKED(IDC_CACHE_OPTIONS_AUTO_CHECK, OnCSCAutoCheck) ON_NOTIFY(NM_CLICK, IDC_CACHE_HELPLINK, OnHelpLink) ON_NOTIFY(NM_RETURN, IDC_CACHE_HELPLINK, OnHelpLink) ON_MESSAGE(WM_HELP, OnHelp) ON_MESSAGE(WM_CONTEXTMENU, OnContextHelp) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CCacheSettingsDlg message handlers BOOL CCacheSettingsDlg::OnInitDialog() { CDialog::OnInitDialog(); if (GetCachedFlag(m_dwFlags, CSC_CACHE_MANUAL_REINT)) { CheckRadioButton(IDC_CACHE_OPTIONS_MANUAL, IDC_CACHE_OPTIONS_NOCACHE, IDC_CACHE_OPTIONS_MANUAL); } else if (GetCachedFlag(m_dwFlags, CSC_CACHE_AUTO_REINT)) { CheckRadioButton(IDC_CACHE_OPTIONS_MANUAL, IDC_CACHE_OPTIONS_NOCACHE, IDC_CACHE_OPTIONS_AUTO); CheckDlgButton(IDC_CACHE_OPTIONS_AUTO_CHECK, BST_UNCHECKED); } else if (GetCachedFlag(m_dwFlags, CSC_CACHE_VDO)) { CheckRadioButton(IDC_CACHE_OPTIONS_MANUAL, IDC_CACHE_OPTIONS_NOCACHE, IDC_CACHE_OPTIONS_AUTO); CheckDlgButton(IDC_CACHE_OPTIONS_AUTO_CHECK, BST_CHECKED); } else if (GetCachedFlag(m_dwFlags, CSC_CACHE_NONE)) { CheckRadioButton(IDC_CACHE_OPTIONS_MANUAL, IDC_CACHE_OPTIONS_NOCACHE, IDC_CACHE_OPTIONS_NOCACHE); } return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CCacheSettingsDlg::OnCSCNoAuto() { CheckDlgButton(IDC_CACHE_OPTIONS_AUTO_CHECK, BST_UNCHECKED); HWND hwnd = GetDlgItem(IDC_CACHE_OPTIONS_AUTO_CHECK)->GetSafeHwnd(); LONG_PTR lStyle = GetWindowLongPtr(hwnd, GWL_STYLE); if (0 != lStyle) SetWindowLongPtr(hwnd, GWL_STYLE, lStyle & ~WS_TABSTOP); } void CCacheSettingsDlg::OnCSCAuto() { CheckDlgButton(IDC_CACHE_OPTIONS_AUTO_CHECK, BST_CHECKED); HWND hwnd = GetDlgItem(IDC_CACHE_OPTIONS_AUTO_CHECK)->GetSafeHwnd(); LONG_PTR lStyle = GetWindowLongPtr(hwnd, GWL_STYLE); if (0 != lStyle) SetWindowLongPtr(hwnd, GWL_STYLE, lStyle | WS_TABSTOP); } void CCacheSettingsDlg::OnCSCAutoCheck() { CheckRadioButton(IDC_CACHE_OPTIONS_MANUAL, IDC_CACHE_OPTIONS_NOCACHE, IDC_CACHE_OPTIONS_AUTO); HWND hwnd = GetDlgItem(IDC_CACHE_OPTIONS_AUTO_CHECK)->GetSafeHwnd(); LONG_PTR lStyle = GetWindowLongPtr(hwnd, GWL_STYLE); if (0 != lStyle) SetWindowLongPtr(hwnd, GWL_STYLE, lStyle | WS_TABSTOP); } void CCacheSettingsDlg::OnHelpLink(NMHDR* pNMHDR, LRESULT* pResult) { CWaitCursor wait; ::HtmlHelp(0, _T("file_srv.chm"), HH_DISPLAY_TOPIC, (DWORD_PTR)(_T("file_srv_cache_options.htm"))); *pResult = 0; } void CCacheSettingsDlg::OnOK() { DWORD dwNewFlag = 0; switch (GetCheckedRadioButton(IDC_CACHE_OPTIONS_MANUAL, IDC_CACHE_OPTIONS_NOCACHE)) { case IDC_CACHE_OPTIONS_MANUAL: dwNewFlag = CSC_CACHE_MANUAL_REINT; break; case IDC_CACHE_OPTIONS_AUTO: if (BST_CHECKED != IsDlgButtonChecked(IDC_CACHE_OPTIONS_AUTO_CHECK)) dwNewFlag = CSC_CACHE_AUTO_REINT; else dwNewFlag = CSC_CACHE_VDO; break; case IDC_CACHE_OPTIONS_NOCACHE: dwNewFlag = CSC_CACHE_NONE; break; default: break; } SetCachedFlag (&m_dwFlags, dwNewFlag); CDialog::OnOK(); } BOOL CCacheSettingsDlg::GetCachedFlag( DWORD dwFlags, DWORD dwFlagToCheck ) { return (dwFlags & CSC_MASK) == dwFlagToCheck; } VOID CCacheSettingsDlg::SetCachedFlag( DWORD* pdwFlags, DWORD dwNewFlag ) { *pdwFlags &= ~CSC_MASK; *pdwFlags |= dwNewFlag; } ///////////////////////////////////////////////////////////////////// // Help BOOL CCacheSettingsDlg::OnHelp(WPARAM /*wParam*/, LPARAM lParam) { return DoHelp(lParam, HELP_DIALOG_TOPIC(IDD_SMB_CACHE_SETTINGS)); } BOOL CCacheSettingsDlg::OnContextHelp(WPARAM wParam, LPARAM /*lParam*/) { return DoContextHelp(wParam, HELP_DIALOG_TOPIC(IDD_SMB_CACHE_SETTINGS)); } /////////////////////////////////////////////////////////////////////////////// // CacheSettingsDlg () // // Invoke a dialog to set/modify cache settings for a share // // RETURNS // Return S_OK if the user clicked on the OK button. // Return S_FALSE if the user clicked on the Cancel button. // Return E_OUTOFMEMORY if there is not enough memory. // Return E_UNEXPECTED if an expected error occured (eg: bad parameter) // /////////////////////////////////////////////////////////////////////////////// HRESULT CacheSettingsDlg( HWND hwndParent, // IN: Parent's window handle DWORD& dwFlags) // IN & OUT: share flags { AFX_MANAGE_STATE(AfxGetStaticModuleState()); ASSERT(::IsWindow(hwndParent)); HRESULT hResult = S_OK; CWnd parentWnd; parentWnd.Attach (hwndParent); CCacheSettingsDlg dlg (&parentWnd, dwFlags); CThemeContextActivator activator; if (IDOK != dlg.DoModal()) hResult = S_FALSE; parentWnd.Detach (); return hResult; } // CacheSettingsDlg()