201 lines
5.5 KiB
C++
201 lines
5.5 KiB
C++
// propset.h : interface of the CProperty, CPropertySection, and CPropertSet classes
|
|
//
|
|
// This file is a part of the XTREME TOOLKIT PRO MFC class library.
|
|
// (c)1998-2008 Codejock Software, All Rights Reserved.
|
|
//
|
|
// THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
|
|
// RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
|
|
// CONSENT OF CODEJOCK SOFTWARE.
|
|
//
|
|
// THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
|
|
// IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
|
|
// YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
|
|
// SINGLE COMPUTER.
|
|
//
|
|
// CONTACT INFORMATION:
|
|
// support@codejock.com
|
|
// http://www.codejock.com
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
// Property setting
|
|
|
|
typedef struct tagSECTIONHEADER
|
|
{
|
|
DWORD cbSection ;
|
|
DWORD cProperties ; // Number of props.
|
|
} SECTIONHEADER, *LPSECTIONHEADER ;
|
|
|
|
typedef struct tagPROPERTYIDOFFSET
|
|
{
|
|
DWORD propertyID;
|
|
DWORD dwOffset;
|
|
} PROPERTYIDOFFSET, *LPPROPERTYIDOFFSET;
|
|
|
|
typedef struct tagPROPHEADER
|
|
{
|
|
WORD wByteOrder ; // Always 0xFFFE
|
|
WORD wFormat ; // Always 0
|
|
DWORD dwOSVer ; // System version
|
|
CLSID clsID ; // Application CLSID
|
|
DWORD cSections ; // Number of sections (must be at least 1)
|
|
} PROPHEADER, *LPPROPHEADER ;
|
|
|
|
typedef struct tagFORMATIDOFFSET
|
|
{
|
|
GUID formatID;
|
|
DWORD dwOffset;
|
|
} FORMATIDOFFSET, *LPFORMATIDOFFSET;
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CProperty
|
|
|
|
class CProperty : public CObject
|
|
{
|
|
friend class CPropertySet ;
|
|
friend class CPropertySection ;
|
|
|
|
public:
|
|
// Construction
|
|
CProperty( void ) ;
|
|
CProperty( DWORD dwID, const LPVOID pValue, DWORD dwType ) ;
|
|
|
|
// Attributes
|
|
BOOL Set( DWORD dwID, const LPVOID pValue, DWORD dwType ) ;
|
|
BOOL Set( const LPVOID pValue, DWORD dwType ) ;
|
|
BOOL Set( const LPVOID pValue ) ;
|
|
LPVOID Get( DWORD* pcb ) ; // Returns pointer to actual value
|
|
LPVOID Get( void ) ; // Returns pointer to actual value
|
|
DWORD GetType( void ) ; // Returns property type
|
|
void SetType( DWORD dwType ) ;
|
|
DWORD GetID( void ) ;
|
|
void SetID( DWORD dwPropID ) ;
|
|
|
|
LPVOID GetRawValue( void ) ; // Returns pointer internal value (may
|
|
// include size information)
|
|
// Operations
|
|
BOOL WriteToStream( IStream* pIStream ) ;
|
|
BOOL ReadFromStream( IStream* pIStream ) ;
|
|
|
|
private:
|
|
DWORD m_dwPropID ;
|
|
DWORD m_dwType ;
|
|
LPVOID m_pValue ;
|
|
|
|
LPVOID AllocValue(ULONG cb);
|
|
void FreeValue();
|
|
|
|
public:
|
|
~CProperty() ;
|
|
} ;
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CPropertySection
|
|
|
|
class CPropertySection : public CObject
|
|
{
|
|
friend class CPropertySet ;
|
|
friend class CProperty ;
|
|
|
|
public:
|
|
// Construction
|
|
CPropertySection( void ) ;
|
|
CPropertySection( CLSID FormatID ) ;
|
|
|
|
// Attributes
|
|
CLSID GetFormatID( void ) ;
|
|
void SetFormatID( CLSID FormatID ) ;
|
|
|
|
BOOL Set( DWORD dwPropID, LPVOID pValue, DWORD dwType ) ;
|
|
BOOL Set( DWORD dwPropID, LPVOID pValue ) ;
|
|
LPVOID Get( DWORD dwPropID, DWORD* pcb ) ;
|
|
LPVOID Get( DWORD dwPropID ) ;
|
|
void Remove( DWORD dwPropID ) ;
|
|
void RemoveAll() ;
|
|
|
|
CProperty* GetProperty( DWORD dwPropID ) ;
|
|
void AddProperty( CProperty* pProp ) ;
|
|
|
|
DWORD GetSize( void ) ;
|
|
DWORD GetCount( void ) ;
|
|
CObList* GetList( void ) ;
|
|
|
|
BOOL GetID( LPCTSTR pszName, DWORD* pdwPropID ) ;
|
|
BOOL SetName( DWORD dwPropID, LPCTSTR pszName ) ;
|
|
|
|
BOOL SetSectionName( LPCTSTR pszName );
|
|
LPCTSTR GetSectionName( void );
|
|
|
|
// Operations
|
|
BOOL WriteToStream( IStream* pIStream ) ;
|
|
BOOL ReadFromStream( IStream* pIStream, LARGE_INTEGER liPropSet ) ;
|
|
BOOL WriteNameDictToStream( IStream* pIStream ) ;
|
|
BOOL ReadNameDictFromStream( IStream* pIStream ) ;
|
|
|
|
private:
|
|
// Implementation
|
|
CLSID m_FormatID ;
|
|
SECTIONHEADER m_SH ;
|
|
// List of properties (CProperty)
|
|
CObList m_PropList ;
|
|
// Dictionary of property names
|
|
CMapStringToPtr m_NameDict ;
|
|
CString m_strSectionName;
|
|
|
|
public:
|
|
~CPropertySection();
|
|
} ;
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CPropertySet
|
|
|
|
class CPropertySet : public CObject
|
|
{
|
|
friend class CPropertySection ;
|
|
friend class CProperty ;
|
|
|
|
public:
|
|
// Construction
|
|
CPropertySet( void ) ;
|
|
CPropertySet( CLSID clsID ) ;
|
|
|
|
// Attributes
|
|
BOOL Set( CLSID FormatID, DWORD dwPropID, LPVOID pValue, DWORD dwType ) ;
|
|
BOOL Set( CLSID FormatID, DWORD dwPropID, LPVOID pValue ) ;
|
|
LPVOID Get( CLSID FormatID, DWORD dwPropID, DWORD* pcb ) ;
|
|
LPVOID Get( CLSID FormatID, DWORD dwPropID ) ;
|
|
void Remove( CLSID FormatID, DWORD dwPropID ) ;
|
|
void Remove( CLSID FormatID ) ;
|
|
void RemoveAll( ) ;
|
|
|
|
CProperty* GetProperty( CLSID FormatID, DWORD dwPropID ) ;
|
|
void AddProperty( CLSID FormatID, CProperty* pProp ) ;
|
|
CPropertySection* GetSection( CLSID FormatID ) ;
|
|
CPropertySection* AddSection( CLSID FormatID ) ;
|
|
void AddSection( CPropertySection* psect ) ;
|
|
|
|
WORD GetByteOrder( void ) ;
|
|
WORD GetFormatVersion( void ) ;
|
|
void SetFormatVersion( WORD wFmtVersion ) ;
|
|
DWORD GetOSVersion( void ) ;
|
|
void SetOSVersion( DWORD dwOSVer ) ;
|
|
CLSID GetClassID( void ) ;
|
|
void SetClassID( CLSID clsid ) ;
|
|
DWORD GetCount( void ) ;
|
|
CObList* GetList( void ) ;
|
|
|
|
// Operations
|
|
BOOL WriteToStream( IStream* pIStream ) ;
|
|
BOOL ReadFromStream( IStream* pIStream ) ;
|
|
|
|
// Implementation
|
|
private:
|
|
PROPHEADER m_PH ;
|
|
CObList m_SectionList ;
|
|
|
|
public:
|
|
~CPropertySet();
|
|
} ;
|