Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

991 lines
25 KiB

/////////////////////////////////////////////////////////////////////////////
// FILE : ppFaxDeviceGeneral.cpp //
// //
// DESCRIPTION : prop pages of Inbox archive //
// //
// AUTHOR : yossg //
// //
// HISTORY : //
// Oct 17 2000 yossg //
// Windows XP //
// Feb 14 2001 yossg Add Manual Receive support //
// //
// Copyright (C) 1999 Microsoft Corporation All Rights Reserved //
// //
/////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "MSFxsSnp.h"
#include "ppFaxDeviceGeneral.h"
#include "Device.h"
#include "FaxServer.h"
#include "FaxServerNode.h"
#include "FaxMMCPropertyChange.h"
#include "FaxMMCGlobals.h"
#include "FxsValid.h"
#include "dlgutils.h"
#include <faxres.h>
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//
// Constructor
//
CppFaxDeviceGeneral::CppFaxDeviceGeneral(
LONG_PTR hNotificationHandle,
CSnapInItem *pNode,
CSnapInItem *pParentNode,
DWORD dwDeviceID,
HINSTANCE hInst)
: CPropertyPageExImpl<CppFaxDeviceGeneral>(pNode, NULL)
{
m_lpNotifyHandle = hNotificationHandle;
m_pParentNode = NULL; //in case static-cast failed and wont change the pointer
m_pParentNode = static_cast <CFaxDeviceNode *> (pNode);
m_pGrandParentNode = pParentNode;
m_dwDeviceID = dwDeviceID;
m_pFaxDeviceConfig = NULL;
m_fAllReadyToApply = FALSE;
m_fIsDialogInitiated = FALSE;
}
//
// Destructor
//
CppFaxDeviceGeneral::~CppFaxDeviceGeneral()
{
if (NULL != m_pFaxDeviceConfig)
{
FaxFreeBuffer( m_pFaxDeviceConfig );
}
// Note - This needs to be called only once per property sheet.
// In our convention called in the general tab.
if (NULL != m_lpNotifyHandle)
{
MMCFreeNotifyHandle(m_lpNotifyHandle);
m_lpNotifyHandle = NULL;
}
}
/////////////////////////////////////////////////////////////////////////////
// CppFaxDeviceGeneral message handlers
/*
- CppFaxDeviceGeneral::InitRPC
-
* Purpose:
* Initiates the configuration structure from RPC get Call.
*
* Arguments:
*
* Return:
* OLE error code
*/
HRESULT CppFaxDeviceGeneral::InitRPC( )
{
DEBUG_FUNCTION_NAME( _T("CppFaxDeviceGeneral::InitRPC"));
HRESULT hRc = S_OK;
DWORD ec = ERROR_SUCCESS;
//
// get RPC Handle
//
if (!m_pFaxServer->GetFaxServerHandle())
{
ec= GetLastError();
DebugPrintEx(
DEBUG_ERR,
_T("Failed to GetFaxServerHandle. (ec: %ld)"),
ec);
goto Error;
}
//
// Retrieve the Device configuration
//
if (!FaxGetPortEx(m_pFaxServer->GetFaxServerHandle(),
m_dwDeviceID,
&m_pFaxDeviceConfig))
{
ec = GetLastError();
DebugPrintEx(
DEBUG_ERR,
_T("Fail to get device configuration. (ec: %ld)"),
ec);
if (IsNetworkError(ec))
{
DebugPrintEx(
DEBUG_ERR,
_T("Network Error was found. (ec: %ld)"),
ec);
m_pFaxServer->Disconnect();
}
goto Error;
}
//For max verification
ATLASSERT(m_pFaxDeviceConfig);
ATLASSERT(S_OK == hRc);
DebugPrintEx( DEBUG_MSG,
_T("Succeed to get device configuration."));
goto Exit;
Error:
ATLASSERT(ERROR_SUCCESS != ec);
hRc = HRESULT_FROM_WIN32(ec);
PageError(GetFaxServerErrorMsg(ec), m_hWnd);
Exit:
return (hRc);
}
/*
- CppFaxDeviceGeneral::OnInitDialog
-
* Purpose:
* Initiates all controls when dialog is called.
*
* Arguments:
*
* Return:
*
*/
LRESULT CppFaxDeviceGeneral::OnInitDialog( UINT uiMsg, WPARAM wParam, LPARAM lParam, BOOL& fHandled )
{
DEBUG_FUNCTION_NAME( _T("CppFaxDeviceGeneral::PageInitDialog"));
DWORD ec = ERROR_SUCCESS;
UNREFERENCED_PARAMETER( uiMsg );
UNREFERENCED_PARAMETER( wParam );
UNREFERENCED_PARAMETER( lParam );
UNREFERENCED_PARAMETER( fHandled );
//
// init controls
//
m_DescriptionBox.Attach(GetDlgItem(IDC_DEVICE_DESCRIPTION_EDIT));
m_TSIDBox.Attach(GetDlgItem(IDC_DEVICE_TSID_EDIT));
m_CSIDBox.Attach(GetDlgItem(IDC_DEVICE_CSID_EDIT));
m_RingsBox.Attach(GetDlgItem(IDC_DEVICE_RINGS_EDIT));
m_RingsSpin.Attach(GetDlgItem(IDC_DEVICE_RINGS_SPIN));
m_DescriptionBox.SetLimitText(MAX_FAX_STRING_LEN-1);
m_TSIDBox.SetLimitText(FXS_TSID_CSID_MAX_LENGTH);
m_CSIDBox.SetLimitText(FXS_TSID_CSID_MAX_LENGTH);
m_RingsBox.SetLimitText(FXS_RINGS_LENGTH);
ATLASSERT(m_pFaxDeviceConfig);
//
// Description
//
m_DescriptionBox.SetWindowText(m_pFaxDeviceConfig->lptstrDescription);
//
// Rings
//
m_RingsSpin.SetRange(FXS_RINGS_LOWER, FXS_RINGS_UPPER);
m_RingsSpin.SetPos((int)m_pFaxDeviceConfig->dwRings);
//
// CSID
//
m_CSIDBox.SetWindowText(m_pFaxDeviceConfig->lptstrCsid);
//
// Receive
//
switch ( m_pFaxDeviceConfig->ReceiveMode )
{
case FAX_DEVICE_RECEIVE_MODE_OFF: // Do not answer to incoming calls
CheckDlgButton(IDC_RECEIVE_CHECK, BST_UNCHECKED);
CheckDlgButton(IDC_RECEIVE_AUTO_RADIO1, BST_CHECKED);
EnableReceiveControls (FALSE);
break;
case FAX_DEVICE_RECEIVE_MODE_AUTO: // Automatically answer to incoming calls after dwRings rings
CheckDlgButton(IDC_RECEIVE_CHECK, BST_CHECKED);
CheckDlgButton(IDC_RECEIVE_AUTO_RADIO1, BST_CHECKED);
EnableRingsControls (TRUE);
break;
case FAX_DEVICE_RECEIVE_MODE_MANUAL: // Manually answer to incoming calls - only FaxAnswerCall answers the call
CheckDlgButton(IDC_RECEIVE_CHECK, BST_CHECKED);
CheckDlgButton(IDC_RECEIVE_MANUAL_RADIO2, BST_CHECKED);
EnableRingsControls (FALSE);
break;
default:
ATLASSERT(FALSE);
DebugPrintEx(
DEBUG_ERR,
TEXT("Unexpected m_pFaxDeviceConfig->ReceiveMode"));
}
if(m_pFaxServer->GetServerAPIVersion() == FAX_API_VERSION_0)
{
//
// The remote fax server is SBS/BOS 2000
// is does not support manual answering
//
::EnableWindow(::GetDlgItem(m_hWnd, IDC_RECEIVE_MANUAL_RADIO2), FALSE);
ATLASSERT(IsDlgButtonChecked(IDC_RECEIVE_MANUAL_RADIO2) != BST_CHECKED);
}
//
// TSID
//
m_TSIDBox.SetWindowText(m_pFaxDeviceConfig->lptstrTsid);
//
// Send
//
if (m_pFaxDeviceConfig->bSend)
{
CheckDlgButton(IDC_SEND_CHECK, BST_CHECKED) ;
}
else
{
CheckDlgButton(IDC_SEND_CHECK, BST_UNCHECKED) ;
::EnableWindow(GetDlgItem(IDC_DEVICE_TSID_EDIT), FALSE);
}
m_fIsDialogInitiated = TRUE;
return (1);
}
/*
- CppFaxDeviceGeneral::SetProps
-
* Purpose:
* Sets properties on apply.
*
* Arguments:
* pCtrlFocus - focus pointer (int)
*
* Return:
* OLE error code
*/
HRESULT CppFaxDeviceGeneral::SetProps(int *pCtrlFocus)
{
DEBUG_FUNCTION_NAME( _T("CppFaxDeviceGeneral::SetProps"));
HRESULT hRc = S_OK;
DWORD ec = ERROR_SUCCESS;
HINSTANCE hInst = _Module.GetResourceInstance();
CComBSTR bstrDescription = L"";
CComBSTR bstrCSID = L"";
CComBSTR bstrTSID = L"";
FAX_PORT_INFO_EX FaxDeviceConfig;
ATLASSERT(m_dwDeviceID == m_pFaxDeviceConfig->dwDeviceID);
CFaxDevicePropertyChangeNotification * pDevicePropPageNotification = NULL;
ATLASSERT(TRUE == m_fAllReadyToApply);
m_fAllReadyToApply = FALSE;
//
// Step 1: Collect all data and init the structure's fields
// uses Copy() to copy and also allocate before
//
ZeroMemory (&FaxDeviceConfig, sizeof(FAX_PORT_INFO_EX));
FaxDeviceConfig.dwSizeOfStruct = sizeof(FAX_PORT_INFO_EX);
FaxDeviceConfig.dwDeviceID = m_dwDeviceID;
FaxDeviceConfig.lpctstrDeviceName = m_pFaxDeviceConfig->lpctstrDeviceName;
FaxDeviceConfig.lpctstrProviderName = m_pFaxDeviceConfig->lpctstrProviderName;
FaxDeviceConfig.lpctstrProviderGUID = m_pFaxDeviceConfig->lpctstrProviderGUID;
//
// Description
//
if ( !m_DescriptionBox.GetWindowText(&bstrDescription))
{
*pCtrlFocus = IDC_DEVICE_DESCRIPTION_EDIT;
DebugPrintEx(
DEBUG_ERR,
TEXT("Failed to GetWindowText(&bstrDescription)"));
ec = ERROR_OUTOFMEMORY;
goto Error;
}
// We allow empty description string!
FaxDeviceConfig.lptstrDescription = bstrDescription;
//
// Receive
//
if (IsDlgButtonChecked(IDC_RECEIVE_CHECK) == BST_CHECKED)
{
if (IsDlgButtonChecked(IDC_RECEIVE_AUTO_RADIO1) == BST_CHECKED)
{
FaxDeviceConfig.ReceiveMode = FAX_DEVICE_RECEIVE_MODE_AUTO;
//
// new Rings
//
FaxDeviceConfig.dwRings = (DWORD)m_RingsSpin.GetPos();
}
else //(IDC_RECEIVE_MANUAL_RADIO2) == BST_CHECKED)
{
FaxDeviceConfig.ReceiveMode = FAX_DEVICE_RECEIVE_MODE_MANUAL;
//
// Rings and CSID stay as is
//
FaxDeviceConfig.dwRings = m_pFaxDeviceConfig->dwRings;
}
//
// new CSID
//
if ( !m_CSIDBox.GetWindowText(&bstrCSID))
{
*pCtrlFocus = IDC_DEVICE_CSID_EDIT;
DebugPrintEx(
DEBUG_ERR,
TEXT("Failed to GetWindowText(&bstrCSID)"));
ec = ERROR_OUTOFMEMORY;
goto Error;
}
//We allow empty CSID.
FaxDeviceConfig.lptstrCsid = bstrCSID;
}
else
{
FaxDeviceConfig.ReceiveMode = FAX_DEVICE_RECEIVE_MODE_OFF;
//
// Rings and CSID stay as is
//
FaxDeviceConfig.dwRings = m_pFaxDeviceConfig->dwRings;
FaxDeviceConfig.lptstrCsid = m_pFaxDeviceConfig->lptstrCsid;
}
//
// Send
//
if (IsDlgButtonChecked(IDC_SEND_CHECK) == BST_CHECKED)
{
FaxDeviceConfig.bSend = TRUE;
//
// new TSID
//
if ( !m_TSIDBox.GetWindowText(&bstrTSID))
{
*pCtrlFocus = IDC_DEVICE_TSID_EDIT;
DebugPrintEx(
DEBUG_ERR,
TEXT("Failed to GetWindowText(&bstrTSID)"));
ec = ERROR_OUTOFMEMORY;
goto Error;
}
//we allow empty TSID!
FaxDeviceConfig.lptstrTsid = bstrTSID;
}
else
{
FaxDeviceConfig.bSend = FALSE;
//
// TSID stay as is
//
FaxDeviceConfig.lptstrTsid = m_pFaxDeviceConfig->lptstrTsid;
}
//
// Step 2: Set data via RPC
//
//
// get RPC Handle
//
if (!m_pFaxServer->GetFaxServerHandle())
{
ec= GetLastError();
DebugPrintEx(
DEBUG_ERR,
_T("Failed to GetFaxServerHandle. (ec: %ld)"),
ec);
goto Error;
}
//
// Set Config
//
if (!FaxSetPortEx(
m_pFaxServer->GetFaxServerHandle(),
m_dwDeviceID,
&FaxDeviceConfig))
{
ec = GetLastError();
DebugPrintEx(
DEBUG_ERR,
_T("Fail to Set device configuration. (ec: %ld)"),
ec);
if ( FAX_ERR_DEVICE_NUM_LIMIT_EXCEEDED == ec )
{
hRc = HRESULT_FROM_WIN32(ERROR_INVALID_DATA);
DlgMsgBox(this, IDS_ERR_ADMIN_DEVICE_LIMIT, MB_OK|MB_ICONEXCLAMATION);
goto Exit;
}
if (IsNetworkError(ec))
{
DebugPrintEx(
DEBUG_ERR,
_T("Network Error was found. (ec: %ld)"),
ec);
m_pFaxServer->Disconnect();
}
goto Error;
}
DebugPrintEx( DEBUG_MSG,
_T("Succeed to set device configuration."));
//
// Step 3: Update MMC
//
//
// Prepare the notification fields before submit
//
pDevicePropPageNotification = new CFaxDevicePropertyChangeNotification();
if (!pDevicePropPageNotification)
{
ec = ERROR_NOT_ENOUGH_MEMORY;
DebugPrintEx(
DEBUG_ERR,
_T("Out of Memory - fail to operate new for CFaxDevicePropertyChangeNotification"));
goto Error;
}
pDevicePropPageNotification->dwDeviceID = m_dwDeviceID;
//
// We have decided that we'll refresh all devices on a
// manual receive enabling. If it gets FALSE, just the single device is refreshed.
//
pDevicePropPageNotification->fIsToNotifyAdditionalDevices =
( (FAX_DEVICE_RECEIVE_MODE_MANUAL == FaxDeviceConfig.ReceiveMode) ? TRUE : FALSE );
pDevicePropPageNotification->pItem = m_pGrandParentNode;
pDevicePropPageNotification->enumType = DeviceFaxPropNotification;
//
// Send notification from the property sheet thread to the main MMC thread
//
hRc = MMCPropertyChangeNotify(m_lpNotifyHandle, reinterpret_cast<LPARAM>(pDevicePropPageNotification));
if (FAILED(hRc))
{
DebugPrintEx(
DEBUG_ERR,
_T("Fail to call MMCPropertyChangeNotify. (hRc: %08X)"),
hRc);
PageError(IDS_FAIL_NOTIFY_MMCPROPCHANGE,m_hWnd);
goto Exit;
}
//
// To prevent deletion on error since it will be deleted
// by the reciever of the notification.
//
pDevicePropPageNotification = NULL;
ATLASSERT(S_OK == hRc);
goto Exit;
Error:
ATLASSERT(ERROR_SUCCESS != ec);
hRc = HRESULT_FROM_WIN32(ec);
PropSheet_SetCurSelByID( GetParent(), IDD);
ATLASSERT(::IsWindow(m_hWnd));
PageError(GetFaxServerErrorMsg(ec),m_hWnd);
Exit:
return(hRc);
}
/*
- CppFaxDeviceGeneral::PreApply
-
* Purpose:
* Checks properties before apply.
*
* Arguments:
*
* Return:
* OLE error code
*/
HRESULT CppFaxDeviceGeneral::PreApply(int *pCtrlFocus)
{
HRESULT hRc = S_OK;
//
// PreApply Checks
//
if (!AllReadyToApply(/*fSilent =*/ FALSE))
{
m_fAllReadyToApply = FALSE;
SetModified(FALSE);
hRc = E_FAIL ;
}
else
{
m_fAllReadyToApply = TRUE;
SetModified(TRUE);
}
return(hRc);
}
/*
- CppFaxDeviceGeneral::OnApply
-
* Purpose:
* Calls PreApply and SetProp to Apply changes.
*
* Arguments:
*
* Return:
* TRUE or FALSE
*/
BOOL CppFaxDeviceGeneral::OnApply()
{
DEBUG_FUNCTION_NAME( _T("CppFaxDeviceGeneral::OnApply"));
HRESULT hRc = S_OK;
int CtrlFocus = 0;
hRc = PreApply(&CtrlFocus);
if (FAILED(hRc))
{
//Error Msg by called func.
if (CtrlFocus)
{
GotoDlgCtrl(GetDlgItem(CtrlFocus));
}
return FALSE;
}
else //(Succeeded(hRc))
{
hRc = SetProps(&CtrlFocus);
if (FAILED(hRc))
{
//Error Msg by called func.
if (CtrlFocus)
{
GotoDlgCtrl(GetDlgItem(CtrlFocus));
}
return FALSE;
}
else //(Succeeded(hRc))
{
return TRUE;
}
}
}
/*
- CppFaxDeviceGeneral::OnReceiveCheckboxClicked
-
* Purpose:
* Gray/Ungray the sub controls
* Enable apply button.
*
* Arguments:
*
* Return:
* 1
*/
LRESULT CppFaxDeviceGeneral::OnReceiveCheckboxClicked(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
DEBUG_FUNCTION_NAME( _T("CppFaxDeviceGeneral::OnReceiveCheckboxClicked"));
BOOL State;
if (!m_fIsDialogInitiated) //event receieved in too early stage
{
return 0;
}
State = ( IsDlgButtonChecked(IDC_RECEIVE_CHECK) == BST_CHECKED );
EnableReceiveControls(State);
if (m_fAllReadyToApply)//only last change should be considered
{
if ( !m_RingsBox.GetWindowTextLength() )
{
m_fAllReadyToApply = FALSE;
SetModified(FALSE);
}
else
{
SetModified(TRUE);
}
}
else //m_fAllReadyToApply == FALSE
{
if (AllReadyToApply(TRUE))
{
m_fAllReadyToApply = TRUE;
SetModified(TRUE);
}
else
{
SetModified(FALSE);
}
}
return 1;
}
/*
- CppFaxDeviceGeneral::OnReceiveRadioButtonClicked
-
* Purpose:
* Check status OnReceiveRadioButtonClicked
*
* Arguments:
*
* Return:
* 1
*/
LRESULT
CppFaxDeviceGeneral::OnReceiveRadioButtonClicked(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
UNREFERENCED_PARAMETER (wNotifyCode);
UNREFERENCED_PARAMETER (wID);
UNREFERENCED_PARAMETER (hWndCtl);
UNREFERENCED_PARAMETER (bHandled);
DEBUG_FUNCTION_NAME( _T("CppFaxDeviceGeneral::OnReceiveRadioButtonClicked"));
if ( IsDlgButtonChecked(IDC_RECEIVE_AUTO_RADIO1) == BST_CHECKED )
{
EnableRingsControls(TRUE);
::SetFocus(GetDlgItem(IDC_DEVICE_RINGS_EDIT));
}
else //IDC_RECEIVE_MANUAL_RADIO2
{
EnableRingsControls(FALSE);
}
if (m_fAllReadyToApply)//only last change should be considered
{
if (
( IsDlgButtonChecked(IDC_RECEIVE_AUTO_RADIO1) == BST_CHECKED )
&&
(!m_RingsBox.GetWindowTextLength() )
)
{
m_fAllReadyToApply = FALSE;
SetModified(FALSE);
}
else
{
SetModified(TRUE);
}
}
else //m_fAllReadyToApply == FALSE
{
if (AllReadyToApply(TRUE))
{
m_fAllReadyToApply = TRUE;
SetModified(TRUE);
}
else
{
SetModified(FALSE);
}
}
return 1;
}
/*
+ CppFaxDeviceGeneral::OnSendCheckboxClicked
+
* Purpose:
* Gray/Ungray sub copntrols
* Enable apply button.
*
* Arguments:
*
* Return:
- 1
-
*/
LRESULT CppFaxDeviceGeneral::OnSendCheckboxClicked(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
DEBUG_FUNCTION_NAME( _T("CppFaxDeviceGeneral::OnSendCheckboxClicked"));
BOOL State;
if (!m_fIsDialogInitiated) //event receieved in too early stage
{
return 0;
}
State = ( IsDlgButtonChecked(IDC_SEND_CHECK) == BST_CHECKED );
::EnableWindow(GetDlgItem(IDC_DEVICE_TSID_EDIT), State);
::EnableWindow(GetDlgItem(IDC_TSID_STATIC), State);
if (AllReadyToApply(TRUE))
{
m_fAllReadyToApply = TRUE;
SetModified(TRUE);
}
else
{
m_fAllReadyToApply = FALSE;
SetModified(FALSE);
}
//this is due to the fact that we allow empty CSID
return 1;
}
/*
- CppFaxDeviceGeneral::DeviceTextChanged
-
* Purpose:
* set Apply buttom modified.
*
* Arguments:
*
* Return:
* 1
*/
LRESULT CppFaxDeviceGeneral::DeviceTextChanged(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
if (AllReadyToApply(TRUE))
{
m_fAllReadyToApply = TRUE;
SetModified(TRUE);
}
else
{
m_fAllReadyToApply = FALSE;
SetModified(FALSE);
}
return(1);
}
/*
+ CppFaxDeviceGeneral::AllReadyToApply
+
* Purpose:
* This function validate that no zero length strings
* are found data areas that should be saved.
*
* Arguments:
* [in] fSilent - boolean who defines if to pop up messages (FALSE)
* or not.(TRUE)
*
* Return:
- BOOOLEAN
-
*/
BOOL CppFaxDeviceGeneral::AllReadyToApply(BOOL fSilent)
{
DEBUG_FUNCTION_NAME( _T("CppFaxDeviceGeneral::AllReadyToApply"));
DWORD ec = ERROR_SUCCESS;
HINSTANCE hInst = _Module.GetResourceInstance();
if (
(IsDlgButtonChecked(IDC_RECEIVE_CHECK) == BST_CHECKED)
&&
(IsDlgButtonChecked(IDC_RECEIVE_AUTO_RADIO1) == BST_CHECKED)
)
{
if ( !m_RingsBox.GetWindowTextLength() )
{
ec = GetLastError();
DebugPrintEx(
DEBUG_ERR,
_T("Zero text length - m_RingsBox. (ec: %ld)"),
ec);
if (!fSilent)
{
PageError(IDS_DEVICE_RINGS_EMPTY, m_hWnd, hInst);
::SetFocus(GetDlgItem(IDC_DEVICE_RINGS_EDIT));
}
return FALSE;
}
}
//we allow empty tsid
//we allow empty csid
//we allow empty description
ATLASSERT(ERROR_SUCCESS == ec);
//
// Cheers!
// ...every thing ready to apply now.
//
return TRUE;
}
/*
- CppFaxDeviceGeneral::EnableRingsControls
-
* Purpose:
* Enable/disable the Rings controls.
*
* Arguments:
* [in] state - boolean value to enable TRUE or FALSE to disable
*
* Return:
* void
*/
void CppFaxDeviceGeneral::EnableRingsControls(BOOL fState)
{
//
// enable/disable controls
//
::EnableWindow(GetDlgItem(IDC_DEVICE_RINGS_EDIT), fState);
::EnableWindow(GetDlgItem(IDC_DEVICE_RINGS_SPIN), fState);
::EnableWindow(GetDlgItem(IDC_DEVICE_RINGS_STATIC), fState);
}
/*
- CppFaxDeviceGeneral::EnableReceiveControls
-
* Purpose:
* Enable/disable the Rings controls.
*
* Arguments:
* [in] state - boolean value to enable TRUE or FALSE to disable
*
* Return:
* void
*/
void CppFaxDeviceGeneral::EnableReceiveControls(BOOL fState)
{
//
// enable/disable controls
//
if(m_pFaxServer->GetServerAPIVersion() == CURRENT_FAX_API_VERSION)
{
::EnableWindow(GetDlgItem(IDC_RECEIVE_MANUAL_RADIO2), fState);
}
::EnableWindow(GetDlgItem(IDC_RECEIVE_AUTO_RADIO1), fState);
::EnableWindow(GetDlgItem(IDC_DEVICE_CSID_EDIT), fState);
::EnableWindow(GetDlgItem(IDC_CSID_STATIC), fState);
//
// Combined state
//
fState = fState && (IsDlgButtonChecked(IDC_RECEIVE_AUTO_RADIO1) == BST_CHECKED);
EnableRingsControls(fState);
}
//////////////////////////////////////////////////////////////////////////////
/*++
CppFaxDeviceGeneral::OnHelpRequest
This is called in response to the WM_HELP Notify
message and to the WM_CONTEXTMENU Notify message.
WM_HELP Notify message.
This message is sent when the user presses F1 or <Shift>-F1
over an item or when the user clicks on the ? icon and then
presses the mouse over an item.
WM_CONTEXTMENU Notify message.
This message is sent when the user right clicks over an item
and then clicks "What's this?"
--*/
/////////////////////////////////////////////////////////////////////////////
LRESULT
CppFaxDeviceGeneral::OnHelpRequest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/)
{
DEBUG_FUNCTION_NAME(_T("CppFaxDeviceGeneral::OnHelpRequest"));
switch (uMsg)
{
case WM_HELP:
WinContextHelp(((LPHELPINFO)lParam)->dwContextId, m_hWnd);
break;
case WM_CONTEXTMENU:
WinContextHelp(::GetWindowContextHelpId((HWND)wParam), m_hWnd);
break;
}
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////