## IDirectDrawSurface3

Applications use the methods of the IDirectDrawSurface3 interface to create DirectDrawSurface objects and work with system-level variables. This section is a reference to the methods of this interface. For a conceptual overview, see Surfaces.

The methods of the IDirectDrawSurface3 interface can be organized into the following groups:

Allocating memory | Initialize
| IsLost
| Restore
Attaching surfaces | AddAttachedSurface
| DeleteAttachedSurface
| EnumAttachedSurfaces
| GetAttachedSurface
Blitting | Blt
| BltBatch
| BltFast
| GetBltStatus
Color | GetColorKey
| SetColorKey
Device contexts | GetDC
| ReleaseDC
Flipping | Flip
| GetFlipStatus
Locking surfaces | Lock
| PageLock
| PageUnlock
| Unlock
Miscellaneous | GetDDInterface
Overlays | AddOverlayDirtyRect
| EnumOverlayZOrders
| GetOverlayPosition
| SetOverlayPosition
| UpdateOverlay
| UpdateOverlayDisplay
| UpdateOverlayZOrder
Surface capabilities | GetCaps
Surface clipper | GetClipper
| SetClipper
Surface description | GetPixelFormat
| GetSurfaceDesc
| SetSurfaceDesc
Surface palettes | GetPalette
| SetPalette

The IDirectDrawSurface3 interface, like all COM interfaces, inherits the IUnknown interface methods. The IUnknown interface supports the following three methods:

AddRef |
QueryInterface |
Release |

You can use the LPDIRECTDRAWSURFACE, LPDIRECTDRAWDURFACE2, or LPDIRECTDRAWSURFACE3 data types to declare variables that point to an IDirectDrawSurface, IDirectDrawSurface2, or IDirectDrawSurface3 interface. The Ddraw.h header file declares these data types with the following code:

typedef struct IDirectDrawSurface FAR *LPDIRECTDRAWSURFACE;

typedef struct IDirectDrawSurface2 FAR *LPDIRECTDRAWSURFACE2;

typedef struct IDirectDrawSurface3 FAR *LPDIRECTDRAWSURFACE3;