CPROP.H

//==========================================================================; 
//
// 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) 1992 - 1997 Microsoft Corporation. All Rights Reserved.
//
//--------------------------------------------------------------------------;

#ifndef __CPROP__
#define __CPROP__

// Base property page class. Filters typically expose custom properties by
// implementing special control interfaces, examples are IDirectDrawVideo
// and IQualProp on renderers. This allows property pages to be built that
// use the given interface. Applications such as the ActiveMovie OCX query
// filters for the property pages they support and expose them to the user
//
// This class provides all the framework for a property page. A property
// page is a COM object that supports IPropertyPage. We should be created
// with a resource ID for the dialog which we will load when required. We
// should also be given in the constructor a resource ID for a title string
// we will load from the DLLs STRINGTABLE. The property page titles must be
// stored in resource files so that they can be easily internationalised
//
// We have a number of virtual methods (not PURE) that may be overriden in
// derived classes to query for interfaces and so on. These functions have
// simple implementations here that just return NOERROR. Derived classes
// will almost definately have to override the message handler method called
// OnReceiveMessage. We have a static dialog procedure that calls the method
// so that derived classes don't have to fiddle around with the this pointer

class AM_NOVTABLE CBasePropertyPage : public IPropertyPage, public CUnknown
{
protected:

LPPROPERTYPAGESITE m_pPageSite; // Details for our property site
HWND m_hwnd; // Window handle for the page
HWND m_Dlg; // Actual dialog window handle
BOOL m_bDirty; // Has anything been changed
int m_TitleId; // Resource identifier for title
int m_DialogId; // Dialog resource identifier

static BOOL CALLBACK DialogProc(HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam);

private:
BOOL m_bObjectSet ; // SetObject has been called or not.
public:

CBasePropertyPage(TCHAR *pName, // Debug only name
LPUNKNOWN pUnk, // COM Delegator
int DialogId, // Resource ID
int TitleId); // To get tital

virtual ~CBasePropertyPage() { };
DECLARE_IUNKNOWN

// Override these virtual methods

virtual HRESULT OnConnect(IUnknown *pUnknown) { return NOERROR; };
virtual HRESULT OnDisconnect() { return NOERROR; };
virtual HRESULT OnActivate() { return NOERROR; };
virtual HRESULT OnDeactivate() { return NOERROR; };
virtual HRESULT OnApplyChanges() { return NOERROR; };
virtual BOOL OnReceiveMessage(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);

// These implement an IPropertyPage interface

STDMETHODIMP NonDelegatingQueryInterface(REFIID riid,void **ppv);
STDMETHODIMP_(ULONG) NonDelegatingRelease();
STDMETHODIMP_(ULONG) NonDelegatingAddRef();
STDMETHODIMP SetPageSite(LPPROPERTYPAGESITE pPageSite);
STDMETHODIMP Activate(HWND hwndParent,LPCRECT prect,BOOL fModal);
STDMETHODIMP Deactivate(void);
STDMETHODIMP GetPageInfo(LPPROPPAGEINFO pPageInfo);
STDMETHODIMP SetObjects(ULONG cObjects, LPUNKNOWN *ppUnk);
STDMETHODIMP Show(UINT nCmdShow);
STDMETHODIMP Move(LPCRECT prect);
STDMETHODIMP IsPageDirty(void) { return m_bDirty ? S_OK : S_FALSE; }
STDMETHODIMP Apply(void);
STDMETHODIMP Help(LPCWSTR lpszHelpDir) { return E_NOTIMPL; }
STDMETHODIMP TranslateAccelerator(LPMSG lpMsg) { return E_NOTIMPL; }
};

#endif // __CPROP__