⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mmddraw.pas

📁 一套及时通讯的原码
💻 PAS
📖 第 1 页 / 共 5 页
字号:
{-- TDDSURFACEDESC -----------------------------------------------------------}

    TDDSurfaceValue                     = record
        case Byte of
            0: (dwMipMapCount: DWORD);      // number of mip-map levels requested
            1: (dwZBufferBitDepth: DWORD);  // depth of Z buffer requested
            2: (dwRefreshRate: DWORD);      // refresh rate (used when display mode is described)
    end;

    PDDSURFACEDESC                      = ^TDDSURFACEDESC;
    TDDSURFACEDESC                      = record
        dwSize                          : DWORD;            // size of the DDSURFACEDESC structure
        dwFlags                         : DWORD;            // determines what fields are valid
        dwHeight                        : DWORD;            // height of surface to be created
        dwWidth                         : DWORD;            // width of input surface
        lPitch                          : LONG;             // distance to start of next line (return value only)
        dwBackBufferCount               : DWORD;            // number of back buffers requested
        Value                           : TDDSurfaceValue;
        dwAlphaBitDepth                 : DWORD;            // depth of alpha buffer requested
        dwReserved                      : DWORD;            // reserved
        lpSurface                       : PVOID;            // pointer to the associated surface memory
        ddckCKDestOverlay               : TDDCOLORKEY;      // color key for destination overlay use
        ddckCKDestBlt                   : TDDCOLORKEY;      // color key for destination blt use
        ddckCKSrcOverlay                : TDDCOLORKEY;      // color key for source overlay use
        ddckCKSrcBlt                    : TDDCOLORKEY;      // color key for source blt use
        ddpfPixelFormat                 : TDDPIXELFORMAT;   // pixel format description of the surface
        ddsCaps                         : TDDSCAPS;         // direct draw surface capabilities
    end;

    PDDENUMCALLBACKA                = function(pGUID: PGUID; lpDriverDescription, lpDriverName: LPSTR; lpContext: PVOID): BOOL; pascal;
    PDDENUMCALLBACKW                = function(pGUID: PGUID; lpDriverDescription, lpDriverName: LPWSTR; lpContext: PVOID): BOOL; pascal;

    PDDENUMCALLBACK                 = PDDENUMCALLBACKA;
    
    PDDENUMMODESCALLBACK            = function(lpDDSurfaceDesc: PDDSURFACEDESC; lpContext: PVOID): HRESULT; pascal;
    PDDENUMSURFACESCALLBACK         = function(lpDDSurface: PDIRECTDRAWSURFACE; lpDDSurfaceDesc: PDDSURFACEDESC; lpContext: PVOID): HRESULT; pascal;

{-- IDirectDraw --------------------------------------------------------------}

    PDirectDraw                     = ^IDirectDraw;
    IDirectDraw                     = class(IUnknown)
    public
        function    Compact: HRESULT; virtual; stdcall; abstract;
        function    CreateClipper(dwFlags: DWORD; var lplpDDClipper: PDIRECTDRAWCLIPPER; pUnkOuter: PUnknown): HRESULT; virtual; stdcall; abstract;
        function    CreatePalette(dwFlags: DWORD; lpColorTable: PPALETTEENTRY; var lplpDDPalette: PDIRECTDRAWPALETTE; pUnkOuter: PUnknown): HRESULT; virtual; stdcall; abstract;
        function    CreateSurface(lpDDSurfaceDesc: PDDSURFACEDESC; var lplpDDSurface: PDIRECTDRAWSURFACE; pUnkOuter: PUnknown): HRESULT; virtual; stdcall; abstract;
        function    DuplicateSurface(lpDDSurface: PDIRECTDRAWSURFACE; var lplpDupDDSurface: PDIRECTDRAWSURFACE): HRESULT; virtual; stdcall; abstract;
        function    EnumDisplayModes(dwFlags: DWORD; lpDDSurfaceDesc: PDDSURFACEDESC; lpContext: PVOID; lpEnumModesCallback: PDDENUMMODESCALLBACK): HRESULT; virtual; stdcall; abstract;
        function    EnumSurfaces(dwFlags: DWORD; lpDDSD: PDDSURFACEDESC; lpContext: PVOID; lpEnumCallback: PDDENUMSURFACESCALLBACK): HRESULT; virtual; stdcall; abstract;
        function    FlipToGDISurface: HRESULT; virtual; stdcall; abstract;
        function    GetCaps(lpDDDriverCaps: PDDCAPS; lpDDHELCaps: PDDCAPS): HRESULT; virtual; stdcall; abstract;
        function    GetDisplayMode(lpDDSurfaceDesc: PDDSURFACEDESC): HRESULT; virtual; stdcall; abstract;
        function    GetFourCCCodes(lpNumCodes: PDWORD; lpCodes: PDWORD ): HRESULT; virtual; stdcall; abstract;
        function    GetGDISurface(var lplpGDIDDSSurface: PDIRECTDRAWSURFACE): HRESULT; virtual; stdcall; abstract;
        function    GetMonitorFrequency(lpdwFrequency: PDWORD): HRESULT; virtual; stdcall; abstract;
        function    GetScanLine(lpdwScanLine: PDWORD): HRESULT; virtual; stdcall; abstract;
        function    GetVerticalBlankStatus(lpblsInVB: PBOOL): HRESULT; virtual; stdcall; abstract;
        function    Initialize(lpGUID: PGUID): HRESULT; virtual; stdcall; abstract;
        function    RestoreDisplayMode: HRESULT; virtual; stdcall; abstract;
        function    SetCooperativeLevel(hWnd: HWND; dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
        function    SetDisplayMode(dwWidth: DWORD; dwHeight: DWORD; dwBPP: DWORD): HRESULT; virtual; stdcall; abstract;
        function    WaitForVerticalBlank(dwFlags: DWORD; hEvent: THANDLE): HRESULT; virtual; stdcall; abstract;
    end;

{-- IDirectDraw2 -------------------------------------------------------------}

    PDirectDraw2                    = ^IDirectDraw2;
    IDirectDraw2                    = class(IUnknown)
    public
        function    Compact: HRESULT; virtual; stdcall; abstract;
        function    CreateClipper(dwFlags: DWORD; var lplpDDClipper: PDIRECTDRAWCLIPPER; pUnkOuter: PUnknown): HRESULT; virtual; stdcall; abstract;
        function    CreatePalette(dwFlags: DWORD; lpColorTable: PPALETTEENTRY; var lplpDDPalette: PDIRECTDRAWPALETTE; pUnkOuter: PUnknown): HRESULT; virtual; stdcall; abstract;
        function    CreateSurface(lpDDSurfaceDesc: PDDSURFACEDESC; var lplpDDSurface: PDIRECTDRAWSURFACE; pUnkOuter: PUnknown): HRESULT; virtual; stdcall; abstract;
        function    DuplicateSurface(lpDDSurface: PDIRECTDRAWSURFACE; var lplpDupDDSurface: PDIRECTDRAWSURFACE): HRESULT; virtual; stdcall; abstract;
        function    EnumDisplayModes(dwFlags: DWORD; lpDDSurfaceDesc: PDDSURFACEDESC; lpContext: PVOID; lpEnumModesCallback: PDDENUMMODESCALLBACK): HRESULT; virtual; stdcall; abstract;
        function    EnumSurfaces(dwFlags: DWORD; lpDDSD: PDDSURFACEDESC; lpContext: PVOID; lpEnumCallback: PDDENUMSURFACESCALLBACK): HRESULT; virtual; stdcall; abstract;
        function    FlipToGDISurface: HRESULT; virtual; stdcall; abstract;
        function    GetCaps(lpDDDriverCaps: PDDCAPS; lpDDHELCaps: PDDCAPS): HRESULT; virtual; stdcall; abstract;
        function    GetDisplayMode(lpDDSurfaceDesc: PDDSURFACEDESC): HRESULT; virtual; stdcall; abstract;
        function    GetFourCCCodes(lpNumCodes: PDWORD; lpCodes: PDWORD ): HRESULT; virtual; stdcall; abstract;
        function    GetGDISurface(var lplpGDIDDSSurface: PDIRECTDRAWSURFACE): HRESULT; virtual; stdcall; abstract;
        function    GetMonitorFrequency(lpdwFrequency: PDWORD): HRESULT; virtual; stdcall; abstract;
        function    GetScanLine(lpdwScanLine: PDWORD): HRESULT; virtual; stdcall; abstract;
        function    GetVerticalBlankStatus(lpblsInVB: PBOOL): HRESULT; virtual; stdcall; abstract;
        function    Initialize(lpGUID: PGUID): HRESULT; virtual; stdcall; abstract;
        function    RestoreDisplayMode: HRESULT; virtual; stdcall; abstract;
        function    SetCooperativeLevel(hWnd: HWND; dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
        { SetDisplayMode changed in v2 }
        function    SetDisplayMode(dwWidth: DWORD; dwHeight: DWORD; dwBPP: DWORD; dwRefreshRate: DWORD; dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
        function    WaitForVerticalBlank(dwFlags: DWORD; hEvent: THANDLE): HRESULT; virtual; stdcall; abstract;
        { Added in the v2 interface }
        function    GetAvailableVidMem(lpDDSCaps: PDDSCAPS; lpdwTotal: PDWORD; lpdwFree: PDWORD): HRESULT; virtual; stdcall; abstract;
    end;

{-- IDirectDrawPalette -------------------------------------------------------}

    IDirectDrawPalette              = class(IUnknown)
    public
        function    GetCaps(lpdwCaps: PDWORD): HRESULT; virtual; stdcall; abstract;
        function    GetEntries(dwFlags: DWORD; dwBase: DWORD; dwNumEntries: DWORD; lpEntries: PPALETTEENTRY): HRESULT; virtual; stdcall; abstract;
        function    Initialize(lpDD: PDIRECTDRAW; dwFlags: DWORD; lpDDColorTable: PPALETTEENTRY): HRESULT; virtual; stdcall; abstract;
        function    SetEntries(dwFlags: DWORD; dwStartingEntry: DWORD; dwCount: DWORD; lpEntries: PPALETTEENTRY): HRESULT; virtual; stdcall; abstract;
    end;

{-- IDirectDrawClipper -------------------------------------------------------}

    IDirectDrawClipper              = class(IUnknown)
    public
        function    GetClipList(lpRect: PRECT; lpClipList: PRGNDATA; lpdwSize: PDWORD): HRESULT; virtual; stdcall; abstract;
        function    GetHWnd(lphWnd: PHWND): HRESULT; virtual; stdcall; abstract;
        function    Initialize(lpDD: PDIRECTDRAW; dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
        function    IsClipListChanged(lpbChanged: PBOOL): HRESULT; virtual; stdcall; abstract;
        function    SetClipList(lpClipList: PRGNDATA; dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
        function    SetHWnd(dwFlags: DWORD; hWnd: HWND): HRESULT; virtual; stdcall; abstract;
    end;

{-- IDirectDrawSurface -------------------------------------------------------}

    IDirectDrawSurface              = class(IUnknown)
    public
        function    AddAttachedSurface(lpDDSAttachedSurface: PDIRECTDRAWSURFACE): HRESULT; virtual; stdcall; abstract;
        function    AddOverlayDirtyRect(lpRect: PRECT): HRESULT; virtual; stdcall; abstract;
        function    Blt(lpDestRect: PRECT; lpDDSrcSurface: PDIRECTDRAWSURFACE; lpSrcRect: PRECT; dwFlags: DWORD; lpDDBltFx: PDDBLTFX): HRESULT; virtual; stdcall; abstract;
        function    BltBatch(lpDDBltBatch: PDDBLTBATCH; dwCount: DWORD; dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
        function    BltFast(dwX: DWORD; dwY: DWORD; lpDDSrcSurface: PDIRECTDRAWSURFACE; lpSrcRect: PRECT; dwTrans: DWORD): HRESULT; virtual; stdcall; abstract;
        function    DeleteAttachedSurface(dwFlags: DWORD; lpDDSAttachedSurface: PDIRECTDRAWSURFACE): HRESULT; virtual; stdcall; abstract;
        function    EnumAttachedSurfaces(lpContext: PVOID; lpEnumSurfacesCallback: PDDENUMSURFACESCALLBACK): HRESULT; virtual; stdcall; abstract;
        function    EnumOverlayZOrders(dwFlags: DWORD; lpContext: PVOID; lpfnCallback: PDDENUMSURFACESCALLBACK): HRESULT; virtual; stdcall; abstract;
        function    Flip(lpDDSurfaceTargetOverride: PDIRECTDRAWSURFACE; dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
        function    GetAttachedSurface(lpDDSCaps: PDDSCAPS; var lplpDDAttachedSurface: PDIRECTDRAWSURFACE): HRESULT; virtual; stdcall; abstract;
        function    GetBltStatus(dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
        function    GetCaps(lpDDSCaps: PDDSCAPS): HRESULT; virtual; stdcall; abstract;
        function    GetClipper(var lplpDDClipper: PDIRECTDRAWCLIPPER): HRESULT; virtual; stdcall; abstract;
        function    GetColorKey(dwFlags: DWORD; lpDDColorKey: PDDCOLORKEY): HRESULT; virtual; stdcall; abstract;
        function    GetDC(lphDC: PHDC): HRESULT; virtual; stdcall; abstract;
        function    GetFlipStatus(dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
        function    GetOverlayPosition(lplX: PLONG; lplY: PLONG ): HRESULT; virtual; stdcall; abstract;
        function    GetPalette(var lplpDDPalette: PDIRECTDRAWPALETTE): HRESULT; virtual; stdcall; abstract;
        function    GetPixelFormat(lpDDPixelFormat: PDDPIXELFORMAT): HRESULT; virtual; stdcall; abstract;
        function    GetSurfaceDesc(lpDDSurfaceDesc: PDDSURFACEDESC): HRESULT; virtual; stdcall; abstract;
        function    Initialize(lpDD: PDIRECTDRAW; lpDDSurfaceDesc: PDDSURFACEDESC): HRESULT; virtual; stdcall; abstract;
        function    IsLost: HRESULT; virtual; stdcall; abstract;
        function    Lock(lpDestRect: PRECT; lpDDSurfaceDesc: PDDSURFACEDESC; dwFlags: DWORD; hEvent: THANDLE): HRESULT; virtual; stdcall; abstract;
        function    ReleaseDC(hDC: HDC): HRESULT; virtual; stdcall; abstract;
        function    Restore: HRESULT; virtual; stdcall; abstract;
        function    SetClipper(lpDDClipper: PDIRECTDRAWCLIPPER): HRESULT; virtual; stdcall; abstract;
        function    SetColorKey(dwFlags: DWORD; lpDDColorKey: PDDCOLORKEY): HRESULT; virtual; stdcall; abstract;
        function    SetOverlayPosition(lX: LONG; lY: LONG): HRESULT; virtual; stdcall; abstract;
        function    SetPalette(lpDDPalette: PDIRECTDRAWPALETTE): HRESULT; virtual; stdcall; abstract;
        function    Unlock(lpSurfaceData: PVOID): HRESULT; virtual; stdcall; abstract;
        function    UpdateOverlay(lpSrcRect: PRECT; lpDDDestSurface: PDIRECTDRAWSURFACE; lpDestRect: PRECT; dwFlags: DWORD; lpDDOverlayFx: PDDOVERLAYFX): HRESULT; virtual; stdcall; abstract;
        function    UpdateOverlayDisplay(dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
        function    UpdateOverlayZOrder(dwFlags: DWORD; lpDDSReference: PDIRECTDRAWSURFACE): HRESULT; virtual; stdcall; abstract;
    end;

{-- IDirectDrawSurface2 and related interfaces -------------------------------}

    PDirectDrawSurface2             = ^IDirectDrawSurface2;
    IDirectDrawSurface2             = class(IUnknown)
        function    AddAttachedSurface(lpDDSAttachedSurface: PDIRECTDRAWSURFACE2): HRESULT; virtual; stdcall; abstract;
        function    AddOverlayDirtyRect(lpRect: PRECT): HRESULT; virtual; stdcall; abstract;
        function    Blt(lpDestRect: PRECT; lpDDSrcSurface: PDIRECTDRAWSURFACE2; lpSrcRect: PRECT; dwFlags: DWORD; lpDDBltFx: PDDBLTFX): HRESULT; virtual; stdcall; abstract;
        function    BltBatch(lpDDBltBatch: PDDBLTBATCH; dwCount: DWORD; dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
        function    BltFast(dwX: DWORD; dwY: DWORD; lpDDSrcSurface: PDIRECTDRAWSURFACE2; lpSrcRect: PRECT; dwTrans: DWORD): HRESULT; virtual; stdcall; abstract;
        function    DeleteAttachedSurface(dwFlags: DWORD; lpDDSAttachedSurface: PDIRECTDRAWSURFACE2): HRESULT; virtual; stdcall; abstract;
        function    EnumAttachedSurfaces(lpContext: PVOID; lpEnumSurfacesCallback: PDDENUMSURFACESCALLBACK): HRESULT; virtual; stdcall; abstract;
        function    EnumOverlayZOrders(dwFlags: DWORD; lpContext: PVOID; lpfnCallback: PDDENUMSURFACESCALLBACK): HRESULT; virtual; stdcall; abstract;
        function    Flip(lpDDSurfaceTargetOverride: PDIRECTDRAWSURFACE2; dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
        function    GetAttachedSurface(lpDDSCaps: PDDSCAPS; var lplpDDAttachedSurface: PDIRECTDRAWSURFACE2): HRESULT; virtual; stdcall; abstract;
        function    GetBltStatus(dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
        function    GetCaps(lpDDSCaps: PDDSCAPS): HRESULT; virtual; stdcall; abstract;
        function    GetClipper(var lplpDDClipper: PDIRECTDRAWCLIPPER): HRESULT; virtual; stdcall; abstract;
        function    GetColorKey(dwFlags: DWORD; lpDDColorKey: PDDCOLORKEY): HRESULT; virtual; stdcall; abstract;
        function    GetDC(lphDC: PHDC): HRESULT; virtual; stdcall; abstract;
        function    GetFlipStatus(dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
        function    GetOverlayPosition(lplX: PLONG; lplY: PLONG): HRESULT; virtual; stdcall; abstract;
        function    GetPalette(var lplpDDPalette: PDIRECTDRAWPALETTE): HRESULT; virtual; stdcall; abstract;
        function    GetPixelFormat(lpDDPixelFormat: PDDPIXELFORMAT): HRESULT; virtual; stdcall; abstract;
        function    GetSurfaceDesc(lpDDSurfaceDesc: PDDSURFACEDESC): HRESULT; virtual; stdcall; abstract;
        function    Initialize(lpDD: PDIRECTDRAW; lpDDSurfaceDesc: PDDSURFACEDESC): HRESULT; virtual; stdcall; abstract;
        function    IsLost: HRESULT; virtual; stdcall; abstract;
        function    Lock(lpDestRect: PRECT; lpDDSurfaceDesc: PDDSURFACEDESC; dwFlags: DWORD; hEvent: THANDLE): HRESULT; virtual; stdcall; abstract;
        function    ReleaseDC(hDC: HDC): HRESULT; virtual; stdcall; abstract;
        function    Restore: HRESULT; virtual; stdcall; abstract;
        function    SetClipper(lpDDClipper: PDIRECTDRAWCLIPPER): HRESULT; virtual; stdcall; abstract;
        function    SetColorKey(dwFlags: DWORD; lpDDColorKey: PDDCOLORKEY): HRESULT; virtual; stdcall; abstract;
        function    SetOverlayPosition(lX: LONG; lY: LONG): HRESULT; virtual; stdcall; abstract;
        function    SetPalette(lpDDPalette: PDIRECTDRAWPALETTE): HRESULT; virtual; stdcall; abstract;
        function    Unlock(lpSurfaceData: PVOID): HRESULT; virtual; stdcall; abstract;
        function    UpdateOverlay(lpSrcRect: PRECT; lpDDDestSurface: PDIRECTDRAWSURFACE2; lpDestRect: PRECT; dwFlags: DWORD; lpDDOverlayFx: PDDOVERLAYFX): HRESULT; virtual; stdcall; abstract;
        function    UpdateOverlayDisplay(dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
        function    UpdateOverlayZOrder(dwFlags: DWORD; lpDDSReference: PDIRECTDRAWSURFACE2): HRESULT; virtual; stdcall; abstract;
        { Added in the v2 interface }
        function    GetDDInterface(var lplpDD: PVOID): HRESULT; virtual; stdcall; abstract;
        function    PageLock(dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
        function    PageUnlock(dwFlags: DWORD): HRESULT; virtual; stdcall; abstract;
    end;

// #ifdef WINNT
//  //This is the user-mode entry stub to the kernel mode procedure.
//  extern HRESULT NtDirectDrawCreate( GUID FAR *lpGUID, HANDLE *lplpDD, IUnknown FAR *pUnkOuter );
// #endif

{-- Caps flags ---------------------------------------------------------------}

const
    // ddsCaps field is valid.
    DDSD_CAPS                   = $00000001;     // default

    // dwHeight field is valid.
    DDSD_HEIGHT                 = $00000002;

    // dwWidth field is valid.
    DDSD_WIDTH                  = $00000004;

    // lPitch is valid.
    DDSD_PITCH                  = $00000008;

    // dwBackBufferCount is valid.
    DDSD_BACKBUFFERCOUNT        = $00000020;

    // dwZBufferBitDepth is valid.
    DDSD_ZBUFFERBITDEPTH        = $00000040;

    // dwAlphaBitDepth is valid.
    DDSD_ALPHABITDEPTH          = $00000080;

    // ddpfPixelFormat is valid.
    DDSD_PIXELFORMAT            = $00001000;

    // ddckCKDestOverlay is valid.
    DDSD_CKDESTOVERLAY          = $00002000;

    // ddckCKDestBlt is valid.
    DDSD_CKDESTBLT              = $00004000;

    // ddckCKSrcOverlay is valid.
    DDSD_CKSRCOVERLAY           = $00008000;

    // ddckCKSrcBlt is valid.
    DDSD_CKSRCBLT               = $00010000;

    // dwMipMapCount is valid.
    DDSD_MIPMAPCOUNT            = $00020000;

    // dwRefreshRate is valid
    DDSD_REFRESHRATE            = $00040000;

    // All input fields are valid.
    DDSD_ALL                    = $0007F9EE;

{== Capability flags =========================================================}

// These flags are used to describe the capabilities of a given Surface.
// All flags are bit flags.

const
    //
    // This bit currently has no meaning.
    //
    DDSCAPS_3D                          = $00000001;

    //
    // Indicates that this surface contains alpha information.  The pixel
    // format must be interrogated to determine whether this surface
    // contains only alpha information or alpha information interlaced
    // with pixel color data (e.g. RGBA or YUVA).
    //
    DDSCAPS_ALPHA                       = $00000002;

    //
    // Indicates that this surface is a backbuffer.  It is generally
    // set by CreateSurface when the DDSCAPS_FLIP capability bit is set.
    // It indicates that this surface is THE back buffer of a surface
    // flipping structure.  DirectDraw supports N surfaces in a
    // surface flipping structure.  Only the surface that immediately

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -