169 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			169 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | //------------------------------------------------------------------------------
 | ||
|  | // File: VideoCtl.h
 | ||
|  | //
 | ||
|  | // Desc: DirectShow base classes.
 | ||
|  | //
 | ||
|  | // Copyright (c) 1992-2001 Microsoft Corporation.  All rights reserved.
 | ||
|  | //------------------------------------------------------------------------------
 | ||
|  | 
 | ||
|  | 
 | ||
|  | #ifndef __VIDEOCTL__
 | ||
|  | #define __VIDEOCTL__
 | ||
|  | 
 | ||
|  | // These help with property page implementations. The first can be used to
 | ||
|  | // load any string from a resource file. The buffer to load into is passed
 | ||
|  | // as an input parameter. The same buffer is the return value if the string
 | ||
|  | // was found otherwise it returns TEXT(""). The GetDialogSize is passed the
 | ||
|  | // resource ID of a dialog box and returns the size of it in screen pixels
 | ||
|  | 
 | ||
|  | #define STR_MAX_LENGTH 256
 | ||
|  | LPCTSTR WINAPI StringFromResource(__out_ecount(STR_MAX_LENGTH) LPTSTR pBuffer, int iResourceID); | ||
|  | 
 | ||
|  | #ifdef UNICODE
 | ||
|  | #define WideStringFromResource StringFromResource
 | ||
|  | LPCSTR WINAPI StringFromResource(__out_ecount(STR_MAX_LENGTH) LPSTR pBuffer, int iResourceID); | ||
|  | #else
 | ||
|  | LPWSTR WINAPI WideStringFromResource(__out_ecount(STR_MAX_LENGTH) LPWSTR pBuffer, int iResourceID); | ||
|  | #endif
 | ||
|  | 
 | ||
|  | 
 | ||
|  | BOOL WINAPI GetDialogSize(int iResourceID,     // Dialog box resource identifier
 | ||
|  |                           DLGPROC pDlgProc,    // Pointer to dialog procedure
 | ||
|  |                           LPARAM lParam,       // Any user data wanted in pDlgProc
 | ||
|  |                           __out SIZE *pResult);// Returns the size of dialog box
 | ||
|  | 
 | ||
|  | // Class that aggregates an IDirectDraw interface
 | ||
|  | 
 | ||
|  | class CAggDirectDraw : public IDirectDraw, public CUnknown | ||
|  | { | ||
|  | protected: | ||
|  | 
 | ||
|  |     LPDIRECTDRAW m_pDirectDraw; | ||
|  | 
 | ||
|  | public: | ||
|  | 
 | ||
|  |     DECLARE_IUNKNOWN | ||
|  |     STDMETHODIMP NonDelegatingQueryInterface(REFIID riid,__deref_out void **ppv); | ||
|  | 
 | ||
|  |     // Constructor and destructor
 | ||
|  | 
 | ||
|  |     CAggDirectDraw(__in_opt LPCTSTR pName,__inout_opt LPUNKNOWN pUnk) : | ||
|  |         CUnknown(pName,pUnk), | ||
|  |         m_pDirectDraw(NULL) { }; | ||
|  | 
 | ||
|  |     virtual ~CAggDirectDraw() { }; | ||
|  | 
 | ||
|  |     // Set the object we should be aggregating
 | ||
|  |     void SetDirectDraw(__inout LPDIRECTDRAW pDirectDraw) { | ||
|  |         m_pDirectDraw = pDirectDraw; | ||
|  |     } | ||
|  | 
 | ||
|  |     // IDirectDraw methods
 | ||
|  | 
 | ||
|  |     STDMETHODIMP Compact(); | ||
|  |     STDMETHODIMP CreateClipper(DWORD dwFlags,__deref_out LPDIRECTDRAWCLIPPER *lplpDDClipper,__inout_opt IUnknown *pUnkOuter); | ||
|  |     STDMETHODIMP CreatePalette(DWORD dwFlags,__in LPPALETTEENTRY lpColorTable,__deref_out LPDIRECTDRAWPALETTE *lplpDDPalette,__inout_opt IUnknown *pUnkOuter); | ||
|  |     STDMETHODIMP CreateSurface(__in LPDDSURFACEDESC lpDDSurfaceDesc,__deref_out LPDIRECTDRAWSURFACE *lplpDDSurface,__inout_opt IUnknown *pUnkOuter); | ||
|  |     STDMETHODIMP DuplicateSurface(__in LPDIRECTDRAWSURFACE lpDDSurface,__deref_out LPDIRECTDRAWSURFACE *lplpDupDDSurface); | ||
|  |     STDMETHODIMP EnumDisplayModes(DWORD dwSurfaceDescCount,__in LPDDSURFACEDESC lplpDDSurfaceDescList,__in LPVOID lpContext,__in LPDDENUMMODESCALLBACK lpEnumCallback); | ||
|  |     STDMETHODIMP EnumSurfaces(DWORD dwFlags,__in LPDDSURFACEDESC lpDDSD,__in LPVOID lpContext,__in LPDDENUMSURFACESCALLBACK lpEnumCallback); | ||
|  |     STDMETHODIMP FlipToGDISurface(); | ||
|  |     STDMETHODIMP GetCaps(__out LPDDCAPS lpDDDriverCaps,__out LPDDCAPS lpDDHELCaps); | ||
|  |     STDMETHODIMP GetDisplayMode(__out LPDDSURFACEDESC lpDDSurfaceDesc); | ||
|  |     STDMETHODIMP GetFourCCCodes(__inout LPDWORD lpNumCodes,__out_ecount(*lpNumCodes) LPDWORD lpCodes); | ||
|  |     STDMETHODIMP GetGDISurface(__deref_out LPDIRECTDRAWSURFACE *lplpGDIDDSurface); | ||
|  |     STDMETHODIMP GetMonitorFrequency(__out LPDWORD lpdwFrequency); | ||
|  |     STDMETHODIMP GetScanLine(__out LPDWORD lpdwScanLine); | ||
|  |     STDMETHODIMP GetVerticalBlankStatus(__out LPBOOL lpblsInVB); | ||
|  |     STDMETHODIMP Initialize(__in GUID *lpGUID); | ||
|  |     STDMETHODIMP RestoreDisplayMode(); | ||
|  |     STDMETHODIMP SetCooperativeLevel(HWND hWnd,DWORD dwFlags); | ||
|  |     STDMETHODIMP SetDisplayMode(DWORD dwWidth,DWORD dwHeight,DWORD dwBpp); | ||
|  |     STDMETHODIMP WaitForVerticalBlank(DWORD dwFlags,HANDLE hEvent); | ||
|  | }; | ||
|  | 
 | ||
|  | 
 | ||
|  | // Class that aggregates an IDirectDrawSurface interface
 | ||
|  | 
 | ||
|  | class CAggDrawSurface : public IDirectDrawSurface, public CUnknown | ||
|  | { | ||
|  | protected: | ||
|  | 
 | ||
|  |     LPDIRECTDRAWSURFACE m_pDirectDrawSurface; | ||
|  | 
 | ||
|  | public: | ||
|  | 
 | ||
|  |     DECLARE_IUNKNOWN | ||
|  |     STDMETHODIMP NonDelegatingQueryInterface(REFIID riid,__deref_out void **ppv); | ||
|  | 
 | ||
|  |     // Constructor and destructor
 | ||
|  | 
 | ||
|  |     CAggDrawSurface(__in_opt LPCTSTR pName,__inout_opt LPUNKNOWN pUnk) : | ||
|  |         CUnknown(pName,pUnk), | ||
|  |         m_pDirectDrawSurface(NULL) { }; | ||
|  | 
 | ||
|  |     virtual ~CAggDrawSurface() { }; | ||
|  | 
 | ||
|  |     // Set the object we should be aggregating
 | ||
|  |     void SetDirectDrawSurface(__inout LPDIRECTDRAWSURFACE pDirectDrawSurface) { | ||
|  |         m_pDirectDrawSurface = pDirectDrawSurface; | ||
|  |     } | ||
|  | 
 | ||
|  |     // IDirectDrawSurface methods
 | ||
|  | 
 | ||
|  |     STDMETHODIMP AddAttachedSurface(__in LPDIRECTDRAWSURFACE lpDDSAttachedSurface); | ||
|  |     STDMETHODIMP AddOverlayDirtyRect(__in LPRECT lpRect); | ||
|  |     STDMETHODIMP Blt(__in LPRECT lpDestRect,__in LPDIRECTDRAWSURFACE lpDDSrcSurface,__in LPRECT lpSrcRect,DWORD dwFlags,__in LPDDBLTFX lpDDBltFx); | ||
|  |     STDMETHODIMP BltBatch(__in_ecount(dwCount) LPDDBLTBATCH lpDDBltBatch,DWORD dwCount,DWORD dwFlags); | ||
|  |     STDMETHODIMP BltFast(DWORD dwX,DWORD dwY,__in LPDIRECTDRAWSURFACE lpDDSrcSurface,__in LPRECT lpSrcRect,DWORD dwTrans); | ||
|  |     STDMETHODIMP DeleteAttachedSurface(DWORD dwFlags,__in LPDIRECTDRAWSURFACE lpDDSAttachedSurface); | ||
|  |     STDMETHODIMP EnumAttachedSurfaces(__in LPVOID lpContext,__in LPDDENUMSURFACESCALLBACK lpEnumSurfacesCallback); | ||
|  |     STDMETHODIMP EnumOverlayZOrders(DWORD dwFlags,__in LPVOID lpContext,__in LPDDENUMSURFACESCALLBACK lpfnCallback); | ||
|  |     STDMETHODIMP Flip(__in LPDIRECTDRAWSURFACE lpDDSurfaceTargetOverride,DWORD dwFlags); | ||
|  |     STDMETHODIMP GetAttachedSurface(__in LPDDSCAPS lpDDSCaps,__deref_out LPDIRECTDRAWSURFACE *lplpDDAttachedSurface); | ||
|  |     STDMETHODIMP GetBltStatus(DWORD dwFlags); | ||
|  |     STDMETHODIMP GetCaps(__out LPDDSCAPS lpDDSCaps); | ||
|  |     STDMETHODIMP GetClipper(__deref_out LPDIRECTDRAWCLIPPER *lplpDDClipper); | ||
|  |     STDMETHODIMP GetColorKey(DWORD dwFlags,__out LPDDCOLORKEY lpDDColorKey); | ||
|  |     STDMETHODIMP GetDC(__out HDC *lphDC); | ||
|  |     STDMETHODIMP GetFlipStatus(DWORD dwFlags); | ||
|  |     STDMETHODIMP GetOverlayPosition(__out LPLONG lpdwX,__out LPLONG lpdwY); | ||
|  |     STDMETHODIMP GetPalette(__deref_out LPDIRECTDRAWPALETTE *lplpDDPalette); | ||
|  |     STDMETHODIMP GetPixelFormat(__out LPDDPIXELFORMAT lpDDPixelFormat); | ||
|  |     STDMETHODIMP GetSurfaceDesc(__out LPDDSURFACEDESC lpDDSurfaceDesc); | ||
|  |     STDMETHODIMP Initialize(__in LPDIRECTDRAW lpDD,__in LPDDSURFACEDESC lpDDSurfaceDesc); | ||
|  |     STDMETHODIMP IsLost(); | ||
|  |     STDMETHODIMP Lock(__in LPRECT lpDestRect,__inout LPDDSURFACEDESC lpDDSurfaceDesc,DWORD dwFlags,HANDLE hEvent); | ||
|  |     STDMETHODIMP ReleaseDC(HDC hDC); | ||
|  |     STDMETHODIMP Restore(); | ||
|  |     STDMETHODIMP SetClipper(__in LPDIRECTDRAWCLIPPER lpDDClipper); | ||
|  |     STDMETHODIMP SetColorKey(DWORD dwFlags,__in LPDDCOLORKEY lpDDColorKey); | ||
|  |     STDMETHODIMP SetOverlayPosition(LONG dwX,LONG dwY); | ||
|  |     STDMETHODIMP SetPalette(__in LPDIRECTDRAWPALETTE lpDDPalette); | ||
|  |     STDMETHODIMP Unlock(__in LPVOID lpSurfaceData); | ||
|  |     STDMETHODIMP UpdateOverlay(__in LPRECT lpSrcRect,__in LPDIRECTDRAWSURFACE lpDDDestSurface,__in LPRECT lpDestRect,DWORD dwFlags,__in LPDDOVERLAYFX lpDDOverlayFX); | ||
|  |     STDMETHODIMP UpdateOverlayDisplay(DWORD dwFlags); | ||
|  |     STDMETHODIMP UpdateOverlayZOrder(DWORD dwFlags,__in LPDIRECTDRAWSURFACE lpDDSReference); | ||
|  | }; | ||
|  | 
 | ||
|  | 
 | ||
|  | class CLoadDirectDraw | ||
|  | { | ||
|  |     LPDIRECTDRAW m_pDirectDraw;     // The DirectDraw driver instance
 | ||
|  |     HINSTANCE m_hDirectDraw;        // Handle to the loaded library
 | ||
|  | 
 | ||
|  | public: | ||
|  | 
 | ||
|  |     CLoadDirectDraw(); | ||
|  |     ~CLoadDirectDraw(); | ||
|  | 
 | ||
|  |     HRESULT LoadDirectDraw(__in LPSTR szDevice); | ||
|  |     void ReleaseDirectDraw(); | ||
|  |     HRESULT IsDirectDrawLoaded(); | ||
|  |     LPDIRECTDRAW GetDirectDraw(); | ||
|  |     BOOL IsDirectDrawVersion1(); | ||
|  | }; | ||
|  | 
 | ||
|  | #endif // __VIDEOCTL__
 | ||
|  | 
 |