//+------------------------------------------------------------------------- // // THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF // ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A // PARTICULAR PURPOSE. // // Copyright (c) 1998-1999 Microsoft Corporation. All Rights Reserved. // // File: smpfilt.hxx // // Contents: Sample filter declarations // // Platform: Windows 2000 // //-------------------------------------------------------------------------- #pragma once //+------------------------------------------------------------------------- // // Global definitions // //-------------------------------------------------------------------------- const ULONG TEXT_FILTER_CHUNK_SIZE = 10000L; // size of character buffers long g_lInstances = 0; // Global count of CSmpFilt and CSmpFiltCF instances GUID const guidStorage = PSGUID_STORAGE; // GUID for storage property set //C------------------------------------------------------------------------- // // Class: CSmpFilter // // Purpose: Implements interfaces of sample filter // //-------------------------------------------------------------------------- // SmpFilter Class ID // {8B0E5E70-3C30-11d1-8C0D-00AA00C26CD4} GUID const CLSID_CSmpFilter = { 0x8b0e5e70, 0x3c30, 0x11d1, { 0x8c, 0xd, 0x0, 0xaa, 0x0, 0xc2, 0x6c, 0xd4 } }; class CSmpFilter : public IFilter, public IPersistFile { public: // // From IUnknown // virtual SCODE STDMETHODCALLTYPE QueryInterface( REFIID riid, void ** ppvObject ); virtual ULONG STDMETHODCALLTYPE AddRef(); virtual ULONG STDMETHODCALLTYPE Release(); // // From IFilter // virtual SCODE STDMETHODCALLTYPE Init( ULONG grfFlags, ULONG cAttributes, FULLPROPSPEC const * aAttributes, ULONG * pFlags ); virtual SCODE STDMETHODCALLTYPE GetChunk( STAT_CHUNK * pStat ); virtual SCODE STDMETHODCALLTYPE GetText( ULONG * pcwcBuffer, WCHAR * awcBuffer ); virtual SCODE STDMETHODCALLTYPE GetValue( PROPVARIANT ** ppPropValue ); virtual SCODE STDMETHODCALLTYPE BindRegion( FILTERREGION origPos, REFIID riid, void ** ppunk ); // // From IPersistFile // virtual SCODE STDMETHODCALLTYPE GetClassID( CLSID * pClassID ); virtual SCODE STDMETHODCALLTYPE IsDirty(); virtual SCODE STDMETHODCALLTYPE Load( LPCWSTR pszFileName, DWORD dwMode ); virtual SCODE STDMETHODCALLTYPE Save( LPCWSTR pszFileName, BOOL fRemember ); virtual SCODE STDMETHODCALLTYPE SaveCompleted( LPCWSTR pszFileName ); virtual SCODE STDMETHODCALLTYPE GetCurFile( LPWSTR * ppszFileName ); private: friend class CSmpFilterCF; CSmpFilter(); ~CSmpFilter(); HANDLE m_hFile; // Handle to the input file long m_lRefs; // Reference count WCHAR * m_pwszFileName; // Name of input file to filter ULONG m_ulBufferLen; // Characters read from file to buffer ULONG m_ulCharsRead; // Characters read from chunk buffer ULONG m_ulChunkID; // Current chunk id ULONG m_ulCodePage; // Current default codepage BOOL m_fContents; // TRUE if contents requested BOOL m_fEof; // TRUE if end of file reached WCHAR m_wcsBuffer[TEXT_FILTER_CHUNK_SIZE]; // Buffer for UNICODE }; //C------------------------------------------------------------------------- // // Class: CSmpFilterCF // // Purpose: Implements class factory for sample filter // //-------------------------------------------------------------------------- class CSmpFilterCF : public IClassFactory { public: // // From IUnknown // virtual SCODE STDMETHODCALLTYPE QueryInterface( REFIID riid, void ** ppvObject ); virtual ULONG STDMETHODCALLTYPE AddRef(); virtual ULONG STDMETHODCALLTYPE Release(); // // From IClassFactory // virtual SCODE STDMETHODCALLTYPE CreateInstance( IUnknown * pUnkOuter, REFIID riid, void ** ppvObject ); virtual SCODE STDMETHODCALLTYPE LockServer( BOOL fLock ); private: friend SCODE STDMETHODCALLTYPE DllGetClassObject( REFCLSID cid, REFIID iid, void ** ppvObj ); CSmpFilterCF(); ~CSmpFilterCF(); long m_lRefs; // Reference count };