152 lines
3.1 KiB
C++
152 lines
3.1 KiB
C++
|
/*++
|
||
|
|
||
|
Copyright (C) 1993-1999 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
iperpbag.cpp
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Implementation of the IPersistPropertyBag interface exposed on the
|
||
|
Polyline object.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#include "polyline.h"
|
||
|
#include "unkhlpr.h"
|
||
|
|
||
|
/*
|
||
|
* CImpIPersistPropertyBag interface implementation
|
||
|
*/
|
||
|
|
||
|
IMPLEMENT_CONTAINED_INTERFACE(CPolyline, CImpIPersistPropertyBag)
|
||
|
|
||
|
/*
|
||
|
* CImpIPersistPropertyBag::GetClassID
|
||
|
*
|
||
|
* Purpose:
|
||
|
* Returns the CLSID of the object represented by this interface.
|
||
|
*
|
||
|
* Parameters:
|
||
|
* pClsID LPCLSID in which to store our CLSID.
|
||
|
*/
|
||
|
|
||
|
STDMETHODIMP
|
||
|
CImpIPersistPropertyBag::GetClassID(
|
||
|
OUT LPCLSID pClsID
|
||
|
)
|
||
|
{
|
||
|
HRESULT hr = S_OK;
|
||
|
|
||
|
if (pClsID == NULL) {
|
||
|
return E_POINTER;
|
||
|
}
|
||
|
|
||
|
try {
|
||
|
*pClsID = m_pObj->m_clsID;
|
||
|
} catch (...) {
|
||
|
hr = E_POINTER;
|
||
|
}
|
||
|
|
||
|
return hr;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* CImpIPersistPropertyBag::InitNew
|
||
|
*
|
||
|
* Purpose:
|
||
|
* Informs the object that it is being created new instead of
|
||
|
* loaded from a persistent state. This will be called in lieu
|
||
|
* of IPersistStreamInit::Load.
|
||
|
*
|
||
|
* Parameters:
|
||
|
* None
|
||
|
*/
|
||
|
|
||
|
STDMETHODIMP
|
||
|
CImpIPersistPropertyBag::InitNew(void)
|
||
|
{
|
||
|
//Nothing for us to do
|
||
|
return NOERROR;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* CImpIPersistPropertyBag::Load
|
||
|
*
|
||
|
* Purpose:
|
||
|
* Instructs the object to load itself from a previously saved
|
||
|
* IPropertyBag that was handled by Save in another object lifetime.
|
||
|
* This function should not hold on to pIPropertyBag.
|
||
|
*
|
||
|
* This function is called in lieu of IPersistStreamInit::InitNew
|
||
|
* when the object already has a persistent state.
|
||
|
*
|
||
|
* Parameters:
|
||
|
* pIPropBag IPropertyBag* from which to load our data.
|
||
|
* pIError IErrorLog* for storing errors. NULL if caller not interested in errors.
|
||
|
*/
|
||
|
|
||
|
STDMETHODIMP CImpIPersistPropertyBag::Load (
|
||
|
IPropertyBag* pIPropBag,
|
||
|
IErrorLog* pIError
|
||
|
)
|
||
|
{
|
||
|
HRESULT hr = S_OK;
|
||
|
|
||
|
if (NULL == pIPropBag) {
|
||
|
return (E_POINTER);
|
||
|
}
|
||
|
|
||
|
try {
|
||
|
//Read all the data into the control structure.
|
||
|
hr = m_pObj->m_pCtrl->LoadFromPropertyBag ( pIPropBag, pIError );
|
||
|
} catch (...) {
|
||
|
hr = E_POINTER;
|
||
|
}
|
||
|
|
||
|
return hr;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* CImpIPersistPropertyBag::Save
|
||
|
*
|
||
|
* Purpose:
|
||
|
* Saves the data for this object to an IPropertyBag.
|
||
|
*
|
||
|
* Parameters:
|
||
|
* pIPropBag IPropertyBag* in which to save our data.
|
||
|
* fClearDirty BOOL indicating if this call should clear
|
||
|
* the object's dirty flag (TRUE) or leave it
|
||
|
* unchanged (FALSE).
|
||
|
* fSaveAllProps BOOL indicating if this call should save all properties.
|
||
|
*/
|
||
|
|
||
|
STDMETHODIMP
|
||
|
CImpIPersistPropertyBag::Save (
|
||
|
IN IPropertyBag* pIPropBag,
|
||
|
IN BOOL fClearDirty,
|
||
|
IN BOOL fSaveAllProps
|
||
|
)
|
||
|
{
|
||
|
HRESULT hr = S_OK;
|
||
|
|
||
|
if (NULL == pIPropBag) {
|
||
|
return (E_POINTER);
|
||
|
}
|
||
|
|
||
|
try {
|
||
|
hr = m_pObj->m_pCtrl->SaveToPropertyBag ( pIPropBag, fSaveAllProps );
|
||
|
} catch (...) {
|
||
|
hr = E_POINTER;
|
||
|
}
|
||
|
|
||
|
if (SUCCEEDED(hr)) {
|
||
|
if (fClearDirty) {
|
||
|
m_pObj->m_fDirty=FALSE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return hr;
|
||
|
}
|