// ShrPgSMB.cpp : implementation file // #include "stdafx.h" #include "ShrPgSMB.h" #include "compdata.h" #include "filesvc.h" #include "CacheSet.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CSharePageGeneralSMB property page IMPLEMENT_DYNCREATE(CSharePageGeneralSMB, CSharePageGeneral) CSharePageGeneralSMB::CSharePageGeneralSMB() : CSharePageGeneral(CSharePageGeneralSMB::IDD), m_fEnableCacheFlag( FALSE ), m_dwFlags( 0 ), m_fEnableCachingButton (TRUE) { //{{AFX_DATA_INIT(CSharePageGeneralSMB) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } CSharePageGeneralSMB::~CSharePageGeneralSMB() { } void CSharePageGeneralSMB::DoDataExchange(CDataExchange* pDX) { CSharePageGeneral::DoDataExchange(pDX); //{{AFX_DATA_MAP(CSharePageGeneralSMB) DDX_Control(pDX, IDC_CACHING, m_cacheBtn); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CSharePageGeneralSMB, CSharePageGeneral) //{{AFX_MSG_MAP(CSharePageGeneralSMB) ON_BN_CLICKED(IDC_CACHING, OnCaching) ON_MESSAGE(WM_HELP, OnHelp) ON_MESSAGE(WM_CONTEXTMENU, OnContextHelp) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CSharePageGeneralSMB message handlers BOOL CSharePageGeneralSMB::Load( CFileMgmtComponentData* pFileMgmtData, LPDATAOBJECT piDataObject ) { ASSERT( NULL == m_pFileMgmtData && NULL != pFileMgmtData && NULL != piDataObject ); if ( CSharePageGeneral::Load (pFileMgmtData, piDataObject) ) { NET_API_STATUS retval = m_pFileMgmtData->GetFileServiceProvider( m_transport)->ReadShareFlags( m_strMachineName, m_strShareName, &m_dwFlags ); switch (retval) { case NERR_Success: m_fEnableCacheFlag = TRUE; break; case NERR_InvalidAPI: case ERROR_INVALID_LEVEL: m_fEnableCachingButton = FALSE; break; default: m_fEnableCachingButton = FALSE; break; } } else return FALSE; return TRUE; } BOOL CSharePageGeneralSMB::OnApply() { if (m_dwShareType & STYPE_IPC) return TRUE; // UpdateData (TRUE) has already been called by OnKillActive () just before OnApply () if ( m_fEnableCacheFlag && IsModified () ) { NET_API_STATUS retval = m_pFileMgmtData->GetFileServiceProvider(m_transport)->WriteShareFlags( m_strMachineName, m_strShareName, m_dwFlags ); if (0L == retval) { return CSharePageGeneral::OnApply(); } else { CString introMsg; VERIFY (introMsg.LoadString (IDS_CANT_SAVE_CHANGES)); DisplayNetMsgError (introMsg, retval); } } else return CSharePageGeneral::OnApply(); return FALSE; } void CSharePageGeneralSMB::DisplayNetMsgError (CString introMsg, NET_API_STATUS dwErr) { AFX_MANAGE_STATE (AfxGetStaticModuleState ()); LPVOID lpMsgBuf = 0; HMODULE hNetMsgDLL = ::LoadLibrary (L"netmsg.dll"); if ( hNetMsgDLL ) { ::FormatMessage ( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_FROM_HMODULE, hNetMsgDLL, dwErr, MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language (LPTSTR) &lpMsgBuf, 0, NULL); // Display the string. CString caption; VERIFY (caption.LoadString (AFX_IDS_APP_TITLE)); introMsg += L" "; introMsg += (LPTSTR) lpMsgBuf; CThemeContextActivator activator; MessageBox (introMsg, caption, MB_ICONWARNING | MB_OK); // Free the buffer. ::LocalFree (lpMsgBuf); ::FreeLibrary (hNetMsgDLL); } } void CSharePageGeneralSMB::OnCaching() { CCacheSettingsDlg dlg (this, INOUT m_dwFlags); CThemeContextActivator activator; if ( IDOK == dlg.DoModal () ) { SetModified (TRUE); } } BOOL CSharePageGeneralSMB::OnInitDialog() { CSharePageGeneral::OnInitDialog(); m_cacheBtn.EnableWindow (m_fEnableCachingButton); if (m_dwShareType & STYPE_IPC) { m_editShareName.SetReadOnly(TRUE); m_editPath.SetReadOnly(TRUE); m_editDescription.SetReadOnly(TRUE); m_checkBoxMaxAllowed.EnableWindow(FALSE); m_checkboxAllowSpecific.EnableWindow(FALSE); GetDlgItem(IDC_SHRPROP_EDIT_USERS)->EnableWindow(FALSE); GetDlgItem(IDC_SHRPROP_SPIN_USERS)->EnableWindow(FALSE); m_cacheBtn.EnableWindow(FALSE); (GetParent()->GetDlgItem(IDCANCEL))->EnableWindow(FALSE); } return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } static DWORD rgCSCUIHelpIds[] = { IDC_CACHING, 1019, //IDH_SHARE_CACHING_BTN, 0, 0 }; ///////////////////////////////////////////////////////////////////// // Help BOOL CSharePageGeneralSMB::OnHelp(WPARAM wParam, LPARAM lParam) { LPHELPINFO lphi = (LPHELPINFO) lParam; if ( HELPINFO_WINDOW == lphi->iContextType ) // a control { if ( IDC_CACHING == lphi->iCtrlId ) { return ::WinHelp ((HWND) lphi->hItemHandle, L"cscui.hlp", HELP_WM_HELP, (DWORD_PTR) rgCSCUIHelpIds); } } return CSharePageGeneral::OnHelp (wParam, lParam); } BOOL CSharePageGeneralSMB::OnContextHelp(WPARAM wParam, LPARAM lParam) { int ctrlID = ::GetDlgCtrlID ((HWND) wParam); if ( IDC_CACHING == ctrlID ) { return ::WinHelp ((HWND) wParam, L"cscui.hlp", HELP_CONTEXTMENU, (DWORD_PTR) rgCSCUIHelpIds); } return CSharePageGeneral::OnContextHelp (wParam, lParam); }