windows-nt/Source/XPSP1/NT/net/ias/mmc/nap/iasipattributeeditor.cpp
2020-09-26 16:20:57 +08:00

231 lines
4.6 KiB
C++

//////////////////////////////////////////////////////////////////////////////
/*++
Copyright (C) Microsoft Corporation, 1998 - 1999
Module Name:
IASIPAttributeEditor.cpp
Abstract:
Implementation file for the CIASIPAttributeEditor class.
Revision History:
mmaguire 06/25/98 - created
--*/
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// BEGIN INCLUDES
//
// standard includes:
//
#include "Precompiled.h"
//
// where we can find declaration for main class in this file:
//
#include "IASIPAttributeEditor.h"
#include "IASIPEditorPage.h"
//
// where we can find declarations needed in this file:
//
//
// END INCLUDES
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
/*++
CIASIPAttributeEditor::ShowEditor
IIASAttributeEditor interface implementation
--*/
//////////////////////////////////////////////////////////////////////////////
STDMETHODIMP CIASIPAttributeEditor::ShowEditor( /*[in, out]*/ BSTR *pReserved )
{
TRACE(_T("CIASIPAttributeEditor::ShowEditor\n"));
AFX_MANAGE_STATE(AfxGetStaticModuleState())
HRESULT hr = S_OK;
try
{
// Load page title.
// ::CString strPageTitle;
// strPageTitle.LoadString(IDS_IAS_IP_EDITOR_TITLE);
//
// CPropertySheet propSheet( (LPCTSTR)strPageTitle );
//
// IP Address Editor
//
IPEditorPage cppPage;
// Initialize the page's data exchange fields with info from IAttributeInfo
CComBSTR bstrName;
CComBSTR bstrSyntax;
ATTRIBUTEID Id = ATTRIBUTE_UNDEFINED;
if( m_spIASAttributeInfo )
{
hr = m_spIASAttributeInfo->get_AttributeName( &bstrName );
if( FAILED(hr) ) throw hr;
m_spIASAttributeInfo->get_SyntaxString( &bstrSyntax );
if( FAILED(hr) ) throw hr;
m_spIASAttributeInfo->get_AttributeID( &Id );
if( FAILED(hr) ) throw hr;
}
cppPage.m_strAttrName = bstrName;
cppPage.m_strAttrFormat = bstrSyntax;
// Attribute type is actually attribute ID in string format
WCHAR szTempId[MAX_PATH];
wsprintf(szTempId, _T("%ld"), Id);
cppPage.m_strAttrType = szTempId;
// Initialize the page's data exchange fields with info from VARIANT value passed in.
if ( V_VT(m_pvarValue) != VT_EMPTY )
{
_ASSERTE( V_VT(m_pvarValue) == VT_I4 );
cppPage.m_dwIpAddr = V_I4(m_pvarValue);
cppPage.m_fIpAddrPreSet = TRUE;
}
// propSheet.AddPage(&cppPage);
// int iResult = propSheet.DoModal();
int iResult = cppPage.DoModal();
if (IDOK == iResult)
{
// Initialize the variant that was passed in.
VariantClear(m_pvarValue);
// Save the value that the user edited to the variant.
V_VT(m_pvarValue) = VT_I4;
V_I4(m_pvarValue) = cppPage.m_dwIpAddr;
}
else
{
hr = S_FALSE;
}
//
// delete the property page pointer
//
// propSheet.RemovePage(&cppPage);
}
catch( HRESULT & hr )
{
return hr;
}
catch(...)
{
return hr = E_FAIL;
}
return hr;
}
//////////////////////////////////////////////////////////////////////////////
/*++
CIASIPAttributeEditor::SetAttributeValue
IIASAttributeEditor interface implementation
--*/
//////////////////////////////////////////////////////////////////////////////
STDMETHODIMP CIASIPAttributeEditor::SetAttributeValue(VARIANT * pValue)
{
TRACE(_T("CIASIPAttributeEditor::SetAttributeValue\n"));
AFX_MANAGE_STATE(AfxGetStaticModuleState())
// Check for preconditions.
if( ! pValue )
{
return E_INVALIDARG;
}
if( V_VT(pValue) != VT_I4 && V_VT(pValue) != VT_EMPTY )
{
return E_INVALIDARG;
}
m_pvarValue = pValue;
return S_OK;
}
//////////////////////////////////////////////////////////////////////////////
/*++
CIASIPAttributeEditor::get_ValueAsString
IIASAttributeEditor interface implementation
--*/
//////////////////////////////////////////////////////////////////////////////
STDMETHODIMP CIASIPAttributeEditor::get_ValueAsString(BSTR * pbstrDisplayText )
{
TRACE(_T("CIASIPAttributeEditor::get_ValueAsString\n"));
AFX_MANAGE_STATE(AfxGetStaticModuleState())
// Check for preconditions.
if( ! pbstrDisplayText )
{
return E_INVALIDARG;
}
CComBSTR bstrDisplay;
// This if falls through so get a blank string for any other types.
if( V_VT(m_pvarValue) == VT_I4 )
{
DWORD dwAddress = V_I4(m_pvarValue);
WORD hi = HIWORD(dwAddress);
WORD lo = LOWORD(dwAddress);
WCHAR szTemp[255];
wsprintf( szTemp, _T("%-d.%-d.%-d.%d"), HIBYTE(hi), LOBYTE(hi), HIBYTE(lo), LOBYTE(lo));
bstrDisplay = szTemp;
}
*pbstrDisplayText = bstrDisplay.Copy();
return S_OK;
}