-
-
[原创]Win32编写的DIrectDraw窗口模式程序,请支持.
-
发表于: 2008-5-10 22:16 12020
-
源码下载: win32window.rar;---------------------------------------;
; DDRAW Demo ;
; 本人初学win32汇编不久,对其并不是太熟,当然学习汇编仅是为了学破解,
;学破解原来的目的是想自己做外挂,当然我也正在跨出这一步,只是基础太差,不知
;要到何能马月才有所成。
; 本程序主要是用汇编实现了DirectDraw的窗口化。在写这个程序时在网上查了
;很久似乎并没有用WIN32写的窗口模式的DirectDraw程序,所以只有边学习,边摸索,
;大家都知道很多游戏是全屏的。并没有提供窗口化,为了对游戏进行一些辅助性的修改
;实现窗口化是很有必要的,那么如果有人想用WIN32对游戏进行修改,那么可以共同探讨
;一下,本程序还存在一些不足之处,请指正,不过总体方向没错。
; 下一篇我将用WIN32实现全屏和窗口化之间的切换。请大家鼓力一下小弟。; Author : Jacksheng ;
;---------------------------------------;
; View with TAB size 8
TITLE WIN32ASM EXAMPLE
.486
.MODEL FLAT, STDCALL
option casemap :none
;-----------------------------------------------------------;
; WIN32ASM / DDRAW DEMO ;
;-----------------------------------------------------------;
INCLUDE windows.inc
INCLUDE gdi32.inc
INCLUDE kernel32.inc
INCLUDE user32.inc
INCLUDE ddraw.inc
INCLUDELIB gdi32.lib
INCLUDELIB kernel32.lib
INCLUDELIB user32.lib
INCLUDELIB ddraw.lib
ICO_MAIN equ 1000h
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ;对MESSAGEBOX进行宏定义
FATAL MACRO msg
LOCAL @@msg
.DATA
@@msg db msg, 0
.CODE
INVOKE MessageBox, hWinMain, ADDR @@msg, ADDR szDisplayName, MB_OK
INVOKE ExitProcess, 0
ENDM
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ;对色进行宏定义
RGB macro red,green,blue
xor eax,eax
mov ah,blue
shl eax,8
mov ah,green
mov al,red
endm
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data?
hInstance dd ?
hWinMain dd ?
stRt RECT <?>
stPoint POINT <?>
stPoint2 POINT <?>
lpDD LPDIRECTDRAW ? ; DDraw object
lpDDSPrimary LPDIRECTDRAWSURFACE ? ; DDraw primary surface
lpDDSStore LPDIRECTDRAWSURFACE ?
ddsd DDSURFACEDESC <?> ; DDraw surface descriptor
ddscaps DDSCAPS <?> ; DDraw capabilities
pcClipper LPDIRECTDRAWCLIPPER ?
@hDc HDC ?
stFx DDBLTFX <?>
.const
szCaptionMain db 'My first Window !',0
szText db 'Win32 Assembly, Simple and powerful !',0
szClassName db "DDRAW Plasma Demo", 0 ; class name
szDisplayName EQU <szClassName> ; window name
szTest db "This is a stinky App",0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; // old DirectDraw Initialization stuff.
;// Set a window mode DirectDraw Display.
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_Init proc
invoke DirectDrawCreate,NULL,ADDR lpDD,NULL ;建对象
.if eax !=DD_OK
FATAL "Failed to create directdraw object!"
.endif
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DDINVOKE SetCooperativeLevel, lpDD, NULL, DDSCL_NORMAL ;建控制级非独占模式
.IF eax != DD_OK
FATAL "Couldn't set DirectDraw cooperative level"
.ENDIF
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
invoke RtlZeroMemory,addr ddsd,sizeof ddsd
mov [ddsd.dwSize], sizeof DDSURFACEDESC
mov [ddsd.dwFlags], DDSD_CAPS
mov [ddsd.ddsCaps.dwCaps], DDSCAPS_PRIMARYSURFACE
DDINVOKE CreateSurface, lpDD, ADDR ddsd, ADDR lpDDSPrimary, NULL ;建主表面
.IF eax != DD_OK
FATAL "Couldn't create primary surface"
.ENDIF
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
mov [ddsd.dwSize], sizeof DDSURFACEDESC
mov [ddsd.dwFlags], DDSD_CAPS or DDSD_WIDTH or DDSD_HEIGHT
mov [ddsd.ddsCaps.dwCaps], DDSCAPS_OFFSCREENPLAIN OR DDSCAPS_3DDEVICE
mov [ddsd.dwWidth],800
mov [ddsd.dwHeight],600
DDINVOKE CreateSurface, lpDD, ADDR ddsd, ADDR lpDDSStore, NULL ;建后台表面
.IF eax != DD_OK
FATAL "Couldn't create store surface"
.ENDIF
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DDINVOKE CreateClipper, lpDD, 0, ADDR pcClipper, NULL ;设裁剪器
.IF eax != DD_OK
FATAL "Couldn't create Clipper "
.ENDIF
DDCINVOKE SetHWnd,pcClipper, 0, hWinMain
.IF eax != DD_OK
DDCINVOKE Release,pcClipper
FATAL "Failed to create primary surface"
.ENDIF
DDSINVOKE SetClipper,lpDDSPrimary,pcClipper
.IF eax != DD_OK
DDCINVOKE Release,pcClipper
FATAL "Failed to create SetClipper primary surface"
.ENDIF
ret
_Init endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; // Load images from offscteen buffer to primary buffer
; // and for display.
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_DisPlay proc
push 0
pop stPoint.x
push 0
pop stPoint.y
invoke ClientToScreen,hWinMain,addr stPoint ;get the client area on the desktop by using this line.
xor eax,eax
mov eax,stPoint.x
mov stRt.left,eax
add eax,800
mov stRt.right,eax
mov eax,stPoint.y
mov stRt.top,eax
add eax,600
mov stRt.bottom,eax
.while TRUE
DDSINVOKE Blt,lpDDSPrimary,addr stRt, lpDDSStore,NULL,DDBLT_WAIT,NULL
.if eax == DD_OK
;ret
.BREAK
.elseif eax == DDERR_SURFACELOST
DDSINVOKE Restore, lpDDSPrimary
DDSINVOKE Restore, lpDDSStore
.elseif eax !=DDERR_WASSTILLDRAWING
ret
;FATAL "Couldn't lock surface"
.endif
.endw
ret
_DisPlay endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; a test:// The conclusion is: Under no circumstance, draw directly to
; primary Surface!// It doesn't work that way.// ...// ...
; This is just a simple test function. It has shit use in this
; project.
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_TestDraw proc pointx,pointy
;local @hDc:HDC //要设为全局变量才行.
local @Point:POINT
local @Rect:RECT
mov eax,pointx
mov @Point.x,eax
sub eax,50
mov @Rect.left,eax
add eax,100
mov @Rect.right,eax
mov eax,pointy
mov @Point.y,eax
sub eax,50
mov @Rect.top,eax
add eax,100
mov @Rect.bottom,eax
DDSINVOKE GetDC,lpDDSStore,addr @hDc
.if eax!=DD_OK
ret
.else
invoke ClientToScreen,hWinMain,addr @Point ;坐标转换即相对转为绝对因DIRECTXDRAW需要
RGB 255,255,0
invoke SetTextColor,@hDc,eax
invoke TextOut,@hDc, 20, 20,addr szText, sizeof szText
invoke Ellipse,@hDc,@Rect.left,@Rect.top,@Rect.right,@Rect.bottom
DDSINVOKE ReleaseDC,lpDDSStore,@hDc
.endif
ret
_TestDraw endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; clear both off csreen buffer and primary buffer.
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_Clear proc
mov eax,sizeof stFx
mov stFx.dwSize,eax
mov stFx.dwFillColor,0
.while TRUE
DDSINVOKE Blt,lpDDSPrimary,NULL,NULL,NULL,DDBLT_COLORFILL,addr stFx
.if eax == DD_OK
.BREAK
.elseif eax == DDERR_SURFACELOST
DDSINVOKE Restore, lpDDSPrimary
.elseif eax !=DDERR_WASSTILLDRAWING
.BREAK
.endif
.endw
.while TRUE
DDSINVOKE Blt,lpDDSStore,NULL,NULL,NULL,DDBLT_COLORFILL,addr stFx
.if eax == DD_OK
.BREAK
.elseif eax == DDERR_SURFACELOST
DDSINVOKE Restore, lpDDSStore
.elseif eax !=DDERR_WASSTILLDRAWING
.BREAK
.endif
.endw
ret
_Clear endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; // make sure all things are terminated and set to NULL
;// when application ends.
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_Terminate proc
_Terminate endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 窗口过程
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcWinMain proc uses ebx edi esi,hWnd,uMsg,wParam,lParam
local @stPs:PAINTSTRUCT
local @stRect:RECT
mov eax,uMsg
;********************************************************************
.if eax== WM_LBUTTONDOWN
mov eax,lParam
and eax,0FFFFh
mov stPoint2.x,eax
mov eax,lParam
shr eax,16
mov stPoint2.y,eax
;invoke GetCursorPos,addr stPoint2
invoke _Clear
invoke _TestDraw,stPoint2.x,stPoint2.y
invoke _DisPlay
;********************************************************************
.elseif eax == WM_CLOSE
FATAL "Please accept Quit!"
invoke DestroyWindow,hWinMain
invoke PostQuitMessage,NULL
;********************************************************************
.else
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.endif
;********************************************************************
xor eax,eax
ret
_ProcWinMain endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_WinMain proc
local @stWndClass:WNDCLASSEX
local @stMsg:MSG
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke RtlZeroMemory,addr @stWndClass,sizeof @stWndClass
;********************************************************************
; 注册窗口类
;********************************************************************
invoke LoadIcon,NULL,IDI_INFORMATION
mov @stWndClass.hIcon,eax
invoke LoadCursor,0,IDC_ARROW
mov @stWndClass.hCursor,eax
push hInstance
pop @stWndClass.hInstance
mov @stWndClass.cbSize,sizeof WNDCLASSEX
mov @stWndClass.style,CS_HREDRAW or CS_VREDRAW
mov @stWndClass.lpfnWndProc,offset _ProcWinMain
INVOKE GetStockObject, BLACK_BRUSH
;mov [wc.hbrBackground], eax
mov @stWndClass.hbrBackground,eax;COLOR_WINDOW + 1
mov @stWndClass.lpszClassName,offset szClassName
invoke RegisterClassEx,addr @stWndClass
;********************************************************************
; 建立并显示窗口
;********************************************************************
invoke CreateWindowEx,WS_EX_CLIENTEDGE,\
offset szClassName,offset szCaptionMain,\
WS_OVERLAPPEDWINDOW,\
100,100,800,600,\
NULL,NULL,hInstance,NULL
mov hWinMain,eax
invoke _Init
invoke ShowWindow,hWinMain,SW_SHOWNORMAL
invoke UpdateWindow,hWinMain
;********************************************************************
; 消息循环
;********************************************************************
.while TRUE
invoke GetMessage,addr @stMsg,NULL,0,0
.break .if eax == 0
invoke TranslateMessage,addr @stMsg
invoke DispatchMessage,addr @stMsg
.endw
ret
_WinMain endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
call _WinMain
invoke ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end start
DDRAW.INC这个文件主要是参考 Ewald Snel 这位牛人的.并做了些修改.
;---------------------------------------;
; DDRAW include file ;
; ;
; Author : Ewald Snel ;
; Copyright (C) 1999, Diamond Crew ;
; ;
; http://here.is/diamond/ ;
;---------------------------------------;
STDMETHOD MACRO name, argl :VARARG
LOCAL @tmp_a
LOCAL @tmp_b
@tmp_a TYPEDEF PROTO argl
@tmp_b TYPEDEF PTR @tmp_a
name @tmp_b ?
ENDM
DDINVOKE MACRO func, this, arglist :VARARG
mov eax , [this]
mov eax , [eax]
IFB <arglist>
INVOKE [IDirectDrawVtbl. func][eax], this
ELSE
INVOKE [IDirectDrawVtbl. func][eax], this, arglist
ENDIF
ENDM
DDSINVOKE MACRO func, this, arglist :VARARG
mov eax , [this]
mov eax , [eax]
IFB <arglist>
INVOKE [IDirectDrawSurfaceVtbl. func][eax], this
ELSE
INVOKE [IDirectDrawSurfaceVtbl. func][eax], this, arglist
ENDIF
ENDM
DDCINVOKE MACRO func, this, arglist :VARARG
mov eax , [this]
mov eax , [eax]
IFB <arglist>
INVOKE [IDirectDrawClipperVtbl. func][eax], this
ELSE
INVOKE [IDirectDrawClipperVtbl. func][eax], this, arglist
ENDIF
;这一段是本人参考着新加的.为建窗口模式的需要.
ENDM
DirectDrawCreate PROTO :DWORD, :DWORD, :DWORD
DirectDrawCreateClipper PROTO :DWORD, :DWORD, :DWORD
DirectDrawEnumerateA PROTO :DWORD, :DWORD
DirectDrawEnumerate EQU <DirectDrawEnumerateA>
EXTERNDEF C CLSID_DirectDraw:GUID
EXTERNDEF C CLSID_DirectDrawClipper:GUID
EXTERNDEF C IID_IDirectDraw:GUID
EXTERNDEF C IID_IDirectDrawSurface:GUID
EXTERNDEF C IID_IDirectDrawPalette:GUID
EXTERNDEF C IID_IDirectDrawClipper:GUID
LPDIRECTDRAW TYPEDEF PTR IDirectDraw
LPDIRECTDRAWSURFACE TYPEDEF PTR IDirectDrawSurface
LPDIRECTDRAWPALETTE TYPEDEF PTR IDirectDrawPalette
LPDIRECTDRAWCLIPPER TYPEDEF PTR IDirectDrawClipper
LPDDFXROP TYPEDEF PTR DDFXROP
LPDDSURFACEDESC TYPEDEF PTR DDSURFACEDESC
LPDDCAPS TYPEDEF PTR DDCAPS
LPDDBLTFX TYPEDEF PTR DDBLTFX
LPDDSCAPS TYPEDEF PTR DDSCAPS
LPDDCOLORKEY TYPEDEF PTR DDCOLORKEY
LPDDOVERLAYFX TYPEDEF PTR DDOVERLAYFX
LPDDPIXELFORMAT TYPEDEF PTR DDPIXELFORMAT
LPDDBLTBATCH TYPEDEF PTR DDBLTBATCH
; windows defines
LPRECT TYPEDEF PTR RECT
LPPALETTEENTRY TYPEDEF PTR PALETTEENTRY
LPRGNDATA TYPEDEF PTR RGNDATA
DDCOLORKEY STRUC
dwColorSpaceLowValue DWORD ?
dwColorSpaceHighValue DWORD ?
DDCOLORKEY ENDS
DDBLTFX STRUC
dwSize DWORD ?
dwDDFX DWORD ?
dwROP DWORD ?
dwDDROP DWORD ?
dwRotationAngle DWORD ?
dwZBufferOpCode DWORD ?
dwZBufferLow DWORD ?
dwZBufferHigh DWORD ?
dwZBufferBaseDest DWORD ?
dwZDestConstBitDepth DWORD ?
UNION
dwZDestConst DWORD ?
lpDDSZBufferDest LPDIRECTDRAWSURFACE ?
ENDS
dwZSrcConstBitDepth DWORD ?
UNION
dwZSrcConst DWORD ?
lpDDSZBufferSrc LPDIRECTDRAWSURFACE ?
ENDS
dwAlphaEdgeBlendBitDepth DWORD ?
dwAlphaEdgeBlend DWORD ?
dwReserved DWORD ?
dwAlphaDestConstBitDepth DWORD ?
UNION
dwAlphaDestConst DWORD ?
lpDDSAlphaDest LPDIRECTDRAWSURFACE ?
ENDS
dwAlphaSrcConstBitDepth DWORD ?
UNION
dwAlphaSrcConst DWORD ?
lpDDSAlphaSrc LPDIRECTDRAWSURFACE ?
ENDS
UNION
dwFillColor DWORD ?
dwFillDepth DWORD ?
lpDDSPattern LPDIRECTDRAWSURFACE ?
ENDS
ddckDestColorkey DDCOLORKEY <>
ddckSrcColorkey DDCOLORKEY <>
DDBLTFX ENDS
DDSCAPS STRUC
dwCaps DWORD ?
DDSCAPS ENDS
DDCAPS STRUC
dwSize DWORD ?
dwCaps DWORD ?
dwCaps2 DWORD ?
dwCKeyCaps DWORD ?
dwFXCaps DWORD ?
dwFXAlphaCaps DWORD ?
dwPalCaps DWORD ?
dwSVCaps DWORD ?
dwAlphaBltConstBitDepths DWORD ?
dwAlphaBltPixelBitDepths DWORD ?
dwAlphaBltSurfaceBitDepths DWORD ?
dwAlphaOverlayConstBitDepths DWORD ?
dwAlphaOverlayPixelBitDepths DWORD ?
dwAlphaOverlaySurfaceBitDepths DWORD ?
dwZBufferBitDepths DWORD ?
dwVidMemTotal DWORD ?
dwVidMemFree DWORD ?
dwMaxVisibleOverlays DWORD ?
dwCurrVisibleOverlays DWORD ?
dwNumFourCCCodes DWORD ?
dwAlignBoundarySrc DWORD ?
dwAlignSizeSrc DWORD ?
dwAlignBoundaryDest DWORD ?
dwAlignSizeDest DWORD ?
dwAlignStrideAlign DWORD ?
dwRops DWORD 8 DUP (?)
ddsCaps DDSCAPS <>
dwMinOverlayStretch DWORD ?
dwMaxOverlayStretch DWORD ?
dwMinLiveVideoStretch DWORD ?
dwMaxLiveVideoStretch DWORD ?
dwMinHwCodecStretch DWORD ?
dwMaxHwCodecStretch DWORD ?
dwReserved1 DWORD ?
dwReserved2 DWORD ?
dwReserved3 DWORD ?
dwSVBCaps DWORD ?
dwSVBCKeyCaps DWORD ?
dwSVBFXCaps DWORD ?
dwSVBRops DWORD 8 DUP (?)
dwVSBCaps DWORD ?
dwVSBCKeyCaps DWORD ?
dwVSBFXCaps DWORD ?
dwVSBRops DWORD 8 DUP (?)
dwSSBCaps DWORD ?
dwSSBCKeyCaps DWORD ?
dwSSBFXCaps DWORD ?
dwSSBRops DWORD 8 DUP (?)
dwReserved4 DWORD ?
dwReserved5 DWORD ?
dwReserved6 DWORD ?
DDCAPS ENDS
DDOVERLAYFX STRUC
dwSize DWORD ?
dwAlphaEdgeBlendBitDepth DWORD ?
dwAlphaEdgeBlend DWORD ?
dwReserved DWORD ?
dwAlphaDestConstBitDepth DWORD ?
UNION
dwAlphaDestConst DWORD ?
lpDDSAlphaDest LPDIRECTDRAWSURFACE ?
ENDS
dwAlphaSrcConstBitDepth DWORD ?
UNION
dwAlphaSrcConst DWORD ?
lpDDSAlphaSrc LPDIRECTDRAWSURFACE ?
ENDS
dckDestColorkey DDCOLORKEY <>
dckSrcColorkey DDCOLORKEY <>
dwDDFX DWORD ?
dwFlags DWORD ?
DDOVERLAYFX ENDS
DDPIXELFORMAT STRUC
dwSize DWORD ?
dwFlags DWORD ?
dwFourCC DWORD ?
UNION
dwRGBBitCount DWORD ?
dwYUVBitCount DWORD ?
dwZBufferBitDepth DWORD ?
dwAlphaBitDepth DWORD ?
ENDS
UNION
dwRBitMask DWORD ?
dwYBitMask DWORD ?
ENDS
UNION
dwGBitMask DWORD ?
dwUBitMask DWORD ?
ENDS
UNION
dwBBitMask DWORD ?
dwVBitMask DWORD ?
ENDS
UNION
dwRGBAlphaBitMask DWORD ?
dwYUVAlphaBitMask DWORD ?
ENDS
DDPIXELFORMAT ENDS
DDSURFACEDESC STRUC
dwSize DWORD ?
dwFlags DWORD ?
dwHeight DWORD ?
dwWidth DWORD ?
lPitch DWORD ?
dwBackBufferCount DWORD ?
UNION
dwMipMapCount DWORD ?
dwZBufferBitDepth DWORD ?
dwRefreshRate DWORD ?
ENDS
dwAlphaBitDepth DWORD ?
dwReserved DWORD ?
lpSurface DWORD ?
ddckCKDestOverlay DDCOLORKEY <>
ddckCKDestBlt DDCOLORKEY <>
ddckCKSrcOverlay DDCOLORKEY <>
ddckCKSrcBlt DDCOLORKEY <>
ddpfPixelFormat DDPIXELFORMAT <>
ddsCaps DDSCAPS <>
DDSURFACEDESC ENDS
DDBLTBATCH STRUC
lprDest LPRECT ?
lpDDSSrc LPDIRECTDRAWSURFACE ?
lprSrc LPRECT ?
dwFlags DWORD ?
lpDDBltFx LPDDBLTFX ?
DDBLTBATCH ENDS
IDirectDrawVtbl STRUC
; IUnknown methods
STDMETHOD QueryInterface, :PTR IDirectDraw, :PTR, :PTR PTR
STDMETHOD AddRef, :PTR IDirectDraw
STDMETHOD Release, :PTR IDirectDraw
; IDirectDraw methods
STDMETHOD Compact, :PTR IDirectDraw
STDMETHOD CreateClipper, :PTR IDirectDraw, :DWORD, :PTR LPDIRECTDRAWCLIPPER, :PTR IUnknown
STDMETHOD CreatePalette, :PTR IDirectDraw, :DWORD, :LPPALETTEENTRY, :PTR LPDIRECTDRAWPALETTE, :PTR IUnknown
STDMETHOD CreateSurface, :PTR IDirectDraw, :LPDDSURFACEDESC, :PTR LPDIRECTDRAWSURFACE, :PTR IUnknown
STDMETHOD DuplicateSurface, :PTR IDirectDraw, :LPDIRECTDRAWSURFACE, :PTR LPDIRECTDRAWSURFACE
STDMETHOD EnumDisplayModes, :PTR IDirectDraw, :DWORD, :LPDDSURFACEDESC, :PTR , :PTR
STDMETHOD EnumSurfaces, :PTR IDirectDraw, :DWORD, :LPDDSURFACEDESC, :PTR , :PTR
STDMETHOD FlipToGDISurface, :PTR IDirectDraw
STDMETHOD GetCaps, :PTR IDirectDraw, :LPDDCAPS, :LPDDCAPS
STDMETHOD GetDisplayMode, :PTR IDirectDraw, :LPDDSURFACEDESC
STDMETHOD GetFourCCCodes, :PTR IDirectDraw, :PTR DWORD, :PTR DWORD
STDMETHOD GetGDISurface, :PTR IDirectDraw, :PTR LPDIRECTDRAWSURFACE
STDMETHOD GetMonitorFrequency, :PTR IDirectDraw, :DWORD
STDMETHOD GetScanLine, :PTR IDirectDraw, :DWORD
STDMETHOD GetVerticalBlankStatus, :PTR IDirectDraw, :PTR SWORD
STDMETHOD Initialize, :PTR IDirectDraw, :PTR GUID
STDMETHOD RestoreDisplayMode, :PTR IDirectDraw
STDMETHOD SetCooperativeLevel, :PTR IDirectDraw, :HWND, :DWORD
STDMETHOD SetDisplayMode, :PTR IDirectDraw, :DWORD, :DWORD, :DWORD
STDMETHOD WaitForVerticalBlank, :PTR IDirectDraw, :DWORD, :PTR
IDirectDrawVtbl ENDS
IDirectDrawPaletteVtbl STRUC
; IUnknown methods
STDMETHOD QueryInterface, :PTR IDirectDrawPalette, :PTR, :PTR PTR
STDMETHOD AddRef, :PTR IDirectDrawPalette
STDMETHOD Release, :PTR IDirectDrawPalette
; IDirectDrawPalette methods
STDMETHOD GetCaps, :PTR IDirectDrawPalette, :PTR DWORD
STDMETHOD GetEntries, :PTR IDirectDrawPalette, :DWORD, :DWORD, :DWORD, :LPPALETTEENTRY
STDMETHOD Initialize, :PTR IDirectDrawPalette, :LPDIRECTDRAW, :DWORD, :LPPALETTEENTRY
STDMETHOD SetEntries, :PTR IDirectDrawPalette, :DWORD, :DWORD, :DWORD, :LPPALETTEENTRY
IDirectDrawPaletteVtbl ENDS
IDirectDrawClipperVtbl STRUC
; IUnknown methods
STDMETHOD QueryInterface, :PTR IDirectDrawClipper, :PTR, :PTR PTR
STDMETHOD AddRef, :PTR IDirectDrawClipper
STDMETHOD Release, :PTR IDirectDrawClipper
; IDirectDrawClipper methods
STDMETHOD GetClipList, :PTR IDirectDrawClipper, :LPRECT, :LPRGNDATA, :PTR DWORD
STDMETHOD GetHWnd, :PTR IDirectDrawClipper, :PTR HWND
STDMETHOD Initialize, :PTR IDirectDrawClipper, :LPDIRECTDRAW, :DWORD
STDMETHOD IsClipListChanged, :PTR IDirectDrawClipper, :PTR SWORD
STDMETHOD SetClipList, :PTR IDirectDrawClipper, :LPRGNDATA, :DWORD
STDMETHOD SetHWnd, :PTR IDirectDrawClipper, :DWORD, :HWND
IDirectDrawClipperVtbl ENDS
IDirectDrawSurfaceVtbl STRUC
; IUnknown methods
STDMETHOD QueryInterface, :PTR IDirectDrawSurface, :PTR, :PTR PTR
STDMETHOD AddRef, :PTR IDirectDrawSurface
STDMETHOD Release, :PTR IDirectDrawSurface
; IDirectDrawSurface methods
STDMETHOD AddAttachedSurface, :PTR IDirectDrawSurface, :LPDIRECTDRAWSURFACE
STDMETHOD AddOverlayDirtyRect, :PTR IDirectDrawSurface, :LPRECT
STDMETHOD Blt, :PTR IDirectDrawSurface, :LPRECT, :LPDIRECTDRAWSURFACE, :LPRECT, :DWORD, :LPDDBLTFX
STDMETHOD BltBatch, :PTR IDirectDrawSurface, :LPDDBLTBATCH, :DWORD, :DWORD
STDMETHOD BltFast, :PTR IDirectDrawSurface, :DWORD, :DWORD, :LPDIRECTDRAWSURFACE, :LPRECT, :DWORD
STDMETHOD DeleteAttachedSurface, :PTR IDirectDrawSurface, :DWORD, :LPDIRECTDRAWSURFACE
STDMETHOD EnumAttachedSurfaces, :PTR IDirectDrawSurface, :PTR , :PTR
STDMETHOD EnumOverlayZOrders, :PTR IDirectDrawSurface, :DWORD, :PTR , :PTR
STDMETHOD Flip, :PTR IDirectDrawSurface, :LPDIRECTDRAWSURFACE, :DWORD
STDMETHOD GetAttachedSurface, :PTR IDirectDrawSurface, :LPDDSCAPS, :PTR LPDIRECTDRAWSURFACE
STDMETHOD GetBltStatus, :PTR IDirectDrawSurface, :DWORD
STDMETHOD GetCaps, :PTR IDirectDrawSurface, :LPDDSCAPS
STDMETHOD GetClipper, :PTR IDirectDrawSurface, :PTR LPDIRECTDRAWCLIPPER
STDMETHOD GetColorKey, :PTR IDirectDrawSurface, :DWORD, :LPDDCOLORKEY
STDMETHOD GetDC, :PTR IDirectDrawSurface, :PTR HDC
STDMETHOD GetFlipStatus, :PTR IDirectDrawSurface, :DWORD
STDMETHOD GetOverlayPosition, :PTR IDirectDrawSurface, :PTR DWORD, :PTR DWORD
STDMETHOD GetPalette, :PTR IDirectDrawSurface, :PTR LPDIRECTDRAWPALETTE
STDMETHOD GetPixelFormat, :PTR IDirectDrawSurface, :LPDDPIXELFORMAT
STDMETHOD GetSurfaceDesc, :PTR IDirectDrawSurface, :LPDDSURFACEDESC
STDMETHOD Initialize, :PTR IDirectDrawSurface, :LPDIRECTDRAW, :LPDDSURFACEDESC
STDMETHOD IsLost, :PTR IDirectDrawSurface
STDMETHOD mLock, :PTR IDirectDrawSurface, :LPRECT, :LPDDSURFACEDESC, :DWORD, :PTR
STDMETHOD ReleaseDC, :PTR IDirectDrawSurface, :HDC
STDMETHOD Restore, :PTR IDirectDrawSurface
STDMETHOD SetClipper, :PTR IDirectDrawSurface, :LPDIRECTDRAWCLIPPER
STDMETHOD SetColorKey, :PTR IDirectDrawSurface, :DWORD, :LPDDCOLORKEY
STDMETHOD SetOverlayPosition, :PTR IDirectDrawSurface, :SDWORD, :SDWORD
STDMETHOD SetPalette, :PTR IDirectDrawSurface, :LPDIRECTDRAWPALETTE
STDMETHOD Unlock, :PTR IDirectDrawSurface, :PTR
STDMETHOD UpdateOverlay, :PTR IDirectDrawSurface, :LPRECT, :LPDIRECTDRAWSURFACE, :LPRECT, :DWORD, :LPDDOVERLAYFX
STDMETHOD UpdateOverlayDisplay, :PTR IDirectDrawSurface, :DWORD
STDMETHOD UpdateOverlayZOrder, :PTR IDirectDrawSurface, :DWORD, :LPDIRECTDRAWSURFACE
IDirectDrawSurfaceVtbl ENDS
IDirectDraw STRUC
lpVtbl DWORD ?
IDirectDraw ENDS
IDirectDrawPalette STRUC
lpVtbl DWORD ?
IDirectDrawPalette ENDS
IDirectDrawClipper STRUC
lpVtbl DWORD ?
IDirectDrawClipper ENDS
IDirectDrawSurface STRUC
lpVtbl DWORD ?
IDirectDrawSurface ENDS
; Direct Draw Capability Flags
DDSD_CAPS EQU 000000001h
DDSD_HEIGHT EQU 000000002h
DDSD_WIDTH EQU 000000004h
DDSD_PITCH EQU 000000008h
DDSD_BACKBUFFERCOUNT EQU 000000020h
DDSD_ZBUFFERBITDEPTH EQU 000000040h
DDSD_ALPHABITDEPTH EQU 000000080h
DDSD_PIXELFORMAT EQU 000001000h
DDSD_CKDESTOVERLAY EQU 000002000h
DDSD_CKDESTBLT EQU 000004000h
DDSD_CKSRCOVERLAY EQU 000008000h
DDSD_CKSRCBLT EQU 000010000h
DDSD_MIPMAPCOUNT EQU 000020000h
DDSD_REFRESHRATE EQU 000040000h
DDSD_ALL EQU 00007f9eeh ; all input field are valid
; DIRECTDRAWSURFACE CAPABILITY FLAGS
DDSCAPS_3D EQU 000000001h
DDSCAPS_ALPHA EQU 000000002h
DDSCAPS_BACKBUFFER EQU 000000004h
DDSCAPS_COMPLEX EQU 000000008h
DDSCAPS_FLIP EQU 000000010h
DDSCAPS_FRONTBUFFER EQU 000000020h
DDSCAPS_OFFSCREENPLAIN EQU 000000040h
DDSCAPS_OVERLAY EQU 000000080h
DDSCAPS_PALETTE EQU 000000100h
DDSCAPS_PRIMARYSURFACE EQU 000000200h
DDSCAPS_PRIMARYSURFACELEFT EQU 000000400h
DDSCAPS_SYSTEMMEMORY EQU 000000800h
DDSCAPS_TEXTURE EQU 000001000h
DDSCAPS_3DDEVICE EQU 000002000h
DDSCAPS_VIDEOMEMORY EQU 000004000h
DDSCAPS_VISIBLE EQU 000008000h
DDSCAPS_WRITEONLY EQU 000010000h
DDSCAPS_ZBUFFER EQU 000020000h
DDSCAPS_OWNDC EQU 000040000h
DDSCAPS_LIVEVIDEO EQU 000080000h
DDSCAPS_HWCODEC EQU 000100000h
DDSCAPS_MODEX EQU 000200000h
DDSCAPS_MIPMAP EQU 000400000h
DDSCAPS_ALLOCONLOAD EQU 004000000h
; DIRECTDRAW DRIVER CAPABILITY FLAGS
DDCAPS_3D EQU 000000001h
DDCAPS_ALIGNBOUNDARYDEST EQU 000000002h
DDCAPS_ALIGNSIZEDEST EQU 000000004h
DDCAPS_ALIGNBOUNDARYSRC EQU 000000008h
DDCAPS_ALIGNSIZESRC EQU 000000010h
DDCAPS_ALIGNSTRIDE EQU 000000020h
DDCAPS_BLT EQU 000000040h
DDCAPS_BLTQUEUE EQU 000000080h
DDCAPS_BLTFOURCC EQU 000000100h
DDCAPS_BLTSTRETCH EQU 000000200h
DDCAPS_GDI EQU 000000400h
DDCAPS_OVERLAY EQU 000000800h
DDCAPS_OVERLAYCANTCLIP EQU 000001000h
DDCAPS_OVERLAYFOURCC EQU 000002000h
DDCAPS_OVERLAYSTRETCH EQU 000004000h
DDCAPS_PALETTE EQU 000008000h
DDCAPS_PALETTEVSYNC EQU 000010000h
DDCAPS_READSCANLINE EQU 000020000h
DDCAPS_STEREOVIEW EQU 000040000h
DDCAPS_VBI EQU 000080000h
DDCAPS_ZBLTS EQU 000100000h
DDCAPS_ZOVERLAYS EQU 000200000h
DDCAPS_COLORKEY EQU 000400000h
DDCAPS_ALPHA EQU 000800000h
DDCAPS_COLORKEYHWASSIST EQU 001000000h
DDCAPS_NOHARDWARE EQU 002000000h
DDCAPS_BLTCOLORFILL EQU 004000000h
DDCAPS_BANKSWITCHED EQU 008000000h
DDCAPS_BLTDEPTHFILL EQU 010000000h
DDCAPS_CANCLIP EQU 020000000h
DDCAPS_CANCLIPSTRETCHED EQU 040000000h
DDCAPS_CANBLTSYSMEM EQU 080000000h
; DIRECTDRAW FX ALPHA CAPABILITY FLAGS
DDFXALPHACAPS_BLTALPHAEDGEBLEND EQU 000000001h
DDFXALPHACAPS_BLTALPHAPIXELS EQU 000000002h
DDFXALPHACAPS_BLTALPHAPIXELSNEG EQU 000000004h
DDFXALPHACAPS_BLTALPHASURFACES EQU 000000008h
DDFXALPHACAPS_BLTALPHASURFACESNEG EQU 000000010h
DDFXALPHACAPS_OVERLAYALPHAEDGEBLEND EQU 000000020h
DDFXALPHACAPS_OVERLAYALPHAPIXELS EQU 000000040h
DDFXALPHACAPS_OVERLAYALPHAPIXELSNEG EQU 000000080h
DDFXALPHACAPS_OVERLAYALPHASURFACES EQU 000000100h
DDFXALPHACAPS_OVERLAYALPHASURFACESNEG EQU 000000200h
; DIRECTDRAW FX CAPABILITY FLAGS
DDFXCAPS_BLTARITHSTRETCHY EQU 000000020h
DDFXCAPS_BLTARITHSTRETCHYN EQU 000000010h
DDFXCAPS_BLTMIRRORLEFTRIGHT EQU 000000040h
DDFXCAPS_BLTMIRRORUPDOWN EQU 000000080h
DDFXCAPS_BLTROTATION EQU 000000100h
DDFXCAPS_BLTROTATION90 EQU 000000200h
DDFXCAPS_BLTSHRINKX EQU 000000400h
DDFXCAPS_BLTSHRINKXN EQU 000000800h
DDFXCAPS_BLTSHRINKY EQU 000001000h
DDFXCAPS_BLTSHRINKYN EQU 000002000h
DDFXCAPS_BLTSTRETCHX EQU 000004000h
DDFXCAPS_BLTSTRETCHXN EQU 000008000h
DDFXCAPS_BLTSTRETCHY EQU 000010000h
DDFXCAPS_BLTSTRETCHYN EQU 000020000h
DDFXCAPS_OVERLAYARITHSTRETCHY EQU 000040000h
DDFXCAPS_OVERLAYARITHSTRETCHYN EQU 000000008h
DDFXCAPS_OVERLAYSHRINKX EQU 000080000h
DDFXCAPS_OVERLAYSHRINKXN EQU 000100000h
DDFXCAPS_OVERLAYSHRINKY EQU 000200000h
DDFXCAPS_OVERLAYSHRINKYN EQU 000400000h
DDFXCAPS_OVERLAYSTRETCHX EQU 000800000h
DDFXCAPS_OVERLAYSTRETCHXN EQU 001000000h
DDFXCAPS_OVERLAYSTRETCHY EQU 002000000h
DDFXCAPS_OVERLAYSTRETCHYN EQU 004000000h
DDFXCAPS_OVERLAYMIRRORLEFTRIGHT EQU 008000000h
DDFXCAPS_OVERLAYMIRRORUPDOWN EQU 010000000h
; DIRECTDRAW STEREO VIEW CAPABILITIES
DDSVCAPS_ENIGMA EQU 000000001h
DDSVCAPS_FLICKER EQU 000000002h
DDSVCAPS_REDBLUE EQU 000000004h
DDSVCAPS_SPLIT EQU 000000008h
; DIRECTDRAWPALETTE CAPABILITIES
DDPCAPS_4BIT EQU 000000001h
DDPCAPS_8BITENTRIES EQU 000000002h
DDPCAPS_8BIT EQU 000000004h
DDPCAPS_INITIALIZE EQU 000000008h
DDPCAPS_PRIMARYSURFACE EQU 000000010h
DDPCAPS_PRIMARYSURFACELEFT EQU 000000020h
DDPCAPS_ALLOW256 EQU 000000040h
DDPCAPS_VSYNC EQU 000000080h
DDPCAPS_1BIT EQU 000000100h
DDPCAPS_2BIT EQU 000000200h
; DIRECTDRAW BITDEPTH CONSTANTS
DDBD_1 EQU 000004000h
DDBD_2 EQU 000002000h
DDBD_4 EQU 000001000h
DDBD_8 EQU 000000800h
DDBD_16 EQU 000000400h
DDBD_24 EQU 000000200h
DDBD_32 EQU 000000100h
; DIRECTDRAWSURFACE SET/GET COLOR KEY FLAGS
DDCKEY_COLORSPACE EQU 000000001h
DDCKEY_DESTBLT EQU 000000002h
DDCKEY_DESTOVERLAY EQU 000000004h
DDCKEY_SRCBLT EQU 000000008h
DDCKEY_SRCOVERLAY EQU 000000010h
; DIRECTDRAW COLOR KEY CAPABILITY FLAGS
DDCKEYCAPS_DESTBLT EQU 000000001h
DDCKEYCAPS_DESTBLTCLRSPACE EQU 000000002h
DDCKEYCAPS_DESTBLTCLRSPACEYUV EQU 000000004h
DDCKEYCAPS_DESTBLTYUV EQU 000000008h
DDCKEYCAPS_DESTOVERLAY EQU 000000010h
DDCKEYCAPS_DESTOVERLAYCLRSPACE EQU 000000020h
DDCKEYCAPS_DESTOVERLAYCLRSPACEYUV EQU 000000040h
DDCKEYCAPS_DESTOVERLAYONEACTIVE EQU 000000080h
DDCKEYCAPS_DESTOVERLAYYUV EQU 000000100h
DDCKEYCAPS_SRCBLT EQU 000000200h
DDCKEYCAPS_SRCBLTCLRSPACE EQU 000000400h
DDCKEYCAPS_SRCBLTCLRSPACEYUV EQU 000000800h
DDCKEYCAPS_SRCBLTYUV EQU 000001000h
DDCKEYCAPS_SRCOVERLAY EQU 000002000h
DDCKEYCAPS_SRCOVERLAYCLRSPACE EQU 000004000h
DDCKEYCAPS_SRCOVERLAYCLRSPACEYUV EQU 000008000h
DDCKEYCAPS_SRCOVERLAYONEACTIVE EQU 000010000h
DDCKEYCAPS_SRCOVERLAYYUV EQU 000020000h
DDCKEYCAPS_NOCOSTOVERLAY EQU 000040000h
; DIRECTDRAW PIXELFORMAT FLAGS
DDPF_ALPHAPIXELS EQU 000000001h
DDPF_ALPHA EQU 000000002h
DDPF_FOURCC EQU 000000004h
DDPF_PALETTEINDEXED4 EQU 000000008h
DDPF_PALETTEINDEXEDTO8 EQU 000000010h
DDPF_PALETTEINDEXED8 EQU 000000020h
DDPF_RGB EQU 000000040h
DDPF_COMPRESSED EQU 000000080h
DDPF_RGBTOYUV EQU 000000100h
DDPF_YUV EQU 000000200h
DDPF_ZBUFFER EQU 000000400h
DDPF_PALETTEINDEXED1 EQU 000000800h
DDPF_PALETTEINDEXED2 EQU 000001000h
; DIRECTDRAW ENUMSURFACES FLAGS
DDENUMSURFACES_ALL EQU 000000001h
DDENUMSURFACES_MATCH EQU 000000002h
DDENUMSURFACES_NOMATCH EQU 000000004h
DDENUMSURFACES_CANBECREATED EQU 000000008h
DDENUMSURFACES_DOESEXIST EQU 000000010h
; DIRECTDRAW ENUMDISPLAYMODES FLAGS
DDEDM_REFRESHRATES EQU 000000001h
; DIRECTDRAW SETCOOPERATIVELEVEL FLAGS
DDSCL_FULLSCREEN EQU 000000001h
DDSCL_ALLOWREBOOT EQU 000000002h
DDSCL_NOWINDOWCHANGES EQU 000000004h
DDSCL_NORMAL EQU 000000008h
DDSCL_EXCLUSIVE EQU 000000010h
DDSCL_ALLOWMODEX EQU 000000040h
; DIRECTDRAW BLT FLAGS
DDBLT_ALPHADEST EQU 000000001h
DDBLT_ALPHADESTCONSTOVERRIDE EQU 000000002h
DDBLT_ALPHADESTNEG EQU 000000004h
DDBLT_ALPHADESTSURFACEOVERRIDE EQU 000000008h
DDBLT_ALPHAEDGEBLEND EQU 000000010h
DDBLT_ALPHASRC EQU 000000020h
DDBLT_ALPHASRCCONSTOVERRIDE EQU 000000040h
DDBLT_ALPHASRCNEG EQU 000000080h
DDBLT_ALPHASRCSURFACEOVERRIDE EQU 000000100h
DDBLT_ASYNC EQU 000000200h
DDBLT_COLORFILL EQU 000000400h
DDBLT_DDFX EQU 000000800h
DDBLT_DDROPS EQU 000001000h
DDBLT_KEYDEST EQU 000002000h
DDBLT_KEYDESTOVERRIDE EQU 000004000h
DDBLT_KEYSRC EQU 000008000h
DDBLT_KEYSRCOVERRIDE EQU 000010000h
DDBLT_ROP EQU 000020000h
DDBLT_ROTATIONANGLE EQU 000040000h
DDBLT_ZBUFFER EQU 000080000h
DDBLT_ZBUFFERDESTCONSTOVERRIDE EQU 000100000h
DDBLT_ZBUFFERDESTOVERRIDE EQU 000200000h
DDBLT_ZBUFFERSRCCONSTOVERRIDE EQU 000400000h
DDBLT_ZBUFFERSRCOVERRIDE EQU 000800000h
DDBLT_WAIT EQU 001000000h
DDBLT_DEPTHFILL EQU 002000000h
; BLTFAST FLAGS
DDBLTFAST_NOCOLORKEY EQU 000000000h
DDBLTFAST_SRCCOLORKEY EQU 000000001h
DDBLTFAST_DESTCOLORKEY EQU 000000002h
DDBLTFAST_WAIT EQU 000000010h
; FLIP FLAGS
DDFLIP_WAIT EQU 000000001h
; DIRECTDRAW SURFACE OVERLAY FLAGS
DDOVER_ALPHADEST EQU 000000001h
DDOVER_ALPHADESTCONSTOVERRIDE EQU 000000002h
DDOVER_ALPHADESTNEG EQU 000000004h
DDOVER_ALPHADESTSURFACEOVERRIDE EQU 000000008h
DDOVER_ALPHAEDGEBLEND EQU 000000010h
DDOVER_ALPHASRC EQU 000000020h
DDOVER_ALPHASRCCONSTOVERRIDE EQU 000000040h
DDOVER_ALPHASRCNEG EQU 000000080h
DDOVER_ALPHASRCSURFACEOVERRIDE EQU 000000100h
DDOVER_HIDE EQU 000000200h
DDOVER_KEYDEST EQU 000000400h
DDOVER_KEYDESTOVERRIDE EQU 000000800h
DDOVER_KEYSRC EQU 000001000h
DDOVER_KEYSRCOVERRIDE EQU 000002000h
DDOVER_SHOW EQU 000004000h
DDOVER_ADDDIRTYRECT EQU 000008000h
DDOVER_REFRESHDIRTYRECTS EQU 000010000h
DDOVER_REFRESHALL EQU 000020000h
DDOVER_DDFX EQU 000080000h
; DIRECTDRAWSURFACE LOCK FLAGS
DDLOCK_SURFACEMEMORYPTR EQU 000000000h
DDLOCK_WAIT EQU 000000001h
DDLOCK_EVENT EQU 000000002h
DDLOCK_READONLY EQU 000000010h
DDLOCK_WRITEONLY EQU 000000020h
; DIRECTDRAWSURFACE BLT FX FLAGS
DDBLTFX_ARITHSTRETCHY EQU 000000001h
DDBLTFX_MIRRORLEFTRIGHT EQU 000000002h
DDBLTFX_MIRRORUPDOWN EQU 000000004h
DDBLTFX_NOTEARING EQU 000000008h
DDBLTFX_ROTATE180 EQU 000000010h
DDBLTFX_ROTATE270 EQU 000000020h
DDBLTFX_ROTATE90 EQU 000000040h
DDBLTFX_ZBUFFERRANGE EQU 000000080h
DDBLTFX_ZBUFFERBASEDEST EQU 000000100h
; DIRECTDRAWSURFACE OVERLAY FX FLAGS
DDOVERFX_ARITHSTRETCHY EQU 000000001h
DDOVERFX_MIRRORLEFTRIGHT EQU 000000002h
DDOVERFX_MIRRORUPDOWN EQU 000000004h
; DIRECTDRAW WAITFORVERTICALBLANK FLAGS
DDWAITVB_BLOCKBEGIN EQU 000000001h
DDWAITVB_BLOCKBEGINEVENT EQU 000000002h
DDWAITVB_BLOCKEND EQU 000000004h
; DIRECTDRAW GETFLIPSTATUS FLAGS
DDGFS_CANFLIP EQU 000000001h
DDGFS_ISFLIPDONE EQU 000000002h
; DIRECTDRAW GETBLTSTATUS FLAGS
DDGBS_CANBLT EQU 000000001h
DDGBS_ISBLTDONE EQU 000000002h
; DIRECTDRAW ENUMOVERLAYZORDER FLAGS
DDENUMOVERLAYZ_BACKTOFRONT EQU 000000000h
DDENUMOVERLAYZ_FRONTTOBACK EQU 000000001h
; DIRECTDRAW UPDATEOVERLAYZORDER FLAGS
DDOVERZ_SENDTOFRONT EQU 000000000h
DDOVERZ_SENDTOBACK EQU 000000001h
DDOVERZ_MOVEFORWARD EQU 000000002h
DDOVERZ_MOVEBACKWARD EQU 000000003h
DDOVERZ_INSERTINFRONTOF EQU 000000004h
DDOVERZ_INSERTINBACKOF EQU 000000005h
; DIRECTDRAW RETURN CODES
; Issued by: DirectDraw Commands and all callbacks
DD_OK EQU 0 ; Status is OK
; DIRECTDRAW ENUMCALLBACK RETURN VALUES
DDENUMRET_CANCEL EQU 0 ; stop the enumeration
DDENUMRET_OK EQU 1 ; continue the enumeration
; DIRECTDRAW ERRORS
DDERR_ALREADYINITIALIZED EQU 088760005h
DDERR_CANNOTATTACHSURFACE EQU 08876000ah
DDERR_CANNOTDETACHSURFACE EQU 088760014h
DDERR_CURRENTLYNOTAVAIL EQU 088760028h
DDERR_EXCEPTION EQU 088760037h
DDERR_GENERIC EQU 080004005h
DDERR_HEIGHTALIGN EQU 08876005ah
DDERR_INCOMPATIBLEPRIMARY EQU 08876005fh
DDERR_INVALIDCAPS EQU 088760064h
DDERR_INVALIDCLIPLIST EQU 08876006eh
DDERR_INVALIDMODE EQU 088760078h
DDERR_INVALIDOBJECT EQU 088760082h
DDERR_INVALIDPARAMS EQU 080070057h
DDERR_INVALIDPIXELFORMAT EQU 088760091h
DDERR_INVALIDRECT EQU 088760096h
DDERR_LOCKEDSURFACES EQU 0887600a0h
DDERR_NO3D EQU 0887600aah
DDERR_NOALPHAHW EQU 0887600b4h
DDERR_NOCLIPLIST EQU 0887600cdh
DDERR_NOCOLORCONVHW EQU 0887600d2h
DDERR_NOCOOPERATIVELEVELSET EQU 0887600d4h
DDERR_NOCOLORKEY EQU 0887600d7h
DDERR_NOCOLORKEYHW EQU 0887600dch
DDERR_NODIRECTDRAWSUPPORT EQU 0887600deh
DDERR_NOEXCLUSIVEMODE EQU 0887600e1h
DDERR_NOFLIPHW EQU 0887600e6h
DDERR_NOGDI EQU 0887600f0h
DDERR_NOMIRRORHW EQU 0887600fah
DDERR_NOTFOUND EQU 0887600ffh
DDERR_NOOVERLAYHW EQU 088760104h
DDERR_NORASTEROPHW EQU 088760118h
DDERR_NOROTATIONHW EQU 088760122h
DDERR_NOSTRETCHHW EQU 088760136h
DDERR_NOT4BITCOLOR EQU 08876013ch
DDERR_NOT4BITCOLORINDEX EQU 08876013dh
DDERR_NOT8BITCOLOR EQU 088760140h
DDERR_NOTEXTUREHW EQU 08876014ah
DDERR_NOVSYNCHW EQU 08876014fh
DDERR_NOZBUFFERHW EQU 088760154h
DDERR_NOZOVERLAYHW EQU 08876015eh
DDERR_OUTOFCAPS EQU 088760168h
DDERR_OUTOFMEMORY EQU 08007000eh
DDERR_OUTOFVIDEOMEMORY EQU 08876017ch
DDERR_OVERLAYCANTCLIP EQU 08876017eh
DDERR_OVERLAYCOLORKEYONLYONEACTIVE EQU 088760180h
DDERR_PALETTEBUSY EQU 088760183h
DDERR_COLORKEYNOTSET EQU 088760190h
DDERR_SURFACEALREADYATTACHED EQU 08876019ah
DDERR_SURFACEALREADYDEPENDENT EQU 0887601a4h
DDERR_SURFACEBUSY EQU 0887601aeh
DDERR_CANTLOCKSURFACE EQU 0887601b3h
DDERR_SURFACEISOBSCURED EQU 0887601b8h
DDERR_SURFACELOST EQU 0887601c2h
DDERR_SURFACENOTATTACHED EQU 0887601cch
DDERR_TOOBIGHEIGHT EQU 0887601d6h
DDERR_TOOBIGSIZE EQU 0887601e0h
DDERR_TOOBIGWIDTH EQU 0887601eah
DDERR_UNSUPPORTED EQU 080004001h
DDERR_UNSUPPORTEDFORMAT EQU 0887601feh
DDERR_UNSUPPORTEDMASK EQU 088760208h
DDERR_VERTICALBLANKINPROGRESS EQU 088760219h
DDERR_WASSTILLDRAWING EQU 08876021ch
DDERR_XALIGN EQU 088760230h
DDERR_INVALIDDIRECTDRAWGUID EQU 088760231h
DDERR_DIRECTDRAWALREADYCREATED EQU 088760232h
DDERR_NODIRECTDRAWHW EQU 088760233h
DDERR_PRIMARYSURFACEALREADYEXISTS EQU 088760234h
DDERR_NOEMULATION EQU 088760235h
DDERR_REGIONTOOSMALL EQU 088760236h
DDERR_CLIPPERISUSINGHWND EQU 088760237h
DDERR_NOCLIPPERATTACHED EQU 088760238h
DDERR_NOHWND EQU 088760239h
DDERR_HWNDSUBCLASSED EQU 08876023ah
DDERR_HWNDALREADYSET EQU 08876023bh
DDERR_NOPALETTEATTACHED EQU 08876023ch
DDERR_NOPALETTEHW EQU 08876023dh
DDERR_BLTFASTCANTCLIP EQU 08876023eh
DDERR_NOBLTHW EQU 08876023fh
DDERR_NODDROPSHW EQU 088760240h
DDERR_OVERLAYNOTVISIBLE EQU 088760241h
DDERR_NOOVERLAYDEST EQU 088760242h
DDERR_INVALIDPOSITION EQU 088760243h
DDERR_NOTAOVERLAYSURFACE EQU 088760244h
DDERR_EXCLUSIVEMODEALREADYSET EQU 088760245h
DDERR_NOTFLIPPABLE EQU 088760246h
DDERR_CANTDUPLICATE EQU 088760247h
DDERR_NOTLOCKED EQU 088760248h
DDERR_CANTCREATEDC EQU 088760249h
DDERR_NODC EQU 08876024ah
DDERR_WRONGMODE EQU 08876024bh
DDERR_IMPLICITLYCREATED EQU 08876024ch
DDERR_NOTPALETTIZED EQU 08876024dh
DDERR_UNSUPPORTEDMODE EQU 08876024eh
DDERR_NOMIPMAPHW EQU 08876024fh
DDERR_INVALIDSURFACETYPE EQU 088760250h
DDERR_DCALREADYCREATED EQU 08876026ch
DDERR_CANTPAGELOCK EQU 088760280h
DDERR_CANTPAGEUNLOCK EQU 088760294h
DDERR_NOTPAGELOCKED EQU 0887602a8h
DDERR_NOTINITIALIZED EQU 0800401f0h
; DDRAW Demo ;
; 本人初学win32汇编不久,对其并不是太熟,当然学习汇编仅是为了学破解,
;学破解原来的目的是想自己做外挂,当然我也正在跨出这一步,只是基础太差,不知
;要到何能马月才有所成。
; 本程序主要是用汇编实现了DirectDraw的窗口化。在写这个程序时在网上查了
;很久似乎并没有用WIN32写的窗口模式的DirectDraw程序,所以只有边学习,边摸索,
;大家都知道很多游戏是全屏的。并没有提供窗口化,为了对游戏进行一些辅助性的修改
;实现窗口化是很有必要的,那么如果有人想用WIN32对游戏进行修改,那么可以共同探讨
;一下,本程序还存在一些不足之处,请指正,不过总体方向没错。
; 下一篇我将用WIN32实现全屏和窗口化之间的切换。请大家鼓力一下小弟。; Author : Jacksheng ;
;---------------------------------------;
; View with TAB size 8
TITLE WIN32ASM EXAMPLE
.486
.MODEL FLAT, STDCALL
option casemap :none
;-----------------------------------------------------------;
; WIN32ASM / DDRAW DEMO ;
;-----------------------------------------------------------;
INCLUDE windows.inc
INCLUDE gdi32.inc
INCLUDE kernel32.inc
INCLUDE user32.inc
INCLUDE ddraw.inc
INCLUDELIB gdi32.lib
INCLUDELIB kernel32.lib
INCLUDELIB user32.lib
INCLUDELIB ddraw.lib
ICO_MAIN equ 1000h
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ;对MESSAGEBOX进行宏定义
FATAL MACRO msg
LOCAL @@msg
.DATA
@@msg db msg, 0
.CODE
INVOKE MessageBox, hWinMain, ADDR @@msg, ADDR szDisplayName, MB_OK
INVOKE ExitProcess, 0
ENDM
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ;对色进行宏定义
RGB macro red,green,blue
xor eax,eax
mov ah,blue
shl eax,8
mov ah,green
mov al,red
endm
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data?
hInstance dd ?
hWinMain dd ?
stRt RECT <?>
stPoint POINT <?>
stPoint2 POINT <?>
lpDD LPDIRECTDRAW ? ; DDraw object
lpDDSPrimary LPDIRECTDRAWSURFACE ? ; DDraw primary surface
lpDDSStore LPDIRECTDRAWSURFACE ?
ddsd DDSURFACEDESC <?> ; DDraw surface descriptor
ddscaps DDSCAPS <?> ; DDraw capabilities
pcClipper LPDIRECTDRAWCLIPPER ?
@hDc HDC ?
stFx DDBLTFX <?>
.const
szCaptionMain db 'My first Window !',0
szText db 'Win32 Assembly, Simple and powerful !',0
szClassName db "DDRAW Plasma Demo", 0 ; class name
szDisplayName EQU <szClassName> ; window name
szTest db "This is a stinky App",0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; // old DirectDraw Initialization stuff.
;// Set a window mode DirectDraw Display.
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_Init proc
invoke DirectDrawCreate,NULL,ADDR lpDD,NULL ;建对象
.if eax !=DD_OK
FATAL "Failed to create directdraw object!"
.endif
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DDINVOKE SetCooperativeLevel, lpDD, NULL, DDSCL_NORMAL ;建控制级非独占模式
.IF eax != DD_OK
FATAL "Couldn't set DirectDraw cooperative level"
.ENDIF
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
invoke RtlZeroMemory,addr ddsd,sizeof ddsd
mov [ddsd.dwSize], sizeof DDSURFACEDESC
mov [ddsd.dwFlags], DDSD_CAPS
mov [ddsd.ddsCaps.dwCaps], DDSCAPS_PRIMARYSURFACE
DDINVOKE CreateSurface, lpDD, ADDR ddsd, ADDR lpDDSPrimary, NULL ;建主表面
.IF eax != DD_OK
FATAL "Couldn't create primary surface"
.ENDIF
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
mov [ddsd.dwSize], sizeof DDSURFACEDESC
mov [ddsd.dwFlags], DDSD_CAPS or DDSD_WIDTH or DDSD_HEIGHT
mov [ddsd.ddsCaps.dwCaps], DDSCAPS_OFFSCREENPLAIN OR DDSCAPS_3DDEVICE
mov [ddsd.dwWidth],800
mov [ddsd.dwHeight],600
DDINVOKE CreateSurface, lpDD, ADDR ddsd, ADDR lpDDSStore, NULL ;建后台表面
.IF eax != DD_OK
FATAL "Couldn't create store surface"
.ENDIF
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DDINVOKE CreateClipper, lpDD, 0, ADDR pcClipper, NULL ;设裁剪器
.IF eax != DD_OK
FATAL "Couldn't create Clipper "
.ENDIF
DDCINVOKE SetHWnd,pcClipper, 0, hWinMain
.IF eax != DD_OK
DDCINVOKE Release,pcClipper
FATAL "Failed to create primary surface"
.ENDIF
DDSINVOKE SetClipper,lpDDSPrimary,pcClipper
.IF eax != DD_OK
DDCINVOKE Release,pcClipper
FATAL "Failed to create SetClipper primary surface"
.ENDIF
ret
_Init endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; // Load images from offscteen buffer to primary buffer
; // and for display.
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_DisPlay proc
push 0
pop stPoint.x
push 0
pop stPoint.y
invoke ClientToScreen,hWinMain,addr stPoint ;get the client area on the desktop by using this line.
xor eax,eax
mov eax,stPoint.x
mov stRt.left,eax
add eax,800
mov stRt.right,eax
mov eax,stPoint.y
mov stRt.top,eax
add eax,600
mov stRt.bottom,eax
.while TRUE
DDSINVOKE Blt,lpDDSPrimary,addr stRt, lpDDSStore,NULL,DDBLT_WAIT,NULL
.if eax == DD_OK
;ret
.BREAK
.elseif eax == DDERR_SURFACELOST
DDSINVOKE Restore, lpDDSPrimary
DDSINVOKE Restore, lpDDSStore
.elseif eax !=DDERR_WASSTILLDRAWING
ret
;FATAL "Couldn't lock surface"
.endif
.endw
ret
_DisPlay endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; a test:// The conclusion is: Under no circumstance, draw directly to
; primary Surface!// It doesn't work that way.// ...// ...
; This is just a simple test function. It has shit use in this
; project.
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_TestDraw proc pointx,pointy
;local @hDc:HDC //要设为全局变量才行.
local @Point:POINT
local @Rect:RECT
mov eax,pointx
mov @Point.x,eax
sub eax,50
mov @Rect.left,eax
add eax,100
mov @Rect.right,eax
mov eax,pointy
mov @Point.y,eax
sub eax,50
mov @Rect.top,eax
add eax,100
mov @Rect.bottom,eax
DDSINVOKE GetDC,lpDDSStore,addr @hDc
.if eax!=DD_OK
ret
.else
invoke ClientToScreen,hWinMain,addr @Point ;坐标转换即相对转为绝对因DIRECTXDRAW需要
RGB 255,255,0
invoke SetTextColor,@hDc,eax
invoke TextOut,@hDc, 20, 20,addr szText, sizeof szText
invoke Ellipse,@hDc,@Rect.left,@Rect.top,@Rect.right,@Rect.bottom
DDSINVOKE ReleaseDC,lpDDSStore,@hDc
.endif
ret
_TestDraw endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; clear both off csreen buffer and primary buffer.
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_Clear proc
mov eax,sizeof stFx
mov stFx.dwSize,eax
mov stFx.dwFillColor,0
.while TRUE
DDSINVOKE Blt,lpDDSPrimary,NULL,NULL,NULL,DDBLT_COLORFILL,addr stFx
.if eax == DD_OK
.BREAK
.elseif eax == DDERR_SURFACELOST
DDSINVOKE Restore, lpDDSPrimary
.elseif eax !=DDERR_WASSTILLDRAWING
.BREAK
.endif
.endw
.while TRUE
DDSINVOKE Blt,lpDDSStore,NULL,NULL,NULL,DDBLT_COLORFILL,addr stFx
.if eax == DD_OK
.BREAK
.elseif eax == DDERR_SURFACELOST
DDSINVOKE Restore, lpDDSStore
.elseif eax !=DDERR_WASSTILLDRAWING
.BREAK
.endif
.endw
ret
_Clear endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; // make sure all things are terminated and set to NULL
;// when application ends.
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_Terminate proc
_Terminate endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 窗口过程
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcWinMain proc uses ebx edi esi,hWnd,uMsg,wParam,lParam
local @stPs:PAINTSTRUCT
local @stRect:RECT
mov eax,uMsg
;********************************************************************
.if eax== WM_LBUTTONDOWN
mov eax,lParam
and eax,0FFFFh
mov stPoint2.x,eax
mov eax,lParam
shr eax,16
mov stPoint2.y,eax
;invoke GetCursorPos,addr stPoint2
invoke _Clear
invoke _TestDraw,stPoint2.x,stPoint2.y
invoke _DisPlay
;********************************************************************
.elseif eax == WM_CLOSE
FATAL "Please accept Quit!"
invoke DestroyWindow,hWinMain
invoke PostQuitMessage,NULL
;********************************************************************
.else
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.endif
;********************************************************************
xor eax,eax
ret
_ProcWinMain endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_WinMain proc
local @stWndClass:WNDCLASSEX
local @stMsg:MSG
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke RtlZeroMemory,addr @stWndClass,sizeof @stWndClass
;********************************************************************
; 注册窗口类
;********************************************************************
invoke LoadIcon,NULL,IDI_INFORMATION
mov @stWndClass.hIcon,eax
invoke LoadCursor,0,IDC_ARROW
mov @stWndClass.hCursor,eax
push hInstance
pop @stWndClass.hInstance
mov @stWndClass.cbSize,sizeof WNDCLASSEX
mov @stWndClass.style,CS_HREDRAW or CS_VREDRAW
mov @stWndClass.lpfnWndProc,offset _ProcWinMain
INVOKE GetStockObject, BLACK_BRUSH
;mov [wc.hbrBackground], eax
mov @stWndClass.hbrBackground,eax;COLOR_WINDOW + 1
mov @stWndClass.lpszClassName,offset szClassName
invoke RegisterClassEx,addr @stWndClass
;********************************************************************
; 建立并显示窗口
;********************************************************************
invoke CreateWindowEx,WS_EX_CLIENTEDGE,\
offset szClassName,offset szCaptionMain,\
WS_OVERLAPPEDWINDOW,\
100,100,800,600,\
NULL,NULL,hInstance,NULL
mov hWinMain,eax
invoke _Init
invoke ShowWindow,hWinMain,SW_SHOWNORMAL
invoke UpdateWindow,hWinMain
;********************************************************************
; 消息循环
;********************************************************************
.while TRUE
invoke GetMessage,addr @stMsg,NULL,0,0
.break .if eax == 0
invoke TranslateMessage,addr @stMsg
invoke DispatchMessage,addr @stMsg
.endw
ret
_WinMain endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
call _WinMain
invoke ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end start
DDRAW.INC这个文件主要是参考 Ewald Snel 这位牛人的.并做了些修改.
;---------------------------------------;
; DDRAW include file ;
; ;
; Author : Ewald Snel ;
; Copyright (C) 1999, Diamond Crew ;
; ;
; http://here.is/diamond/ ;
;---------------------------------------;
STDMETHOD MACRO name, argl :VARARG
LOCAL @tmp_a
LOCAL @tmp_b
@tmp_a TYPEDEF PROTO argl
@tmp_b TYPEDEF PTR @tmp_a
name @tmp_b ?
ENDM
DDINVOKE MACRO func, this, arglist :VARARG
mov eax , [this]
mov eax , [eax]
IFB <arglist>
INVOKE [IDirectDrawVtbl. func][eax], this
ELSE
INVOKE [IDirectDrawVtbl. func][eax], this, arglist
ENDIF
ENDM
DDSINVOKE MACRO func, this, arglist :VARARG
mov eax , [this]
mov eax , [eax]
IFB <arglist>
INVOKE [IDirectDrawSurfaceVtbl. func][eax], this
ELSE
INVOKE [IDirectDrawSurfaceVtbl. func][eax], this, arglist
ENDIF
ENDM
DDCINVOKE MACRO func, this, arglist :VARARG
mov eax , [this]
mov eax , [eax]
IFB <arglist>
INVOKE [IDirectDrawClipperVtbl. func][eax], this
ELSE
INVOKE [IDirectDrawClipperVtbl. func][eax], this, arglist
ENDIF
;这一段是本人参考着新加的.为建窗口模式的需要.
ENDM
DirectDrawCreate PROTO :DWORD, :DWORD, :DWORD
DirectDrawCreateClipper PROTO :DWORD, :DWORD, :DWORD
DirectDrawEnumerateA PROTO :DWORD, :DWORD
DirectDrawEnumerate EQU <DirectDrawEnumerateA>
EXTERNDEF C CLSID_DirectDraw:GUID
EXTERNDEF C CLSID_DirectDrawClipper:GUID
EXTERNDEF C IID_IDirectDraw:GUID
EXTERNDEF C IID_IDirectDrawSurface:GUID
EXTERNDEF C IID_IDirectDrawPalette:GUID
EXTERNDEF C IID_IDirectDrawClipper:GUID
LPDIRECTDRAW TYPEDEF PTR IDirectDraw
LPDIRECTDRAWSURFACE TYPEDEF PTR IDirectDrawSurface
LPDIRECTDRAWPALETTE TYPEDEF PTR IDirectDrawPalette
LPDIRECTDRAWCLIPPER TYPEDEF PTR IDirectDrawClipper
LPDDFXROP TYPEDEF PTR DDFXROP
LPDDSURFACEDESC TYPEDEF PTR DDSURFACEDESC
LPDDCAPS TYPEDEF PTR DDCAPS
LPDDBLTFX TYPEDEF PTR DDBLTFX
LPDDSCAPS TYPEDEF PTR DDSCAPS
LPDDCOLORKEY TYPEDEF PTR DDCOLORKEY
LPDDOVERLAYFX TYPEDEF PTR DDOVERLAYFX
LPDDPIXELFORMAT TYPEDEF PTR DDPIXELFORMAT
LPDDBLTBATCH TYPEDEF PTR DDBLTBATCH
; windows defines
LPRECT TYPEDEF PTR RECT
LPPALETTEENTRY TYPEDEF PTR PALETTEENTRY
LPRGNDATA TYPEDEF PTR RGNDATA
DDCOLORKEY STRUC
dwColorSpaceLowValue DWORD ?
dwColorSpaceHighValue DWORD ?
DDCOLORKEY ENDS
DDBLTFX STRUC
dwSize DWORD ?
dwDDFX DWORD ?
dwROP DWORD ?
dwDDROP DWORD ?
dwRotationAngle DWORD ?
dwZBufferOpCode DWORD ?
dwZBufferLow DWORD ?
dwZBufferHigh DWORD ?
dwZBufferBaseDest DWORD ?
dwZDestConstBitDepth DWORD ?
UNION
dwZDestConst DWORD ?
lpDDSZBufferDest LPDIRECTDRAWSURFACE ?
ENDS
dwZSrcConstBitDepth DWORD ?
UNION
dwZSrcConst DWORD ?
lpDDSZBufferSrc LPDIRECTDRAWSURFACE ?
ENDS
dwAlphaEdgeBlendBitDepth DWORD ?
dwAlphaEdgeBlend DWORD ?
dwReserved DWORD ?
dwAlphaDestConstBitDepth DWORD ?
UNION
dwAlphaDestConst DWORD ?
lpDDSAlphaDest LPDIRECTDRAWSURFACE ?
ENDS
dwAlphaSrcConstBitDepth DWORD ?
UNION
dwAlphaSrcConst DWORD ?
lpDDSAlphaSrc LPDIRECTDRAWSURFACE ?
ENDS
UNION
dwFillColor DWORD ?
dwFillDepth DWORD ?
lpDDSPattern LPDIRECTDRAWSURFACE ?
ENDS
ddckDestColorkey DDCOLORKEY <>
ddckSrcColorkey DDCOLORKEY <>
DDBLTFX ENDS
DDSCAPS STRUC
dwCaps DWORD ?
DDSCAPS ENDS
DDCAPS STRUC
dwSize DWORD ?
dwCaps DWORD ?
dwCaps2 DWORD ?
dwCKeyCaps DWORD ?
dwFXCaps DWORD ?
dwFXAlphaCaps DWORD ?
dwPalCaps DWORD ?
dwSVCaps DWORD ?
dwAlphaBltConstBitDepths DWORD ?
dwAlphaBltPixelBitDepths DWORD ?
dwAlphaBltSurfaceBitDepths DWORD ?
dwAlphaOverlayConstBitDepths DWORD ?
dwAlphaOverlayPixelBitDepths DWORD ?
dwAlphaOverlaySurfaceBitDepths DWORD ?
dwZBufferBitDepths DWORD ?
dwVidMemTotal DWORD ?
dwVidMemFree DWORD ?
dwMaxVisibleOverlays DWORD ?
dwCurrVisibleOverlays DWORD ?
dwNumFourCCCodes DWORD ?
dwAlignBoundarySrc DWORD ?
dwAlignSizeSrc DWORD ?
dwAlignBoundaryDest DWORD ?
dwAlignSizeDest DWORD ?
dwAlignStrideAlign DWORD ?
dwRops DWORD 8 DUP (?)
ddsCaps DDSCAPS <>
dwMinOverlayStretch DWORD ?
dwMaxOverlayStretch DWORD ?
dwMinLiveVideoStretch DWORD ?
dwMaxLiveVideoStretch DWORD ?
dwMinHwCodecStretch DWORD ?
dwMaxHwCodecStretch DWORD ?
dwReserved1 DWORD ?
dwReserved2 DWORD ?
dwReserved3 DWORD ?
dwSVBCaps DWORD ?
dwSVBCKeyCaps DWORD ?
dwSVBFXCaps DWORD ?
dwSVBRops DWORD 8 DUP (?)
dwVSBCaps DWORD ?
dwVSBCKeyCaps DWORD ?
dwVSBFXCaps DWORD ?
dwVSBRops DWORD 8 DUP (?)
dwSSBCaps DWORD ?
dwSSBCKeyCaps DWORD ?
dwSSBFXCaps DWORD ?
dwSSBRops DWORD 8 DUP (?)
dwReserved4 DWORD ?
dwReserved5 DWORD ?
dwReserved6 DWORD ?
DDCAPS ENDS
DDOVERLAYFX STRUC
dwSize DWORD ?
dwAlphaEdgeBlendBitDepth DWORD ?
dwAlphaEdgeBlend DWORD ?
dwReserved DWORD ?
dwAlphaDestConstBitDepth DWORD ?
UNION
dwAlphaDestConst DWORD ?
lpDDSAlphaDest LPDIRECTDRAWSURFACE ?
ENDS
dwAlphaSrcConstBitDepth DWORD ?
UNION
dwAlphaSrcConst DWORD ?
lpDDSAlphaSrc LPDIRECTDRAWSURFACE ?
ENDS
dckDestColorkey DDCOLORKEY <>
dckSrcColorkey DDCOLORKEY <>
dwDDFX DWORD ?
dwFlags DWORD ?
DDOVERLAYFX ENDS
DDPIXELFORMAT STRUC
dwSize DWORD ?
dwFlags DWORD ?
dwFourCC DWORD ?
UNION
dwRGBBitCount DWORD ?
dwYUVBitCount DWORD ?
dwZBufferBitDepth DWORD ?
dwAlphaBitDepth DWORD ?
ENDS
UNION
dwRBitMask DWORD ?
dwYBitMask DWORD ?
ENDS
UNION
dwGBitMask DWORD ?
dwUBitMask DWORD ?
ENDS
UNION
dwBBitMask DWORD ?
dwVBitMask DWORD ?
ENDS
UNION
dwRGBAlphaBitMask DWORD ?
dwYUVAlphaBitMask DWORD ?
ENDS
DDPIXELFORMAT ENDS
DDSURFACEDESC STRUC
dwSize DWORD ?
dwFlags DWORD ?
dwHeight DWORD ?
dwWidth DWORD ?
lPitch DWORD ?
dwBackBufferCount DWORD ?
UNION
dwMipMapCount DWORD ?
dwZBufferBitDepth DWORD ?
dwRefreshRate DWORD ?
ENDS
dwAlphaBitDepth DWORD ?
dwReserved DWORD ?
lpSurface DWORD ?
ddckCKDestOverlay DDCOLORKEY <>
ddckCKDestBlt DDCOLORKEY <>
ddckCKSrcOverlay DDCOLORKEY <>
ddckCKSrcBlt DDCOLORKEY <>
ddpfPixelFormat DDPIXELFORMAT <>
ddsCaps DDSCAPS <>
DDSURFACEDESC ENDS
DDBLTBATCH STRUC
lprDest LPRECT ?
lpDDSSrc LPDIRECTDRAWSURFACE ?
lprSrc LPRECT ?
dwFlags DWORD ?
lpDDBltFx LPDDBLTFX ?
DDBLTBATCH ENDS
IDirectDrawVtbl STRUC
; IUnknown methods
STDMETHOD QueryInterface, :PTR IDirectDraw, :PTR, :PTR PTR
STDMETHOD AddRef, :PTR IDirectDraw
STDMETHOD Release, :PTR IDirectDraw
; IDirectDraw methods
STDMETHOD Compact, :PTR IDirectDraw
STDMETHOD CreateClipper, :PTR IDirectDraw, :DWORD, :PTR LPDIRECTDRAWCLIPPER, :PTR IUnknown
STDMETHOD CreatePalette, :PTR IDirectDraw, :DWORD, :LPPALETTEENTRY, :PTR LPDIRECTDRAWPALETTE, :PTR IUnknown
STDMETHOD CreateSurface, :PTR IDirectDraw, :LPDDSURFACEDESC, :PTR LPDIRECTDRAWSURFACE, :PTR IUnknown
STDMETHOD DuplicateSurface, :PTR IDirectDraw, :LPDIRECTDRAWSURFACE, :PTR LPDIRECTDRAWSURFACE
STDMETHOD EnumDisplayModes, :PTR IDirectDraw, :DWORD, :LPDDSURFACEDESC, :PTR , :PTR
STDMETHOD EnumSurfaces, :PTR IDirectDraw, :DWORD, :LPDDSURFACEDESC, :PTR , :PTR
STDMETHOD FlipToGDISurface, :PTR IDirectDraw
STDMETHOD GetCaps, :PTR IDirectDraw, :LPDDCAPS, :LPDDCAPS
STDMETHOD GetDisplayMode, :PTR IDirectDraw, :LPDDSURFACEDESC
STDMETHOD GetFourCCCodes, :PTR IDirectDraw, :PTR DWORD, :PTR DWORD
STDMETHOD GetGDISurface, :PTR IDirectDraw, :PTR LPDIRECTDRAWSURFACE
STDMETHOD GetMonitorFrequency, :PTR IDirectDraw, :DWORD
STDMETHOD GetScanLine, :PTR IDirectDraw, :DWORD
STDMETHOD GetVerticalBlankStatus, :PTR IDirectDraw, :PTR SWORD
STDMETHOD Initialize, :PTR IDirectDraw, :PTR GUID
STDMETHOD RestoreDisplayMode, :PTR IDirectDraw
STDMETHOD SetCooperativeLevel, :PTR IDirectDraw, :HWND, :DWORD
STDMETHOD SetDisplayMode, :PTR IDirectDraw, :DWORD, :DWORD, :DWORD
STDMETHOD WaitForVerticalBlank, :PTR IDirectDraw, :DWORD, :PTR
IDirectDrawVtbl ENDS
IDirectDrawPaletteVtbl STRUC
; IUnknown methods
STDMETHOD QueryInterface, :PTR IDirectDrawPalette, :PTR, :PTR PTR
STDMETHOD AddRef, :PTR IDirectDrawPalette
STDMETHOD Release, :PTR IDirectDrawPalette
; IDirectDrawPalette methods
STDMETHOD GetCaps, :PTR IDirectDrawPalette, :PTR DWORD
STDMETHOD GetEntries, :PTR IDirectDrawPalette, :DWORD, :DWORD, :DWORD, :LPPALETTEENTRY
STDMETHOD Initialize, :PTR IDirectDrawPalette, :LPDIRECTDRAW, :DWORD, :LPPALETTEENTRY
STDMETHOD SetEntries, :PTR IDirectDrawPalette, :DWORD, :DWORD, :DWORD, :LPPALETTEENTRY
IDirectDrawPaletteVtbl ENDS
IDirectDrawClipperVtbl STRUC
; IUnknown methods
STDMETHOD QueryInterface, :PTR IDirectDrawClipper, :PTR, :PTR PTR
STDMETHOD AddRef, :PTR IDirectDrawClipper
STDMETHOD Release, :PTR IDirectDrawClipper
; IDirectDrawClipper methods
STDMETHOD GetClipList, :PTR IDirectDrawClipper, :LPRECT, :LPRGNDATA, :PTR DWORD
STDMETHOD GetHWnd, :PTR IDirectDrawClipper, :PTR HWND
STDMETHOD Initialize, :PTR IDirectDrawClipper, :LPDIRECTDRAW, :DWORD
STDMETHOD IsClipListChanged, :PTR IDirectDrawClipper, :PTR SWORD
STDMETHOD SetClipList, :PTR IDirectDrawClipper, :LPRGNDATA, :DWORD
STDMETHOD SetHWnd, :PTR IDirectDrawClipper, :DWORD, :HWND
IDirectDrawClipperVtbl ENDS
IDirectDrawSurfaceVtbl STRUC
; IUnknown methods
STDMETHOD QueryInterface, :PTR IDirectDrawSurface, :PTR, :PTR PTR
STDMETHOD AddRef, :PTR IDirectDrawSurface
STDMETHOD Release, :PTR IDirectDrawSurface
; IDirectDrawSurface methods
STDMETHOD AddAttachedSurface, :PTR IDirectDrawSurface, :LPDIRECTDRAWSURFACE
STDMETHOD AddOverlayDirtyRect, :PTR IDirectDrawSurface, :LPRECT
STDMETHOD Blt, :PTR IDirectDrawSurface, :LPRECT, :LPDIRECTDRAWSURFACE, :LPRECT, :DWORD, :LPDDBLTFX
STDMETHOD BltBatch, :PTR IDirectDrawSurface, :LPDDBLTBATCH, :DWORD, :DWORD
STDMETHOD BltFast, :PTR IDirectDrawSurface, :DWORD, :DWORD, :LPDIRECTDRAWSURFACE, :LPRECT, :DWORD
STDMETHOD DeleteAttachedSurface, :PTR IDirectDrawSurface, :DWORD, :LPDIRECTDRAWSURFACE
STDMETHOD EnumAttachedSurfaces, :PTR IDirectDrawSurface, :PTR , :PTR
STDMETHOD EnumOverlayZOrders, :PTR IDirectDrawSurface, :DWORD, :PTR , :PTR
STDMETHOD Flip, :PTR IDirectDrawSurface, :LPDIRECTDRAWSURFACE, :DWORD
STDMETHOD GetAttachedSurface, :PTR IDirectDrawSurface, :LPDDSCAPS, :PTR LPDIRECTDRAWSURFACE
STDMETHOD GetBltStatus, :PTR IDirectDrawSurface, :DWORD
STDMETHOD GetCaps, :PTR IDirectDrawSurface, :LPDDSCAPS
STDMETHOD GetClipper, :PTR IDirectDrawSurface, :PTR LPDIRECTDRAWCLIPPER
STDMETHOD GetColorKey, :PTR IDirectDrawSurface, :DWORD, :LPDDCOLORKEY
STDMETHOD GetDC, :PTR IDirectDrawSurface, :PTR HDC
STDMETHOD GetFlipStatus, :PTR IDirectDrawSurface, :DWORD
STDMETHOD GetOverlayPosition, :PTR IDirectDrawSurface, :PTR DWORD, :PTR DWORD
STDMETHOD GetPalette, :PTR IDirectDrawSurface, :PTR LPDIRECTDRAWPALETTE
STDMETHOD GetPixelFormat, :PTR IDirectDrawSurface, :LPDDPIXELFORMAT
STDMETHOD GetSurfaceDesc, :PTR IDirectDrawSurface, :LPDDSURFACEDESC
STDMETHOD Initialize, :PTR IDirectDrawSurface, :LPDIRECTDRAW, :LPDDSURFACEDESC
STDMETHOD IsLost, :PTR IDirectDrawSurface
STDMETHOD mLock, :PTR IDirectDrawSurface, :LPRECT, :LPDDSURFACEDESC, :DWORD, :PTR
STDMETHOD ReleaseDC, :PTR IDirectDrawSurface, :HDC
STDMETHOD Restore, :PTR IDirectDrawSurface
STDMETHOD SetClipper, :PTR IDirectDrawSurface, :LPDIRECTDRAWCLIPPER
STDMETHOD SetColorKey, :PTR IDirectDrawSurface, :DWORD, :LPDDCOLORKEY
STDMETHOD SetOverlayPosition, :PTR IDirectDrawSurface, :SDWORD, :SDWORD
STDMETHOD SetPalette, :PTR IDirectDrawSurface, :LPDIRECTDRAWPALETTE
STDMETHOD Unlock, :PTR IDirectDrawSurface, :PTR
STDMETHOD UpdateOverlay, :PTR IDirectDrawSurface, :LPRECT, :LPDIRECTDRAWSURFACE, :LPRECT, :DWORD, :LPDDOVERLAYFX
STDMETHOD UpdateOverlayDisplay, :PTR IDirectDrawSurface, :DWORD
STDMETHOD UpdateOverlayZOrder, :PTR IDirectDrawSurface, :DWORD, :LPDIRECTDRAWSURFACE
IDirectDrawSurfaceVtbl ENDS
IDirectDraw STRUC
lpVtbl DWORD ?
IDirectDraw ENDS
IDirectDrawPalette STRUC
lpVtbl DWORD ?
IDirectDrawPalette ENDS
IDirectDrawClipper STRUC
lpVtbl DWORD ?
IDirectDrawClipper ENDS
IDirectDrawSurface STRUC
lpVtbl DWORD ?
IDirectDrawSurface ENDS
; Direct Draw Capability Flags
DDSD_CAPS EQU 000000001h
DDSD_HEIGHT EQU 000000002h
DDSD_WIDTH EQU 000000004h
DDSD_PITCH EQU 000000008h
DDSD_BACKBUFFERCOUNT EQU 000000020h
DDSD_ZBUFFERBITDEPTH EQU 000000040h
DDSD_ALPHABITDEPTH EQU 000000080h
DDSD_PIXELFORMAT EQU 000001000h
DDSD_CKDESTOVERLAY EQU 000002000h
DDSD_CKDESTBLT EQU 000004000h
DDSD_CKSRCOVERLAY EQU 000008000h
DDSD_CKSRCBLT EQU 000010000h
DDSD_MIPMAPCOUNT EQU 000020000h
DDSD_REFRESHRATE EQU 000040000h
DDSD_ALL EQU 00007f9eeh ; all input field are valid
; DIRECTDRAWSURFACE CAPABILITY FLAGS
DDSCAPS_3D EQU 000000001h
DDSCAPS_ALPHA EQU 000000002h
DDSCAPS_BACKBUFFER EQU 000000004h
DDSCAPS_COMPLEX EQU 000000008h
DDSCAPS_FLIP EQU 000000010h
DDSCAPS_FRONTBUFFER EQU 000000020h
DDSCAPS_OFFSCREENPLAIN EQU 000000040h
DDSCAPS_OVERLAY EQU 000000080h
DDSCAPS_PALETTE EQU 000000100h
DDSCAPS_PRIMARYSURFACE EQU 000000200h
DDSCAPS_PRIMARYSURFACELEFT EQU 000000400h
DDSCAPS_SYSTEMMEMORY EQU 000000800h
DDSCAPS_TEXTURE EQU 000001000h
DDSCAPS_3DDEVICE EQU 000002000h
DDSCAPS_VIDEOMEMORY EQU 000004000h
DDSCAPS_VISIBLE EQU 000008000h
DDSCAPS_WRITEONLY EQU 000010000h
DDSCAPS_ZBUFFER EQU 000020000h
DDSCAPS_OWNDC EQU 000040000h
DDSCAPS_LIVEVIDEO EQU 000080000h
DDSCAPS_HWCODEC EQU 000100000h
DDSCAPS_MODEX EQU 000200000h
DDSCAPS_MIPMAP EQU 000400000h
DDSCAPS_ALLOCONLOAD EQU 004000000h
; DIRECTDRAW DRIVER CAPABILITY FLAGS
DDCAPS_3D EQU 000000001h
DDCAPS_ALIGNBOUNDARYDEST EQU 000000002h
DDCAPS_ALIGNSIZEDEST EQU 000000004h
DDCAPS_ALIGNBOUNDARYSRC EQU 000000008h
DDCAPS_ALIGNSIZESRC EQU 000000010h
DDCAPS_ALIGNSTRIDE EQU 000000020h
DDCAPS_BLT EQU 000000040h
DDCAPS_BLTQUEUE EQU 000000080h
DDCAPS_BLTFOURCC EQU 000000100h
DDCAPS_BLTSTRETCH EQU 000000200h
DDCAPS_GDI EQU 000000400h
DDCAPS_OVERLAY EQU 000000800h
DDCAPS_OVERLAYCANTCLIP EQU 000001000h
DDCAPS_OVERLAYFOURCC EQU 000002000h
DDCAPS_OVERLAYSTRETCH EQU 000004000h
DDCAPS_PALETTE EQU 000008000h
DDCAPS_PALETTEVSYNC EQU 000010000h
DDCAPS_READSCANLINE EQU 000020000h
DDCAPS_STEREOVIEW EQU 000040000h
DDCAPS_VBI EQU 000080000h
DDCAPS_ZBLTS EQU 000100000h
DDCAPS_ZOVERLAYS EQU 000200000h
DDCAPS_COLORKEY EQU 000400000h
DDCAPS_ALPHA EQU 000800000h
DDCAPS_COLORKEYHWASSIST EQU 001000000h
DDCAPS_NOHARDWARE EQU 002000000h
DDCAPS_BLTCOLORFILL EQU 004000000h
DDCAPS_BANKSWITCHED EQU 008000000h
DDCAPS_BLTDEPTHFILL EQU 010000000h
DDCAPS_CANCLIP EQU 020000000h
DDCAPS_CANCLIPSTRETCHED EQU 040000000h
DDCAPS_CANBLTSYSMEM EQU 080000000h
; DIRECTDRAW FX ALPHA CAPABILITY FLAGS
DDFXALPHACAPS_BLTALPHAEDGEBLEND EQU 000000001h
DDFXALPHACAPS_BLTALPHAPIXELS EQU 000000002h
DDFXALPHACAPS_BLTALPHAPIXELSNEG EQU 000000004h
DDFXALPHACAPS_BLTALPHASURFACES EQU 000000008h
DDFXALPHACAPS_BLTALPHASURFACESNEG EQU 000000010h
DDFXALPHACAPS_OVERLAYALPHAEDGEBLEND EQU 000000020h
DDFXALPHACAPS_OVERLAYALPHAPIXELS EQU 000000040h
DDFXALPHACAPS_OVERLAYALPHAPIXELSNEG EQU 000000080h
DDFXALPHACAPS_OVERLAYALPHASURFACES EQU 000000100h
DDFXALPHACAPS_OVERLAYALPHASURFACESNEG EQU 000000200h
; DIRECTDRAW FX CAPABILITY FLAGS
DDFXCAPS_BLTARITHSTRETCHY EQU 000000020h
DDFXCAPS_BLTARITHSTRETCHYN EQU 000000010h
DDFXCAPS_BLTMIRRORLEFTRIGHT EQU 000000040h
DDFXCAPS_BLTMIRRORUPDOWN EQU 000000080h
DDFXCAPS_BLTROTATION EQU 000000100h
DDFXCAPS_BLTROTATION90 EQU 000000200h
DDFXCAPS_BLTSHRINKX EQU 000000400h
DDFXCAPS_BLTSHRINKXN EQU 000000800h
DDFXCAPS_BLTSHRINKY EQU 000001000h
DDFXCAPS_BLTSHRINKYN EQU 000002000h
DDFXCAPS_BLTSTRETCHX EQU 000004000h
DDFXCAPS_BLTSTRETCHXN EQU 000008000h
DDFXCAPS_BLTSTRETCHY EQU 000010000h
DDFXCAPS_BLTSTRETCHYN EQU 000020000h
DDFXCAPS_OVERLAYARITHSTRETCHY EQU 000040000h
DDFXCAPS_OVERLAYARITHSTRETCHYN EQU 000000008h
DDFXCAPS_OVERLAYSHRINKX EQU 000080000h
DDFXCAPS_OVERLAYSHRINKXN EQU 000100000h
DDFXCAPS_OVERLAYSHRINKY EQU 000200000h
DDFXCAPS_OVERLAYSHRINKYN EQU 000400000h
DDFXCAPS_OVERLAYSTRETCHX EQU 000800000h
DDFXCAPS_OVERLAYSTRETCHXN EQU 001000000h
DDFXCAPS_OVERLAYSTRETCHY EQU 002000000h
DDFXCAPS_OVERLAYSTRETCHYN EQU 004000000h
DDFXCAPS_OVERLAYMIRRORLEFTRIGHT EQU 008000000h
DDFXCAPS_OVERLAYMIRRORUPDOWN EQU 010000000h
; DIRECTDRAW STEREO VIEW CAPABILITIES
DDSVCAPS_ENIGMA EQU 000000001h
DDSVCAPS_FLICKER EQU 000000002h
DDSVCAPS_REDBLUE EQU 000000004h
DDSVCAPS_SPLIT EQU 000000008h
; DIRECTDRAWPALETTE CAPABILITIES
DDPCAPS_4BIT EQU 000000001h
DDPCAPS_8BITENTRIES EQU 000000002h
DDPCAPS_8BIT EQU 000000004h
DDPCAPS_INITIALIZE EQU 000000008h
DDPCAPS_PRIMARYSURFACE EQU 000000010h
DDPCAPS_PRIMARYSURFACELEFT EQU 000000020h
DDPCAPS_ALLOW256 EQU 000000040h
DDPCAPS_VSYNC EQU 000000080h
DDPCAPS_1BIT EQU 000000100h
DDPCAPS_2BIT EQU 000000200h
; DIRECTDRAW BITDEPTH CONSTANTS
DDBD_1 EQU 000004000h
DDBD_2 EQU 000002000h
DDBD_4 EQU 000001000h
DDBD_8 EQU 000000800h
DDBD_16 EQU 000000400h
DDBD_24 EQU 000000200h
DDBD_32 EQU 000000100h
; DIRECTDRAWSURFACE SET/GET COLOR KEY FLAGS
DDCKEY_COLORSPACE EQU 000000001h
DDCKEY_DESTBLT EQU 000000002h
DDCKEY_DESTOVERLAY EQU 000000004h
DDCKEY_SRCBLT EQU 000000008h
DDCKEY_SRCOVERLAY EQU 000000010h
; DIRECTDRAW COLOR KEY CAPABILITY FLAGS
DDCKEYCAPS_DESTBLT EQU 000000001h
DDCKEYCAPS_DESTBLTCLRSPACE EQU 000000002h
DDCKEYCAPS_DESTBLTCLRSPACEYUV EQU 000000004h
DDCKEYCAPS_DESTBLTYUV EQU 000000008h
DDCKEYCAPS_DESTOVERLAY EQU 000000010h
DDCKEYCAPS_DESTOVERLAYCLRSPACE EQU 000000020h
DDCKEYCAPS_DESTOVERLAYCLRSPACEYUV EQU 000000040h
DDCKEYCAPS_DESTOVERLAYONEACTIVE EQU 000000080h
DDCKEYCAPS_DESTOVERLAYYUV EQU 000000100h
DDCKEYCAPS_SRCBLT EQU 000000200h
DDCKEYCAPS_SRCBLTCLRSPACE EQU 000000400h
DDCKEYCAPS_SRCBLTCLRSPACEYUV EQU 000000800h
DDCKEYCAPS_SRCBLTYUV EQU 000001000h
DDCKEYCAPS_SRCOVERLAY EQU 000002000h
DDCKEYCAPS_SRCOVERLAYCLRSPACE EQU 000004000h
DDCKEYCAPS_SRCOVERLAYCLRSPACEYUV EQU 000008000h
DDCKEYCAPS_SRCOVERLAYONEACTIVE EQU 000010000h
DDCKEYCAPS_SRCOVERLAYYUV EQU 000020000h
DDCKEYCAPS_NOCOSTOVERLAY EQU 000040000h
; DIRECTDRAW PIXELFORMAT FLAGS
DDPF_ALPHAPIXELS EQU 000000001h
DDPF_ALPHA EQU 000000002h
DDPF_FOURCC EQU 000000004h
DDPF_PALETTEINDEXED4 EQU 000000008h
DDPF_PALETTEINDEXEDTO8 EQU 000000010h
DDPF_PALETTEINDEXED8 EQU 000000020h
DDPF_RGB EQU 000000040h
DDPF_COMPRESSED EQU 000000080h
DDPF_RGBTOYUV EQU 000000100h
DDPF_YUV EQU 000000200h
DDPF_ZBUFFER EQU 000000400h
DDPF_PALETTEINDEXED1 EQU 000000800h
DDPF_PALETTEINDEXED2 EQU 000001000h
; DIRECTDRAW ENUMSURFACES FLAGS
DDENUMSURFACES_ALL EQU 000000001h
DDENUMSURFACES_MATCH EQU 000000002h
DDENUMSURFACES_NOMATCH EQU 000000004h
DDENUMSURFACES_CANBECREATED EQU 000000008h
DDENUMSURFACES_DOESEXIST EQU 000000010h
; DIRECTDRAW ENUMDISPLAYMODES FLAGS
DDEDM_REFRESHRATES EQU 000000001h
; DIRECTDRAW SETCOOPERATIVELEVEL FLAGS
DDSCL_FULLSCREEN EQU 000000001h
DDSCL_ALLOWREBOOT EQU 000000002h
DDSCL_NOWINDOWCHANGES EQU 000000004h
DDSCL_NORMAL EQU 000000008h
DDSCL_EXCLUSIVE EQU 000000010h
DDSCL_ALLOWMODEX EQU 000000040h
; DIRECTDRAW BLT FLAGS
DDBLT_ALPHADEST EQU 000000001h
DDBLT_ALPHADESTCONSTOVERRIDE EQU 000000002h
DDBLT_ALPHADESTNEG EQU 000000004h
DDBLT_ALPHADESTSURFACEOVERRIDE EQU 000000008h
DDBLT_ALPHAEDGEBLEND EQU 000000010h
DDBLT_ALPHASRC EQU 000000020h
DDBLT_ALPHASRCCONSTOVERRIDE EQU 000000040h
DDBLT_ALPHASRCNEG EQU 000000080h
DDBLT_ALPHASRCSURFACEOVERRIDE EQU 000000100h
DDBLT_ASYNC EQU 000000200h
DDBLT_COLORFILL EQU 000000400h
DDBLT_DDFX EQU 000000800h
DDBLT_DDROPS EQU 000001000h
DDBLT_KEYDEST EQU 000002000h
DDBLT_KEYDESTOVERRIDE EQU 000004000h
DDBLT_KEYSRC EQU 000008000h
DDBLT_KEYSRCOVERRIDE EQU 000010000h
DDBLT_ROP EQU 000020000h
DDBLT_ROTATIONANGLE EQU 000040000h
DDBLT_ZBUFFER EQU 000080000h
DDBLT_ZBUFFERDESTCONSTOVERRIDE EQU 000100000h
DDBLT_ZBUFFERDESTOVERRIDE EQU 000200000h
DDBLT_ZBUFFERSRCCONSTOVERRIDE EQU 000400000h
DDBLT_ZBUFFERSRCOVERRIDE EQU 000800000h
DDBLT_WAIT EQU 001000000h
DDBLT_DEPTHFILL EQU 002000000h
; BLTFAST FLAGS
DDBLTFAST_NOCOLORKEY EQU 000000000h
DDBLTFAST_SRCCOLORKEY EQU 000000001h
DDBLTFAST_DESTCOLORKEY EQU 000000002h
DDBLTFAST_WAIT EQU 000000010h
; FLIP FLAGS
DDFLIP_WAIT EQU 000000001h
; DIRECTDRAW SURFACE OVERLAY FLAGS
DDOVER_ALPHADEST EQU 000000001h
DDOVER_ALPHADESTCONSTOVERRIDE EQU 000000002h
DDOVER_ALPHADESTNEG EQU 000000004h
DDOVER_ALPHADESTSURFACEOVERRIDE EQU 000000008h
DDOVER_ALPHAEDGEBLEND EQU 000000010h
DDOVER_ALPHASRC EQU 000000020h
DDOVER_ALPHASRCCONSTOVERRIDE EQU 000000040h
DDOVER_ALPHASRCNEG EQU 000000080h
DDOVER_ALPHASRCSURFACEOVERRIDE EQU 000000100h
DDOVER_HIDE EQU 000000200h
DDOVER_KEYDEST EQU 000000400h
DDOVER_KEYDESTOVERRIDE EQU 000000800h
DDOVER_KEYSRC EQU 000001000h
DDOVER_KEYSRCOVERRIDE EQU 000002000h
DDOVER_SHOW EQU 000004000h
DDOVER_ADDDIRTYRECT EQU 000008000h
DDOVER_REFRESHDIRTYRECTS EQU 000010000h
DDOVER_REFRESHALL EQU 000020000h
DDOVER_DDFX EQU 000080000h
; DIRECTDRAWSURFACE LOCK FLAGS
DDLOCK_SURFACEMEMORYPTR EQU 000000000h
DDLOCK_WAIT EQU 000000001h
DDLOCK_EVENT EQU 000000002h
DDLOCK_READONLY EQU 000000010h
DDLOCK_WRITEONLY EQU 000000020h
; DIRECTDRAWSURFACE BLT FX FLAGS
DDBLTFX_ARITHSTRETCHY EQU 000000001h
DDBLTFX_MIRRORLEFTRIGHT EQU 000000002h
DDBLTFX_MIRRORUPDOWN EQU 000000004h
DDBLTFX_NOTEARING EQU 000000008h
DDBLTFX_ROTATE180 EQU 000000010h
DDBLTFX_ROTATE270 EQU 000000020h
DDBLTFX_ROTATE90 EQU 000000040h
DDBLTFX_ZBUFFERRANGE EQU 000000080h
DDBLTFX_ZBUFFERBASEDEST EQU 000000100h
; DIRECTDRAWSURFACE OVERLAY FX FLAGS
DDOVERFX_ARITHSTRETCHY EQU 000000001h
DDOVERFX_MIRRORLEFTRIGHT EQU 000000002h
DDOVERFX_MIRRORUPDOWN EQU 000000004h
; DIRECTDRAW WAITFORVERTICALBLANK FLAGS
DDWAITVB_BLOCKBEGIN EQU 000000001h
DDWAITVB_BLOCKBEGINEVENT EQU 000000002h
DDWAITVB_BLOCKEND EQU 000000004h
; DIRECTDRAW GETFLIPSTATUS FLAGS
DDGFS_CANFLIP EQU 000000001h
DDGFS_ISFLIPDONE EQU 000000002h
; DIRECTDRAW GETBLTSTATUS FLAGS
DDGBS_CANBLT EQU 000000001h
DDGBS_ISBLTDONE EQU 000000002h
; DIRECTDRAW ENUMOVERLAYZORDER FLAGS
DDENUMOVERLAYZ_BACKTOFRONT EQU 000000000h
DDENUMOVERLAYZ_FRONTTOBACK EQU 000000001h
; DIRECTDRAW UPDATEOVERLAYZORDER FLAGS
DDOVERZ_SENDTOFRONT EQU 000000000h
DDOVERZ_SENDTOBACK EQU 000000001h
DDOVERZ_MOVEFORWARD EQU 000000002h
DDOVERZ_MOVEBACKWARD EQU 000000003h
DDOVERZ_INSERTINFRONTOF EQU 000000004h
DDOVERZ_INSERTINBACKOF EQU 000000005h
; DIRECTDRAW RETURN CODES
; Issued by: DirectDraw Commands and all callbacks
DD_OK EQU 0 ; Status is OK
; DIRECTDRAW ENUMCALLBACK RETURN VALUES
DDENUMRET_CANCEL EQU 0 ; stop the enumeration
DDENUMRET_OK EQU 1 ; continue the enumeration
; DIRECTDRAW ERRORS
DDERR_ALREADYINITIALIZED EQU 088760005h
DDERR_CANNOTATTACHSURFACE EQU 08876000ah
DDERR_CANNOTDETACHSURFACE EQU 088760014h
DDERR_CURRENTLYNOTAVAIL EQU 088760028h
DDERR_EXCEPTION EQU 088760037h
DDERR_GENERIC EQU 080004005h
DDERR_HEIGHTALIGN EQU 08876005ah
DDERR_INCOMPATIBLEPRIMARY EQU 08876005fh
DDERR_INVALIDCAPS EQU 088760064h
DDERR_INVALIDCLIPLIST EQU 08876006eh
DDERR_INVALIDMODE EQU 088760078h
DDERR_INVALIDOBJECT EQU 088760082h
DDERR_INVALIDPARAMS EQU 080070057h
DDERR_INVALIDPIXELFORMAT EQU 088760091h
DDERR_INVALIDRECT EQU 088760096h
DDERR_LOCKEDSURFACES EQU 0887600a0h
DDERR_NO3D EQU 0887600aah
DDERR_NOALPHAHW EQU 0887600b4h
DDERR_NOCLIPLIST EQU 0887600cdh
DDERR_NOCOLORCONVHW EQU 0887600d2h
DDERR_NOCOOPERATIVELEVELSET EQU 0887600d4h
DDERR_NOCOLORKEY EQU 0887600d7h
DDERR_NOCOLORKEYHW EQU 0887600dch
DDERR_NODIRECTDRAWSUPPORT EQU 0887600deh
DDERR_NOEXCLUSIVEMODE EQU 0887600e1h
DDERR_NOFLIPHW EQU 0887600e6h
DDERR_NOGDI EQU 0887600f0h
DDERR_NOMIRRORHW EQU 0887600fah
DDERR_NOTFOUND EQU 0887600ffh
DDERR_NOOVERLAYHW EQU 088760104h
DDERR_NORASTEROPHW EQU 088760118h
DDERR_NOROTATIONHW EQU 088760122h
DDERR_NOSTRETCHHW EQU 088760136h
DDERR_NOT4BITCOLOR EQU 08876013ch
DDERR_NOT4BITCOLORINDEX EQU 08876013dh
DDERR_NOT8BITCOLOR EQU 088760140h
DDERR_NOTEXTUREHW EQU 08876014ah
DDERR_NOVSYNCHW EQU 08876014fh
DDERR_NOZBUFFERHW EQU 088760154h
DDERR_NOZOVERLAYHW EQU 08876015eh
DDERR_OUTOFCAPS EQU 088760168h
DDERR_OUTOFMEMORY EQU 08007000eh
DDERR_OUTOFVIDEOMEMORY EQU 08876017ch
DDERR_OVERLAYCANTCLIP EQU 08876017eh
DDERR_OVERLAYCOLORKEYONLYONEACTIVE EQU 088760180h
DDERR_PALETTEBUSY EQU 088760183h
DDERR_COLORKEYNOTSET EQU 088760190h
DDERR_SURFACEALREADYATTACHED EQU 08876019ah
DDERR_SURFACEALREADYDEPENDENT EQU 0887601a4h
DDERR_SURFACEBUSY EQU 0887601aeh
DDERR_CANTLOCKSURFACE EQU 0887601b3h
DDERR_SURFACEISOBSCURED EQU 0887601b8h
DDERR_SURFACELOST EQU 0887601c2h
DDERR_SURFACENOTATTACHED EQU 0887601cch
DDERR_TOOBIGHEIGHT EQU 0887601d6h
DDERR_TOOBIGSIZE EQU 0887601e0h
DDERR_TOOBIGWIDTH EQU 0887601eah
DDERR_UNSUPPORTED EQU 080004001h
DDERR_UNSUPPORTEDFORMAT EQU 0887601feh
DDERR_UNSUPPORTEDMASK EQU 088760208h
DDERR_VERTICALBLANKINPROGRESS EQU 088760219h
DDERR_WASSTILLDRAWING EQU 08876021ch
DDERR_XALIGN EQU 088760230h
DDERR_INVALIDDIRECTDRAWGUID EQU 088760231h
DDERR_DIRECTDRAWALREADYCREATED EQU 088760232h
DDERR_NODIRECTDRAWHW EQU 088760233h
DDERR_PRIMARYSURFACEALREADYEXISTS EQU 088760234h
DDERR_NOEMULATION EQU 088760235h
DDERR_REGIONTOOSMALL EQU 088760236h
DDERR_CLIPPERISUSINGHWND EQU 088760237h
DDERR_NOCLIPPERATTACHED EQU 088760238h
DDERR_NOHWND EQU 088760239h
DDERR_HWNDSUBCLASSED EQU 08876023ah
DDERR_HWNDALREADYSET EQU 08876023bh
DDERR_NOPALETTEATTACHED EQU 08876023ch
DDERR_NOPALETTEHW EQU 08876023dh
DDERR_BLTFASTCANTCLIP EQU 08876023eh
DDERR_NOBLTHW EQU 08876023fh
DDERR_NODDROPSHW EQU 088760240h
DDERR_OVERLAYNOTVISIBLE EQU 088760241h
DDERR_NOOVERLAYDEST EQU 088760242h
DDERR_INVALIDPOSITION EQU 088760243h
DDERR_NOTAOVERLAYSURFACE EQU 088760244h
DDERR_EXCLUSIVEMODEALREADYSET EQU 088760245h
DDERR_NOTFLIPPABLE EQU 088760246h
DDERR_CANTDUPLICATE EQU 088760247h
DDERR_NOTLOCKED EQU 088760248h
DDERR_CANTCREATEDC EQU 088760249h
DDERR_NODC EQU 08876024ah
DDERR_WRONGMODE EQU 08876024bh
DDERR_IMPLICITLYCREATED EQU 08876024ch
DDERR_NOTPALETTIZED EQU 08876024dh
DDERR_UNSUPPORTEDMODE EQU 08876024eh
DDERR_NOMIPMAPHW EQU 08876024fh
DDERR_INVALIDSURFACETYPE EQU 088760250h
DDERR_DCALREADYCREATED EQU 08876026ch
DDERR_CANTPAGELOCK EQU 088760280h
DDERR_CANTPAGEUNLOCK EQU 088760294h
DDERR_NOTPAGELOCKED EQU 0887602a8h
DDERR_NOTINITIALIZED EQU 0800401f0h
赞赏记录
参与人
雪币
留言
时间
Youlor
为你点赞~
2024-1-3 03:26
伟叔叔
为你点赞~
2023-10-27 00:01
QinBeast
为你点赞~
2023-8-2 00:06
一笑人间万事
为你点赞~
2023-7-31 00:36
shinratensei
为你点赞~
2023-7-8 00:35
心游尘世外
为你点赞~
2023-6-28 04:29
飘零丶
为你点赞~
2023-6-20 00:13
赞赏
他的文章
谁下载
kanxue
forgot
DamnYa
WinDos2K
WiNrOOt
thk
娃娃[CCG]
poppig
wangshy
Phoenix
cwx
jero
LOCKLOSE
PowerBoy
Pan88168
呱叽呱叽
subme1
cpu
neo
limin
lgnddn
lvwx
ysoni
zzzzzz
4st0ne
无聊的菜鸟
xzchina
oyefer
vrowang123
lxj168360
wang_bml
老鱼
hldgaofeng
kxa2000
maomaoma
Loveasm
ybb03z
LCH
duronboy
Sam.com
jzboy009
wr960204
droiyan
北极星2003
苦默含笑
ycool
linyangcan
zhuwg
luckyxsky
appleangel
jijimao
cxhcxh
HSQ
tobybird
foxabu
BebEtter
justlovemm
zhujian
天外来客
yeyeshun
lenix
clyfish
Intelfan
amour
lingyu
lvb
sunsjw
Oshell
hawking
美丽破船
fangxin
asd
testttt
yzjsdn
hwhohwh
xiazhongma
我是大头
lqcoicq
小懒车
cham
softbug
chinester
yyqkxxy
insysrq
btlfe
jingru
血色魔鬼
mxdcc
davidfoxhu
haifengjl
wqrsksk
北方滴狼
leexuany
sysnet
cczlp
happyhjl
ppanger
上网鱼
晓欣
看原图
赞赏
雪币:
留言: