96 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			96 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | //------------------------------------------------------------------------------
 | ||
|  | // 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__
 | ||
|  | 
 |