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