655 lines
17 KiB
C++
655 lines
17 KiB
C++
/**********************************************************************/
|
|
/** Microsoft Windows/NT **/
|
|
/** Copyright(c) Microsoft Corp., 1997 **/
|
|
/**********************************************************************/
|
|
|
|
/*
|
|
sfmcfg.cpp
|
|
Implementation for the configuration property page.
|
|
|
|
FILE HISTORY:
|
|
8/20/97 ericdav Code moved into file managemnet snapin
|
|
|
|
*/
|
|
|
|
#include "stdafx.h"
|
|
#include "sfmcfg.h"
|
|
#include "sfmutil.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// CMacFilesConfiguration property page
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
IMPLEMENT_DYNCREATE(CMacFilesConfiguration, CPropertyPage)
|
|
|
|
CMacFilesConfiguration::CMacFilesConfiguration()
|
|
: CPropertyPage(CMacFilesConfiguration::IDD),
|
|
m_bIsNT5(FALSE)
|
|
{
|
|
//{{AFX_DATA_INIT(CMacFilesConfiguration)
|
|
//}}AFX_DATA_INIT
|
|
}
|
|
|
|
CMacFilesConfiguration::~CMacFilesConfiguration()
|
|
{
|
|
}
|
|
|
|
void CMacFilesConfiguration::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CPropertyPage::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CMacFilesConfiguration)
|
|
DDX_Control(pDX, IDC_COMBO_AUTHENTICATION, m_comboAuthentication);
|
|
DDX_Control(pDX, IDC_RADIO_SESSSION_LIMIT, m_radioSessionLimit);
|
|
DDX_Control(pDX, IDC_EDIT_LOGON_MESSAGE, m_editLogonMessage);
|
|
DDX_Control(pDX, IDC_RADIO_SESSION_UNLIMITED, m_radioSessionUnlimited);
|
|
DDX_Control(pDX, IDC_CHECK_SAVE_PASSWORD, m_checkSavePassword);
|
|
DDX_Control(pDX, IDC_EDIT_SESSION_LIMIT, m_editSessionLimit);
|
|
DDX_Control(pDX, IDC_EDIT_SERVER_NAME, m_editServerName);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CMacFilesConfiguration, CPropertyPage)
|
|
//{{AFX_MSG_MAP(CMacFilesConfiguration)
|
|
ON_BN_CLICKED(IDC_RADIO_SESSION_UNLIMITED, OnRadioSessionUnlimited)
|
|
ON_BN_CLICKED(IDC_RADIO_SESSSION_LIMIT, OnRadioSesssionLimit)
|
|
ON_BN_CLICKED(IDC_CHECK_SAVE_PASSWORD, OnCheckSavePassword)
|
|
ON_EN_CHANGE(IDC_EDIT_LOGON_MESSAGE, OnChangeEditLogonMessage)
|
|
ON_EN_CHANGE(IDC_EDIT_SERVER_NAME, OnChangeEditServerName)
|
|
ON_EN_CHANGE(IDC_EDIT_SESSION_LIMIT, OnChangeEditSessionLimit)
|
|
// ON_EN_KILLFOCUS(IDC_EDIT_SESSION_LIMIT, OnKillfocusEditSessionLimit) bug#158617
|
|
ON_WM_CREATE()
|
|
ON_WM_DESTROY()
|
|
ON_WM_HELPINFO()
|
|
ON_WM_CONTEXTMENU()
|
|
ON_CBN_SELCHANGE(IDC_COMBO_AUTHENTICATION, OnSelchangeComboAuthentication)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// CMacFilesConfiguration message handlers
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
BOOL CMacFilesConfiguration::OnInitDialog()
|
|
{
|
|
CPropertyPage::OnInitDialog();
|
|
|
|
AFX_MANAGE_STATE(AfxGetStaticModuleState());
|
|
|
|
PAFP_SERVER_INFO pAfpServerInfo;
|
|
DWORD err;
|
|
CString strTemp;
|
|
|
|
if ( !g_SfmDLL.LoadFunctionPointers() )
|
|
return S_OK;
|
|
|
|
//
|
|
// Setup our controls
|
|
//
|
|
m_editSessionLimit.LimitText(10);
|
|
|
|
//
|
|
// Get the info from the server
|
|
//
|
|
err = ((SERVERGETINFOPROC) g_SfmDLL[AFP_SERVER_GET_INFO])(m_pSheet->m_hAfpServer,
|
|
(LPBYTE*) &pAfpServerInfo);
|
|
if (err != NO_ERROR)
|
|
{
|
|
::SFMMessageBox(err);
|
|
|
|
//
|
|
// Just to setup the radio buttons
|
|
//
|
|
SetSessionLimit(AFP_MAXSESSIONS);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
err = m_pSheet->IsNT5Machine(m_pSheet->m_strMachine, &m_bIsNT5);
|
|
if (err != NO_ERROR)
|
|
{
|
|
m_bIsNT5 = FALSE; // Assume NT4
|
|
}
|
|
|
|
//
|
|
// Since we can't just specify which options we want to set,
|
|
// we need to save off the original options and then just
|
|
// change the ones we expose through this UI. We don't want
|
|
// to disturb the others.
|
|
//
|
|
m_dwAfpOriginalOptions = pAfpServerInfo->afpsrv_options;
|
|
|
|
//
|
|
// Set the information
|
|
//
|
|
m_editServerName.SetLimitText(AFP_SERVERNAME_LEN);
|
|
m_editServerName.SetWindowText(pAfpServerInfo->afpsrv_name);
|
|
|
|
m_checkSavePassword.SetCheck(
|
|
(INT)(pAfpServerInfo->afpsrv_options &
|
|
AFP_SRVROPT_ALLOWSAVEDPASSWORD ));
|
|
|
|
// fill in the combo box and select the correct item
|
|
// combobox is not sorted so this is the order of the items
|
|
strTemp.LoadString(IDS_AUTH_MS_ONLY);
|
|
m_comboAuthentication.AddString(strTemp);
|
|
|
|
strTemp.LoadString(IDS_AUTH_APPLE_CLEARTEXT);
|
|
m_comboAuthentication.AddString(strTemp);
|
|
|
|
if (m_bIsNT5)
|
|
{
|
|
strTemp.LoadString(IDS_AUTH_APPLE_ENCRYPTED);
|
|
m_comboAuthentication.AddString(strTemp);
|
|
|
|
strTemp.LoadString(IDS_AUTH_CLEARTEXT_OR_MS);
|
|
m_comboAuthentication.AddString(strTemp);
|
|
|
|
strTemp.LoadString(IDS_AUTH_ENCRYPTED_OR_MS);
|
|
m_comboAuthentication.AddString(strTemp);
|
|
}
|
|
|
|
BOOL bCleartext = pAfpServerInfo->afpsrv_options & AFP_SRVROPT_CLEARTEXTLOGONALLOWED;
|
|
|
|
// default NT4 value for MS AUM
|
|
BOOL bMS = (bCleartext) ? FALSE : TRUE;
|
|
if (m_bIsNT5)
|
|
{
|
|
bMS = pAfpServerInfo->afpsrv_options & AFP_SRVROPT_MICROSOFT_UAM;
|
|
}
|
|
|
|
BOOL bEncrypted = pAfpServerInfo->afpsrv_options & AFP_SRVROPT_NATIVEAPPLEUAM;
|
|
|
|
if (bEncrypted && bMS)
|
|
m_comboAuthentication.SetCurSel(4);
|
|
else
|
|
if (bCleartext && bMS)
|
|
m_comboAuthentication.SetCurSel(3);
|
|
else
|
|
if (bEncrypted)
|
|
m_comboAuthentication.SetCurSel(2);
|
|
else
|
|
if (bCleartext)
|
|
m_comboAuthentication.SetCurSel(1);
|
|
else
|
|
m_comboAuthentication.SetCurSel(0);
|
|
|
|
SetSessionLimit(pAfpServerInfo->afpsrv_max_sessions);
|
|
|
|
//
|
|
// Direct the message edit control not to add end-of-line
|
|
// character from wordwrapped text lines.
|
|
//
|
|
m_editLogonMessage.SetLimitText(AFP_MESSAGE_LEN);
|
|
m_editLogonMessage.FmtLines(FALSE);
|
|
|
|
m_editLogonMessage.SetWindowText(pAfpServerInfo->afpsrv_login_msg);
|
|
|
|
((SFMBUFFERFREEPROC) g_SfmDLL[AFP_BUFFER_FREE])(pAfpServerInfo);
|
|
|
|
SetModified(FALSE);
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
BOOL CMacFilesConfiguration::OnKillActive()
|
|
{
|
|
// TODO: Add your specialized code here and/or call the base class
|
|
|
|
return CPropertyPage::OnKillActive();
|
|
}
|
|
|
|
void CMacFilesConfiguration::OnOK()
|
|
{
|
|
// TODO: Add your specialized code here and/or call the base class
|
|
|
|
CPropertyPage::OnOK();
|
|
}
|
|
|
|
BOOL CMacFilesConfiguration::OnSetActive()
|
|
{
|
|
// TODO: Add your specialized code here and/or call the base class
|
|
|
|
return CPropertyPage::OnSetActive();
|
|
}
|
|
|
|
void CMacFilesConfiguration::OnRadioSessionUnlimited()
|
|
{
|
|
SetModified(TRUE);
|
|
UpdateRadioButtons(TRUE);
|
|
}
|
|
|
|
void CMacFilesConfiguration::OnRadioSesssionLimit()
|
|
{
|
|
SetModified(TRUE);
|
|
UpdateRadioButtons(FALSE);
|
|
}
|
|
|
|
void
|
|
CMacFilesConfiguration::UpdateRadioButtons
|
|
(
|
|
BOOL bUnlimitedClicked
|
|
)
|
|
{
|
|
if (bUnlimitedClicked)
|
|
{
|
|
m_radioSessionUnlimited.SetCheck(1);
|
|
m_radioSessionLimit.SetCheck(0);
|
|
|
|
m_editSessionLimit.EnableWindow(FALSE);
|
|
}
|
|
else
|
|
{
|
|
m_radioSessionUnlimited.SetCheck(0);
|
|
m_radioSessionLimit.SetCheck(1);
|
|
|
|
m_editSessionLimit.EnableWindow(TRUE);
|
|
}
|
|
}
|
|
|
|
void
|
|
CMacFilesConfiguration::SetSessionLimit
|
|
(
|
|
DWORD dwSessionLimit
|
|
)
|
|
{
|
|
if ( dwSessionLimit == AFP_MAXSESSIONS )
|
|
{
|
|
//
|
|
// Set selection to the Unlimited button
|
|
//
|
|
m_radioSessionUnlimited.SetCheck(1);
|
|
|
|
dwSessionLimit = 1;
|
|
UpdateRadioButtons(TRUE);
|
|
}
|
|
else
|
|
{
|
|
//
|
|
// Set the sessions button to the value
|
|
//
|
|
m_radioSessionUnlimited.SetCheck(0);
|
|
|
|
m_spinSessionLimit.SetPos( dwSessionLimit );
|
|
UpdateRadioButtons(FALSE);
|
|
}
|
|
|
|
CString cstrSessionLimit;
|
|
cstrSessionLimit.Format(_T("%u"), dwSessionLimit);
|
|
m_editSessionLimit.SetWindowText(cstrSessionLimit);
|
|
}
|
|
|
|
DWORD
|
|
CMacFilesConfiguration::QuerySessionLimit()
|
|
{
|
|
if (m_radioSessionUnlimited.GetCheck())
|
|
{
|
|
return AFP_MAXSESSIONS;
|
|
}
|
|
else
|
|
{
|
|
CString strSessionLimit;
|
|
|
|
m_editSessionLimit.GetWindowText(strSessionLimit);
|
|
|
|
strSessionLimit.TrimLeft();
|
|
strSessionLimit.TrimRight();
|
|
|
|
//
|
|
// Strip off any leading zeros
|
|
//
|
|
int nCount = 0;
|
|
|
|
while (strSessionLimit[nCount] == '0')
|
|
{
|
|
nCount++;
|
|
}
|
|
|
|
if (nCount)
|
|
{
|
|
//
|
|
// Leading zeros, strip off and set the text
|
|
//
|
|
strSessionLimit = strSessionLimit.Right(strSessionLimit.GetLength() - nCount);
|
|
}
|
|
|
|
__int64 i64SessionLimit = _wtoi64(strSessionLimit);
|
|
DWORD dwSessionLimit = AFP_MAXSESSIONS;
|
|
if (i64SessionLimit <= AFP_MAXSESSIONS)
|
|
dwSessionLimit = (DWORD)i64SessionLimit;
|
|
|
|
if (dwSessionLimit == 0)
|
|
dwSessionLimit = 1;
|
|
|
|
// Now, dwSessionLimit is in the range [1, AFP_MAXSESSIONS]
|
|
CString cstrSessionLimit;
|
|
cstrSessionLimit.Format(_T("%u"), dwSessionLimit);
|
|
m_editSessionLimit.SetWindowText(cstrSessionLimit);
|
|
|
|
return dwSessionLimit;
|
|
}
|
|
}
|
|
|
|
void CMacFilesConfiguration::OnSelchangeComboAuthentication()
|
|
{
|
|
SetModified(TRUE);
|
|
}
|
|
|
|
void CMacFilesConfiguration::OnCheckSavePassword()
|
|
{
|
|
SetModified(TRUE);
|
|
}
|
|
|
|
void CMacFilesConfiguration::OnChangeEditLogonMessage()
|
|
{
|
|
SetModified(TRUE);
|
|
}
|
|
|
|
void CMacFilesConfiguration::OnChangeEditServerName()
|
|
{
|
|
SetModified(TRUE);
|
|
}
|
|
|
|
void CMacFilesConfiguration::OnChangeEditSessionLimit()
|
|
{
|
|
SetModified(TRUE);
|
|
}
|
|
|
|
void CMacFilesConfiguration::OnKillfocusEditSessionLimit()
|
|
{
|
|
if (::IsWindow(m_editSessionLimit.GetSafeHwnd()))
|
|
{
|
|
//
|
|
// Calling this forces the edit box to validate itself
|
|
//
|
|
QuerySessionLimit();
|
|
}
|
|
}
|
|
|
|
BOOL CMacFilesConfiguration::OnApply()
|
|
{
|
|
AFX_MANAGE_STATE(AfxGetStaticModuleState());
|
|
|
|
AFP_SERVER_INFO AfpServerInfo;
|
|
DWORD dwParmNum = 0;
|
|
DWORD err;
|
|
CString strServerName;
|
|
CString strLogonMessage;
|
|
|
|
if ( !g_SfmDLL.LoadFunctionPointers() )
|
|
return S_OK;
|
|
|
|
::ZeroMemory(&AfpServerInfo, sizeof(AfpServerInfo));
|
|
|
|
//
|
|
// Get the server name
|
|
//
|
|
if (m_editServerName.GetModify())
|
|
{
|
|
m_editServerName.GetWindowText(strServerName);
|
|
strServerName.TrimLeft();
|
|
strServerName.TrimRight();
|
|
|
|
if ( strServerName.IsEmpty() )
|
|
{
|
|
::AfxMessageBox(IDS_NEED_SERVER_NAME);
|
|
m_editServerName.SetFocus();
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//
|
|
// Validate the server name
|
|
//
|
|
|
|
if ( strServerName.Find(_T(':') ) != -1 )
|
|
{
|
|
::AfxMessageBox( IDS_AFPERR_InvalidServerName );
|
|
|
|
m_editServerName.SetFocus();
|
|
m_editServerName.SetSel(0, -1);
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//
|
|
// Warn the user that the change won't take effect until
|
|
// the service is restarted.
|
|
//
|
|
if (!m_bIsNT5)
|
|
{
|
|
::AfxMessageBox(IDS_SERVERNAME_CHANGE, MB_ICONEXCLAMATION);
|
|
}
|
|
|
|
AfpServerInfo.afpsrv_name = (LPWSTR) ((LPCWSTR) strServerName);
|
|
dwParmNum |= AFP_SERVER_PARMNUM_NAME;
|
|
|
|
m_editServerName.SetModify(FALSE);
|
|
}
|
|
|
|
//
|
|
// Get the logon message
|
|
//
|
|
if (m_editLogonMessage.GetModify())
|
|
{
|
|
m_editLogonMessage.GetWindowText(strLogonMessage);
|
|
strLogonMessage.TrimLeft();
|
|
strLogonMessage.TrimRight();
|
|
|
|
//
|
|
// Was there any text ?
|
|
//
|
|
if ( strLogonMessage.IsEmpty() ) // always has a terminating NULL
|
|
{
|
|
AfpServerInfo.afpsrv_login_msg = NULL;
|
|
}
|
|
else
|
|
{
|
|
if ( strLogonMessage.GetLength() > AFP_MESSAGE_LEN )
|
|
{
|
|
::AfxMessageBox(IDS_MESSAGE_TOO_LONG);
|
|
|
|
// Set focus to the edit box and select the text
|
|
m_editLogonMessage.SetFocus();
|
|
m_editLogonMessage.SetSel(0, -1);
|
|
|
|
return(FALSE);
|
|
}
|
|
|
|
AfpServerInfo.afpsrv_login_msg = (LPWSTR) ((LPCWSTR) strLogonMessage);
|
|
}
|
|
|
|
dwParmNum |= AFP_SERVER_PARMNUM_LOGINMSG;
|
|
|
|
m_editLogonMessage.SetModify(FALSE);
|
|
}
|
|
|
|
//
|
|
// Restore the original options and then just update the ones we
|
|
// are able to change
|
|
//
|
|
AfpServerInfo.afpsrv_options = m_dwAfpOriginalOptions;
|
|
|
|
//
|
|
// Set the server options to whatever the user set
|
|
//
|
|
if (m_checkSavePassword.GetCheck())
|
|
{
|
|
//
|
|
// Set the option bit
|
|
//
|
|
AfpServerInfo.afpsrv_options |= AFP_SRVROPT_ALLOWSAVEDPASSWORD;
|
|
}
|
|
else
|
|
{
|
|
//
|
|
// Clear the option bit
|
|
//
|
|
AfpServerInfo.afpsrv_options &= ~AFP_SRVROPT_ALLOWSAVEDPASSWORD;
|
|
}
|
|
|
|
// set the correct authentication options depending upon what is selected
|
|
switch (m_comboAuthentication.GetCurSel())
|
|
{
|
|
case 0:
|
|
// MS Auth only
|
|
if (!m_bIsNT5)
|
|
{
|
|
AfpServerInfo.afpsrv_options &= ~AFP_SRVROPT_MICROSOFT_UAM;
|
|
}
|
|
else
|
|
{
|
|
AfpServerInfo.afpsrv_options |= AFP_SRVROPT_MICROSOFT_UAM;
|
|
}
|
|
|
|
AfpServerInfo.afpsrv_options &= ~AFP_SRVROPT_CLEARTEXTLOGONALLOWED;
|
|
AfpServerInfo.afpsrv_options &= ~AFP_SRVROPT_NATIVEAPPLEUAM;
|
|
break;
|
|
|
|
case 1:
|
|
// Apple cleartext
|
|
AfpServerInfo.afpsrv_options |= AFP_SRVROPT_CLEARTEXTLOGONALLOWED;
|
|
AfpServerInfo.afpsrv_options &= ~AFP_SRVROPT_MICROSOFT_UAM;
|
|
AfpServerInfo.afpsrv_options &= ~AFP_SRVROPT_NATIVEAPPLEUAM;
|
|
break;
|
|
|
|
case 2:
|
|
// Apple encrypted (only on NT5)
|
|
AfpServerInfo.afpsrv_options &= ~AFP_SRVROPT_CLEARTEXTLOGONALLOWED;
|
|
AfpServerInfo.afpsrv_options &= ~AFP_SRVROPT_MICROSOFT_UAM;
|
|
AfpServerInfo.afpsrv_options |= AFP_SRVROPT_NATIVEAPPLEUAM;
|
|
break;
|
|
|
|
case 3:
|
|
// Cleartext or MS (only on NT5)
|
|
AfpServerInfo.afpsrv_options |= AFP_SRVROPT_CLEARTEXTLOGONALLOWED;
|
|
AfpServerInfo.afpsrv_options |= AFP_SRVROPT_MICROSOFT_UAM;
|
|
AfpServerInfo.afpsrv_options &= ~AFP_SRVROPT_NATIVEAPPLEUAM;
|
|
break;
|
|
|
|
case 4:
|
|
// Apple Encrypted or MS (only on NT5)
|
|
AfpServerInfo.afpsrv_options &= ~AFP_SRVROPT_CLEARTEXTLOGONALLOWED;
|
|
AfpServerInfo.afpsrv_options |= AFP_SRVROPT_MICROSOFT_UAM;
|
|
AfpServerInfo.afpsrv_options |= AFP_SRVROPT_NATIVEAPPLEUAM;
|
|
break;
|
|
|
|
default:
|
|
ASSERT(FALSE);
|
|
break;
|
|
}
|
|
|
|
// if we are enabling an authentication type that has apple encrypted
|
|
// then we need to warn the user.
|
|
if ( (AfpServerInfo.afpsrv_options & AFP_SRVROPT_NATIVEAPPLEUAM) &&
|
|
!(m_dwAfpOriginalOptions & AFP_SRVROPT_NATIVEAPPLEUAM) )
|
|
{
|
|
if (AfxMessageBox(IDS_AUTH_WARNING, MB_OKCANCEL) == IDCANCEL)
|
|
{
|
|
m_comboAuthentication.SetFocus();
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
//
|
|
// Get the session limit
|
|
//
|
|
AfpServerInfo.afpsrv_max_sessions = QuerySessionLimit();
|
|
|
|
//
|
|
// Now tell the server about it
|
|
//
|
|
dwParmNum |= ( AFP_SERVER_PARMNUM_OPTIONS |
|
|
AFP_SERVER_PARMNUM_MAX_SESSIONS );
|
|
|
|
err = ((SERVERSETINFOPROC) g_SfmDLL[AFP_SERVER_SET_INFO])(m_pSheet->m_hAfpServer,
|
|
(LPBYTE)&AfpServerInfo,
|
|
dwParmNum );
|
|
if ( err != NO_ERROR )
|
|
{
|
|
::SFMMessageBox(err);
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
// update our options
|
|
m_dwAfpOriginalOptions = AfpServerInfo.afpsrv_options;
|
|
|
|
//
|
|
// Clear the modified status for this page
|
|
//
|
|
SetModified(FALSE);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
int CMacFilesConfiguration::OnCreate(LPCREATESTRUCT lpCreateStruct)
|
|
{
|
|
if (CPropertyPage::OnCreate(lpCreateStruct) == -1)
|
|
return -1;
|
|
|
|
HWND hParent = ::GetParent(m_hWnd);
|
|
_ASSERTE(hParent);
|
|
|
|
if (m_pSheet)
|
|
{
|
|
m_pSheet->AddRef();
|
|
m_pSheet->SetSheetWindow(hParent);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
void CMacFilesConfiguration::OnDestroy()
|
|
{
|
|
CPropertyPage::OnDestroy();
|
|
|
|
if (m_pSheet)
|
|
{
|
|
SetEvent(m_pSheet->m_hDestroySync);
|
|
m_pSheet->SetSheetWindow(NULL);
|
|
m_pSheet->Release();
|
|
}
|
|
|
|
}
|
|
|
|
BOOL CMacFilesConfiguration::OnHelpInfo(HELPINFO* pHelpInfo)
|
|
{
|
|
AFX_MANAGE_STATE(AfxGetStaticModuleState());
|
|
|
|
|
|
if (pHelpInfo->iContextType == HELPINFO_WINDOW)
|
|
{
|
|
::WinHelp ((HWND)pHelpInfo->hItemHandle,
|
|
m_pSheet->m_strHelpFilePath,
|
|
HELP_WM_HELP,
|
|
g_aHelpIDs_CONFIGURE_SFM);
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void CMacFilesConfiguration::OnContextMenu(CWnd* pWnd, CPoint /*point*/)
|
|
{
|
|
AFX_MANAGE_STATE(AfxGetStaticModuleState());
|
|
|
|
if (this == pWnd)
|
|
return;
|
|
|
|
::WinHelp (pWnd->m_hWnd,
|
|
m_pSheet->m_strHelpFilePath,
|
|
HELP_CONTEXTMENU,
|
|
g_aHelpIDs_CONFIGURE_SFM);
|
|
}
|
|
|