//------------------------------------------------------------------------------ // File: CProp.h // // Desc: DirectShow base classes. // // Copyright (c) 1992-2001 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 INT_PTR CALLBACK DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); private: BOOL m_bObjectSet ; // SetObject has been called or not. public: CBasePropertyPage(__in_opt LPCTSTR pName, // Debug only name __inout_opt LPUNKNOWN pUnk, // COM Delegator int DialogId, // Resource ID int TitleId); // To get tital #ifdef UNICODE CBasePropertyPage(__in_opt LPCSTR pName, __inout_opt LPUNKNOWN pUnk, int DialogId, int TitleId); #endif 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 INT_PTR OnReceiveMessage(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam); // These implement an IPropertyPage interface STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, __deref_out void **ppv); STDMETHODIMP_(ULONG) NonDelegatingRelease(); STDMETHODIMP_(ULONG) NonDelegatingAddRef(); STDMETHODIMP SetPageSite(__in_opt LPPROPERTYPAGESITE pPageSite); STDMETHODIMP Activate(HWND hwndParent, LPCRECT prect,BOOL fModal); STDMETHODIMP Deactivate(void); STDMETHODIMP GetPageInfo(__out LPPROPPAGEINFO pPageInfo); STDMETHODIMP SetObjects(ULONG cObjects, __in_ecount_opt(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(__inout LPMSG lpMsg) { return E_NOTIMPL; } }; #endif // __CPROP__