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