| //------------------------------------------------------------------------------ | |
| // 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 | |
| LPTSTR WINAPI StringFromResource(__out_ecount(STR_MAX_LENGTH) LPTSTR pBuffer, int iResourceID); | |
| #ifdef UNICODE | |
| #define WideStringFromResource StringFromResource | |
| LPSTR 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::~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__ | |