| //------------------------------------------------------------------------------ | |
| // 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__ | |