IDirectDraw2接口
IDirectDraw2接口
返回上级
应用程序使用IDirectDraw2接口的方法来创建DirectDraw的各种对象,并且与系统层变量一起工作。这部分是关于该接口的函数参考。IDirectDraw2接口的函数可以分为以下几组:
分配内存 | Compact |
Initialize | |
创建对象 | CreateClipper |
CreatePalette | |
CreateSurface | |
设备特性 | GetCaps |
显示模式 | EnumDisplayModes |
GetDisplayMode | |
GetMonitorFrequency | |
RestoreDisplayMode | |
SetDisplayMode | |
WaitForVerticalBlank | |
显示状态 | GetScanLine |
GetVerticalBlankStatus | |
杂项 | GetAvailableVidMem |
GetFourCCCodes | |
设置控制级 | SetCooperativeLevel |
页面 | DuplicateSurface |
EnumSurfaces | |
FlipToGDISurface | |
GetGDISurface |
和所有COM接口一样,IDirectDraw2接口由IUnknown接口衍生而来。IUnknown接口支持以下三种方法:
AddRef
QueryInterface
Release
你可以使用LPDIRECTDRAW或LPDIRECTDRAW2数据类型来声明一个指向IDirectDraw或IDirectDraw2接口的变量。在Ddraw.h头文件中用以下代码声明了这两种数据类型。
typedef struct IDirectDraw FAR *LPDIRECTDRAW;
typedef struct IDirectDraw2 FAR *LPDIRECTDRAW2;
- IDirectDraw2::Compact
- IDirectDraw2::CreateClipper
- IDirectDraw2::CreatePalette
- IDirectDraw2::CreateSurface
- IDirectDraw2::DuplicateSurface
- IDirectDraw2::EnumDisplayModes
- IDirectDraw2::EnumSurfaces
- IDirectDraw2::FlipToGDISurface
- IDirectDraw2::GetAvailableVidMem
- IDirectDraw2::GetCaps
- IDirectDraw2::GetDisplayMode
- IDirectDraw2::GetFourCCCodes
- IDirectDraw2::GetGDISurface
- IDirectDraw2::GetMonitorFrequency
- IDirectDraw2::GetScanLine
- IDirectDraw2::GetVerticalBlankStatus
- IDirectDraw2::Initialize
- IDirectDraw2::RestoreDisplayMode
- IDirectDraw2::SetCooperativeLevel
- IDirectDraw2::SetDisplayMode
- IDirectDraw2::WaitForVerticalBlank
目前,该函数尚未完成,还不能使用。
HRESULT Compact();
返回值:
如果函数调用成功,返回DD_OK。
如果函数调用失败,返回值可能是下列错误值之一:
DDERR_INVALIDOBJECT
DDERR_INVALIDPARAMS
DDERR_NOEXCLUSIVEMODE
DDERR_SURFACEBUSY
备注:
这个函数将所有位于显卡上的页面内存移动到一块连续的空间,以使剩余的连续内存空间值达到最大。这个函数在执行时,如果被任何其它的操作打断,该函数失败。
应用程序只有将控制级设为独占模式(exclusive),才能调用这个函数。
快速信息:
Windows NT:适用于4.0或更新版
Windows:适用于Windows 95或更新版
Windows CE:不支持
头文件:ddraw.h
库文件:ddraw.lib
创建一个DirectDrawClipper对象。
HRESULT CreateClipper(
DWORD dwFlags,
LPDIRECTDRAWCLIPPER FAR *lplpDDClipper,
IUnknown FAR *pUnkOuter
);
参数:
dwFlags
这个参数目前没有被使用,必须置为0。
lplpDDClipper
如果该函数调用成功,该参数将接收到指向新创建的DirectDrawClipper对象的指针的地址。
pUnkOuter
该参数将允许与今后的COM集合特性相兼容。目前,只要这个参数不是NULL,IDirectDraw2::CreateSurface返回一个错误。
返回值:
如果函数调用成功,返回DD_OK。
如果函数调用失败,返回值可能是下列错误值之一:
DDERR_INVALIDOBJECT
DDERR_INVALIDPARAMS
DDERR_NOCOOPERATIVELEVELSET
DDERR_OUTOFMEMORY
备注:
DirectDrawClipper对象可以被隶属于一个DirectDrawSurface对象,并且在IDirectDrawSurface3::Blt、IDirectDrawSurface3::BltBatch、和IDirectDrawSurface3::UpdateOverlay过程中使用。要创建一个不隶属于任何DirectDraw对象的DirectDrawClipper对象,使用DirectDrawCreateClipper函数。
快速信息:
Windows NT:适用于4.0或更新版
Windows:适用于Windows 95或更新版
Windows CE:不支持
头文件:ddraw.h
库文件:ddraw.lib
请参阅:
IDirectDrawSurface3::GetClipper,IDirectDrawSurface3::SetClipper
为该DirectDraw对象创建一个DirectDrawPalette 对象。
HRESULT CreatePalette(
DWORD dwFlags,
LPPALETTEENTRY lpColorTable,
LPDIRECTDRAWPALETTE FAR *lplpDDPalette,
IUnknown FAR *pUnkOuter
);
参数:
dwFlags
下列标志的单个或组合:
DDPCAPS_1BIT
指定调色板索引为1比特。色彩表中只有两个入口。
DDPCAPS_2BIT
指定调色板索引为2比特。色彩表中有四个入口。
DDPCAPS_4BIT
指定调色板索引为4比特。色彩表中有16个入口。
DDPCAPS_8BIT
指定调色板索引为8比特。色彩表中有256个入口。
DDPCAPS_8BITENTRIES
表明调色板的索引值是另外一个8位调色板的索引。这个标志只有和DDPCAPS_1BIT、DDPCAPS_2BIT、或DDPCAPS_4BIT标志一起使用才能生效,并且目标页面必须是8 bbp(8位色彩模式)。每一个色彩入口为1字节,并且指向目标页面的8 bbp调色板。
DDPCAPS_ALLOW256
表明用户可以定义调色板的所有256个入口。
lpColorTable
2、4、16或256个PALETTEENTRY结构序列的地址,用来初始化这个DirectDrawPalette对象。
lplpDDPalette
如果函数调用成功,这个参数将接收到指向新创建的DirectDrawPalette对象的指针的地址。
pUnkOuter
该参数将允许与今后的COM集合特性相兼容。目前,只要这个参数不是NULL,IDirectDraw2::CreateSurface返回一个错误。
返回值:
如果函数调用成功,返回DD_OK。
如果函数调用失败,返回值可能是下列错误值之一:
DDERR_INVALIDOBJECT
DDERR_INVALIDPARAMS
DDERR_NOCOOPERATIVELEVELSET
DDERR_OUTOFMEMORY
DDERR_UNSUPPORTED
快速信息:
Windows NT:适用于4.0或更新版
Windows:适用于Windows 95或更新版
Windows CE:不支持
头文件:ddraw.h
库文件:ddraw.lib
该函数为该DirectDraw对象创建一个DirectDrawSurface对象。
HRESULT CreateSurface(
LPDDSURFACEDESC lpDDSurfaceDesc,
LPDIRECTDRAWSURFACE FAR *lplpDDSurface,
IUnknown FAR *pUnkOuter
);
参数:
lpDDSurfaceDesc
一个DDSURFACEDESC结构的地址,用来描述所请求创建的页面的页面信息。在调用这个函数之前,你应该设置DDSURFACEDESC结构所有成员的值为0。DDSCAPS结构是DDSURFACEDESC的一个成员。
lplpDDSurface
如果该函数调用成功,该参数将接收到指向新创建的DirectDrawsurface对象的指针的地址。
pUnkOuter
该参数将允许与今后的COM集合特性相兼容。目前,只要这个参数不是NULL,IDirectDraw2::CreateSurface返回一个错误。
返回值:
如果函数调用成功,返回DD_OK。
如果函数调用失败,返回值可能是下列错误值之一:
DDERR_INCOMPATIBLEPRIMARY
DDERR_INVALIDCAPS
DDERR_INVALIDOBJECT
DDERR_INVALIDPARAMS
DDERR_INVALIDPIXELFORMAT
DDERR_NOALPHAHW
DDERR_NOCOOPERATIVELEVELSET
DDERR_NODIRECTDRAWHW
DDERR_NOEMULATION
DDERR_NOEXCLUSIVEMODE
DDERR_NOFLIPHW
DDERR_NOMIPMAPHW
DDERR_NOOVERLAYHW
DDERR_NOZBUFFERHW
DDERR_OUTOFMEMORY
DDERR_OUTOFVIDEOMEMORY
DDERR_PRIMARYSURFACEALREADYEXISTS
DDERR_UNSUPPORTEDMODE
快速信息:
Windows NT:适用于4.0或更新版
Windows:适用于Windows 95或更新版
Windows CE:不支持
头文件:ddraw.h
库文件:ddraw.lib
复制一个DirectDrawSurface对象。
HRESULT DuplicateSurface(
LPDIRECTDRAWSURFACE lpDDSurface,
LPLPDIRECTDRAWSURFACE FAR *lplpDupDDSurface
);
参数:
lpDDSurface
将要被复制的DirectDrawSurface对象的地址。
lplpDupDDSurface
如果该函数调用成功,该参数将接收到指向新创建的DirectDrawsurface对象的指针的地址。
返回值:
如果函数调用成功,返回DD_OK。
如果函数调用失败,返回值可能是下列错误值之一:
DDERR_CANTDUPLICATE
DDERR_INVALIDOBJECT
DDERR_INVALIDPARAMS
DDERR_OUTOFMEMORY
DDERR_SURFACELOST
备注:
这个函数创建一个新的DirectDrawSurface对象,与一个已存在的DirectDrawSurface对象指向同一个页面内存区。这个复制品可以象原始对象一样使用。该页面内存在最后一个引用它的对象被释放之后被释放。主页面,3-D页面,或隐性页面不能被复制。
快速信息:
Windows NT:适用于4.0或更新版
Windows:适用于Windows 95或更新版
Windows CE:不支持
头文件:ddraw.h
库文件:ddraw.lib
该函数列举出暴露于DirectDraw对象的与所提供的页面描述相兼容的所有显示模式。
HRESULT EnumDisplayModes(
DWORD dwFlags,
LPDDSURFACEDESC lpDDSurfaceDesc,
LPVOID lpContext,
LPDDENUMMODESCALLBACK lpEnumModesCallback
);
参数:
dwFlags
DDEDM_REFRESHRATES
列举不同刷新率的显示模式。因为IDirectDraw2::EnumDisplayModes保证每一种模式只被列举一次,这个标志指定是否将刷新率也考虑在内。
DDEDM_STANDARDVGAMODES
除了320x200x8 Mode X 模式之外,还列举出Mode 13模式。
lpDDSurfaceDesc
指向一个DDSURFACEDESC结构的地址,被用来判断其是否存在于系统所支持的显示模式中。如果该参数为NULL,则所有的模式将被列举。
lpContext
一个应用程序定义的结构的地址,用来传递给lpEnumModesCallback参数所指定的列举回调函数。
lpEnumModesCallback
EnumModesCallback回调函数的地址,每列举出一个显示模式的时候,该函数将被执行一次。
返回值:
如果函数调用成功,返回DD_OK。
如果函数调用失败,返回值可能是下列错误值之一:
DDERR_INVALIDOBJECT
DDERR_INVALIDPARAMS
备注:
IDirectDraw2接口的这个方法可以列举出不同显示模式的刷新率;而老版本的IDirectDraw::EnumDisplayModes却无法提供这个功能。如果你用IDirectDraw2::SetDisplayMode来设置某个显示模式的刷新率,你必须先用IDirectDraw2::EnumDisplayModes来列举出dwRefreshRate成员(存在于EnumModesCallback回调函数中的DDSURFACEDESC结构中)。
快速信息:
Windows NT:适用于4.0或更新版
Windows:适用于Windows 95或更新版
Windows CE:不支持
头文件:ddraw.h
库文件:ddraw.lib
请参阅:
IDirectDraw2::GetDisplayMode,IDirectDraw2::SetDisplayMode,IDirectDraw2::RestoreDisplayMode
列举出所有满足指定的搜索条件的已经存在或可能存在的页面。
HRESULT EnumSurfaces(
DWORD dwFlags,
LPDDSURFACEDESC lpDDSD,
LPVOID lpContext,
LPDDENUMSURFACESCALLBACK lpEnumSurfacesCallback
);
参数:
dwFlags
下列值的其中一个:
DDENUMSURFACES_ALL
列举出满足搜索条件的所有页面。
DDENUMSURFACES_CANBECREATED
列举出可以被创建并且满足搜索条件的第一个页面。
DDENUMSURFACES_DOESEXIST
列举出满足搜索条件的已经存在的页面。
DDENUMSURFACES_MATCH
搜索任何一个符合页面描述的页面。
Searches for any surface that matches the surface description.
DDENUMSURFACES_NOMATCH
搜索任何一个不符合页面描述的页面。
lpDDSD
一个DDSURFACEDESC结构的地址,用来定义列举页面的依据。
lpContext
一个应用程序定义的结构,用来传递给列举的回调函数。
lpEnumSurfacesCallback
EnumSurfacesCallback回调函数的地址,每列举出一个页面的时候,将执行该函数。
返回值:
如果函数调用成功,返回DD_OK。
如果函数调用失败,返回值可能是下列错误值之一:
DDERR_INVALIDOBJECT
DDERR_INVALIDPARAMS
备注:
如果DDENUMSURFACES_CANBECREATED标志被设置,该函数将尝试临时的创建一个满足条件的页面。注意:当一个页面被列举的时候,它的引用记录(Reference count)递增1,如果你不打算使用该页面,就应该在每次列举之后调用IDirectDraw::Release来释放该页面。
在IDirectDraw的接口版本中,这个函数的dwFlags参数不支持任何值,除了0。
快速信息:
Windows NT:适用于4.0或更新版
Windows:适用于Windows 95或更新版
Windows CE:不支持
头文件:ddraw.h
库文件:ddraw.lib
使GDI所写向的页面成为主页面。
HRESULT FlipToGDISurface();
参数:
无
返回值:
如果函数调用成功,返回DD_OK。
如果函数调用失败,返回值可能是下列错误值之一:
DDERR_INVALIDOBJECT
DDERR_INVALIDPARAMS
DDERR_NOTFOUND
备注:
这个函数可以在一个换页的应用程序结束之前调用,以确保GDI所写向的显示内存对用户来说是可见的。
快速信息:
Windows NT:适用于4.0或更新版
Windows:适用于Windows 95或更新版
Windows CE:不支持
头文件:ddraw.h
库文件:ddraw.lib
请参阅:
IDirectDraw2::GetGDISurface
该函数可以获得所有可用的显存容量值,和当前可以为某种指定类型的页面所用的空余显存容量值。
HRESULT GetAvailableVidMem(
LPDDSCAPS lpDDSCaps,
LPDWORD lpdwTotal,
LPDWORD lpdwFree
);
参数:
lpDDSCaps
一个DDSCAPS结构的地址,用来指定被提供的页面的硬件性能。
lpdwTotal
一个变量的地址,将返回所有可用的显存容量值。
lpdwFree
一个变量的地址,将返回当前可以分配给某指定类型的页面的空余显存容量值,该页面的类型符合lpDDSCaps结构。
返回值:
如果函数调用成功,返回DD_OK。
如果函数调用失败,返回值可能是下列错误值之一:
DDERR_INVALIDCAPS
DDERR_INVALIDOBJECT
DDERR_INVALIDPARAMS
DDERR_NODIRECTDRAWHW
如果给lpdwTotal或lpdwFree的值为NULL,则不返回该参数的值。
备注:
下面的C++例子演示了如何使用IDirectDraw2::GetAvailableVidMem来测得可以为材质贴图页面(texture-map surfaces)所用的全部和空余的显存数量。
LPDIRECTDRAW2 lpDD2;
DDSCAPS ddsCaps;
DWORD dwTotal;
DWORD dwFree;
ddres = lpDD->QueryInterface(IID_IDirectDraw2, &lpDD2);
if (FAILED(ddres))
.
.
ddsCaps.dwCaps = DDSCAPS_TEXTURE;
ddres = lpDD2->GetAvailableVidMem(&ddsCaps, &dwTotal, &dwFree);
if (FAILED(ddres))
.
.
这个函数只是为当前的显存状态做了一个快照。空余显存容量将随着页面的创建和销毁而不断的改变。因此,你应该把这个空余容量当作一个近似值来使用。此外,某些种类的显示卡不会将某两种不同的显存类型视为不同。例如:某显卡可能会使用显存上的同一区域既储存z-缓冲区值,又储存材质。于是,给其中的某一个页面类型(如z-缓冲区)分配内存将影响到另一个页面类型(如材质)所能使用的内存容量。因此,最好的做法是:首先就给应用程序划分好固定的资源(比如前台和后台缓冲区,z-缓冲区),而不是动态的分配内存(如材质贴图)。
该函数在IDirectDraw接口中不存在。
快速信息:
Windows NT:适用于4.0或更新版
Windows:适用于Windows 95或更新版
Windows CE:不支持
头文件:ddraw.h
库文件:ddraw.lib
获得硬件和硬件仿真层(HEL)的设备驱动性能。
HRESULT GetCaps(
LPDDCAPS lpDDDriverCaps,
LPDDCAPS lpDDHELCaps
);
参数:
lpDDDriverCaps
将被填充设备驱动所报告的描述了硬件性能的DDCAPS结构的地址。如果不想获得该描述,设置该参数为NULL。
lpDDHELCaps
将被填充描述硬件仿真层(HEL)性能的DDCAPS结构的地址。如果不想获得该描述,设置该参数为NULL。
返回值:
如果函数调用成功,返回DD_OK。
如果函数调用失败,返回值可能是下列错误值之一:
DDERR_INVALIDOBJECT
DDERR_INVALIDPARAMS
用户只能将两个参数之中的一个设为NULL以排除该参数。如果两个参数均被设为NULL,该函数返回DDERR_INVALIDPARAMS 。
快速信息:
Windows NT:适用于4.0或更新版
Windows:适用于Windows 95或更新版
Windows CE:不支持
头文件:ddraw.h
库文件:ddraw.lib
获得当前的显示模式。
HRESULT GetDisplayMode(
LPDDSURFACEDESC lpDDSurfaceDesc
);
参数:
lpDDSurfaceDesc
一个DDSURFACEDESC结构的地址,将被填充页面描述。
返回值:
如果函数调用成功,返回DD_OK。
如果函数调用失败,返回值可能是下列错误值之一:
DDERR_INVALIDOBJECT
DDERR_INVALIDPARAMS
DDERR_UNSUPPORTEDMODE
备注:
应用程序不应该保存这个函数所返回的信息,以在程序收尾时恢复显示模式。而应该在程序收尾时调用IDirectDraw2::RestoreDisplayMode函数来恢复显示模式,从而避免在多进程的环境中导致模式设置的冲突。
快速信息:
Windows NT:适用于4.0或更新版
Windows:适用于Windows 95或更新版
Windows CE:不支持
头文件:ddraw.h
库文件:ddraw.lib
请参阅:
IDirectDraw2::SetDisplayMode,IDirectDraw2::RestoreDisplayMode,,IDirectDraw2::EnumDisplayModes
获得DirectDraw对象所支持的FOURCC代码,也可获得所支持的代码个数。
HRESULT GetFourCCCodes(
LPDWORD lpNumCodes,
LPDWORD lpCodes
);
参数:
lpNumCodes
一个DWORD型变量的地址,包含了lpCodes参数可以容纳的FOURCC代码入口的个数。如果入口的个数太小以致于不能容纳所有的FOURCC代码,lpNumCodes将被设为所请求的个数,并且lpCodes所指向的序列将填入适当的代码。
lpCodes
一个DWORD型变量序列的地址,将被填充该DirectDraw对象所支持的FOURCC代码。如果给该参数指定了NULL,lpNumCodes参数将返回该DirectDraw对象所支持的FOURCC代码的种类个数。
返回值:
如果函数调用成功,返回DD_OK。
如果函数调用失败,返回值可能是下列错误值之一:
DDERR_INVALIDOBJECT
DDERR_INVALIDPARAMS
快速信息:
Windows NT:适用于4.0或更新版
Windows:适用于Windows 95或更新版
Windows CE:不支持
头文件:ddraw.h
库文件:ddraw.lib
获得当前GDI视为主页面的DirectDrawSurface对象。
HRESULT GetGDISurface(
LPDIRECTDRAWSURFACE FAR *lplpGDIDDSSurface
);
参数:
lplpGDIDDSSurface
一个指向DirectDrawSurface对象的指针的地址,该DirectDrawSurface对是当前GDI所控制的主页面内存。
返回值:
如果函数调用成功,返回DD_OK。
如果函数调用失败,返回值可能是下列错误值之一:
DDERR_INVALIDOBJECT
DDERR_INVALIDPARAMS
DDERR_NOTFOUND
快速信息:
Windows NT:适用于4.0或更新版
Windows:适用于Windows 95或更新版
Windows CE:不支持
头文件:ddraw.h
库文件:ddraw.lib
请参阅:
IDirectDraw2::FlipToGDISurface
获得DirectDraw对象驱动的显示器的刷新频率。
HRESULT GetMonitorFrequency(
LPDWORD lpdwFrequency
);
参数:
lpdwFrequency
一个变量的地址,将获得显示器的刷新频率,单位为:Hz。
返回值:
如果函数调用成功,返回DD_OK。
如果函数调用失败,返回值可能是下列错误值之一:
DDERR_INVALIDOBJECT
DDERR_INVALIDPARAMS
DDERR_UNSUPPORTED
快速信息:
Windows NT:适用于4.0或更新版
Windows:适用于Windows 95或更新版
Windows CE:不支持
头文件:ddraw.h
库文件:ddraw.lib
The IDirectDraw2::GetScanLine method retrieves the scan line that is currently being drawn on the monitor.
HRESULT GetScanLine(
LPDWORD lpdwScanLine
);
参数:
lpdwScanLine
一个变量的地址,将获得当前显示扫描线的位置。
返回值:
如果函数调用成功,返回DD_OK。
如果函数调用失败,返回值可能是下列错误值之一:
DDERR_INVALIDOBJECT
DDERR_INVALIDPARAMS
DDERR_UNSUPPORTED
DDERR_VERTICALBLANKINPROGRESS
备注:
扫描线(Scan lines)的位置是一个以0为下限的整数。返回的扫描线的值范围处于0到n之间,0是屏幕上第一条可见的扫描线,n是最后一条可见的扫描线,加上了所有的
Scan lines are reported as zero-based integers. The returned scan line value is between 0 and n, where scan line 0 is the first visible scan line on the screen and n is the last visible scan line, plus any scan lines that occur during vblank. So, in a case where an application is running at 640480, and there are 12 scan lines during vblank, the values returned by this method will range from 0 to 491.
快速信息:
Windows NT:适用于4.0或更新版
Windows:适用于Windows 95或更新版
Windows CE:不支持
头文件:ddraw.h
库文件:ddraw.lib
请参阅:
IDirectDraw2::GetVerticalBlankStatus, IDirectDraw2::WaitForVerticalBlank
The IDirectDraw2::GetVerticalBlankStatus method retrieves the status of the vertical blank.
HRESULT GetVerticalBlankStatus(
LPBOOL lpbIsInVB
);
参数:
lpbIsInVB
Address of the variable that will be filled with the status of the vertical blank. This parameter is TRUE if a vertical blank is occurring, and FALSE otherwise.
返回值:
如果函数调用成功,返回DD_OK。
如果函数调用失败,返回值可能是下列错误值之一:
DDERR_INVALIDOBJECT
DDERR_INVALIDPARAMS
备注:
To synchronize with the vertical blank, use the IDirectDraw2::WaitForVerticalBlank method.
快速信息:
Windows NT:适用于4.0或更新版
Windows:适用于Windows 95或更新版
Windows CE:不支持
头文件:ddraw.h
库文件:ddraw.lib
请参阅:
IDirectDraw2::GetScanLine, IDirectDraw2::WaitForVerticalBlank
该函数初始化一个用CoCreateInstance COM函数创建的DirectDraw对象。.
HRESULT Initialize(
GUID FAR *lpGUID
);
参数:
lpGUID
全局唯一标志符(GUID)的地址,用做接口标志符。
返回值:
如果函数调用成功,返回DD_OK。
如果函数调用失败,返回值可能是下列错误值之一:
DDERR_ALREADYINITIALIZED
DDERR_DIRECTDRAWALREADYCREATED
DDERR_GENERIC
DDERR_INVALIDOBJECT
DDERR_INVALIDPARAMS
DDERR_NODIRECTDRAWHW
DDERR_NODIRECTDRAWSUPPORT
DDERR_OUTOFMEMORY
这个函数是为了符合部件对象模型(COM)的协议而提供。如果该DirectDraw对象是由调用DirectDrawCreate函数创建的,该函数返回DDERR_ALREADYINITIALIZED。如果在使用CoCreateInstance 创建一DirectDraw对象后,没有调用IDirectDraw2::Initialize,对该DirectDraw对象的任何使用都将导致一个DDERR_NOTINITIALIZED的错误。
备注:
要得到更多的关于如何使用IDirectDraw2::Initialize和CoCreateInstance的资料,请参阅:用CoCreateInstance创建DirectDraw对象。
快速信息:
Windows NT:适用于4.0或更新版
Windows:适用于Windows 95或更新版
Windows CE:不支持
头文件:ddraw.h
库文件:ddraw.lib
该函数用来重设主页面的显示模式至IDirectDraw2::SetDisplayMode函数被调用之前的状态。要使用该函数,应用程序必须具有独占模式。
HRESULT RestoreDisplayMode();
参数:
无
返回值:
如果函数调用成功,返回DD_OK。
如果函数调用失败,返回值可能是下列错误值之一:
DDERR_GENERIC
DDERR_INVALIDOBJECT
DDERR_INVALIDPARAMS
DDERR_LOCKEDSURFACES
DDERR_NOEXCLUSIVEMODE
快速信息:
Windows NT:适用于4.0或更新版
Windows:适用于Windows 95或更新版
Windows CE:不支持
头文件:ddraw.h
库文件:ddraw.lib
请参阅:
IDirectDraw2::SetDisplayMode,IDirectDraw2::EnumDisplayModes,IDirectDraw2::SetCooperativeLevel
该函数决定了应用程序最高层次的行为模式。
HRESULT SetCooperativeLevel(
HWND hWnd,
DWORD dwFlags
);
参数:
hWnd
应用程序所使用的窗口的句柄。当设置dwFlags为DDSCL_NORMAL时,这个参数可以是NULL。
dwFlags
可以是以下标志的单个或组合:
DDSCL_ALLOWMODEX
允许使用Mode X显示模式。这个标志必须与DDSCL_EXCLUSIVE和DDSCL_FULLSCREEN一起使用。
DDSCL_ALLOWREBOOT
当处于独占(全屏)模式时,允许使用CTRL+ALT+DEL组合键。
DDSCL_CREATEDEVICEWINDOW
这个标志只在Windows 98和Windows NT 5.0中被支持。表明DirectDraw接口将为该DirectDraw对象创建和管理一个缺省的设备窗口。要得到更多信息,请参阅缺省设备窗口。
DDSCL_EXCLUSIVE
请求独占模式。这个标志必须与DDSCL_FULLSCREEN同时使用。
DDSCL_FULLSCREEN
指定独占模式的所有者将管理整个主页面。GDI可以被忽略。这个标志必须与DDSCL_EXCLUSIVE同时使用。
DDSCL_NORMAL
指定应用程序将以普通窗口的形式出现。这个标志不能与DDSCL_ALLOWMODEX、DDSCL_EXCLUSIVE或DDSCL_FULLSCREEN同时使用。
DDSCL_NOWINDOWCHANGES
表明DirectDraw不允许最小化或还原应用程序窗口。
DDSCL_SETDEVICEWINDOW
这个标志只在Windows 98和Windows NT 5.0中被支持。表明hWnd参数是该DirectDraw对象的设备窗口句柄。这个标志不能与DDSCL_SETFOCUSWINDOW同时使用。
DDSCL_SETFOCUSWINDOW
这个标志只在Windows 98和Windows NT 5.0中被支持。表明hWnd参数是该DirectDraw对象的焦点窗口句柄。这个标志不能与DDSCL_SETDEVICEWINDOW同时使用。
返回值:
如果函数调用成功,返回DD_OK。
如果函数调用失败,返回值可能是下列错误值之一:
DDERR_EXCLUSIVEMODEALREADYSET
DDERR_HWNDALREADYSET
DDERR_HWNDSUBCLASSED
DDERR_INVALIDOBJECT
DDERR_INVALIDPARAMS
DDERR_OUTOFMEMORY
备注:
一个应用程序必须设置DDSCL_EXCLUSIVE和DDSCL_NORMAL标志中的一个。
DDSCL_EXCLUSIVE标志必须为那些具有激烈的动态效果的程序所设置。要得到更多的信息,请参阅控制级。
这个函数与IDirectDraw2::SetDisplayMode函数之间的相互影响因为IDirectDraw版本的不同而不同。要得到更多资料,请参阅IDirectDraw2接口的“控制级与显示模式”。
快速信息:
Windows NT:适用于4.0或更新版
Windows:适用于Windows 95或更新版
Windows CE:不支持
头文件:ddraw.h
库文件:ddraw.lib
相关资料:
IDirectDraw2::SetDisplayMode,IDirectDraw2::Compact,IDirectDraw2::EnumDisplayModes,Mode X和Mode 13 显示模式,焦点和设备窗口,缺省设备窗口。
该函数设置显示器的显示模式。
HRESULT SetDisplayMode(
DWORD dwWidth,
DWORD dwHeight,
DWORD dwBPP,
DWORD dwRefreshRate,
DWORD dwFlags
);
参数:
dwWidth and dwHeight
显示模式的宽度和高度。
dwBPP
显示模式的位深度(bpp)。
dwRefreshRate
显示模式的刷新率。如果这个参数为0,将使用IDirectDraw 接口的该函数的版本。
dwFlags
额外的选项。目前,唯一可用的标志是DDSDM_STANDARDVGAMODE,它将使显示模式被设为Mode 13,而不是Mode X 320x200x8。如果你要设置另一种分辨率,位深度或Mode X模式,不要使用这个参数,并且将其设为0。
返回值:
如果函数调用成功,返回DD_OK。
如果函数调用失败,返回值可能是下列错误值之一:
DDERR_GENERIC
DDERR_INVALIDMODE
DDERR_INVALIDOBJECT
DDERR_INVALIDPARAMS
DDERR_LOCKEDSURFACES
DDERR_NOEXCLUSIVEMODE
DDERR_SURFACEBUSY
DDERR_UNSUPPORTED
DDERR_UNSUPPORTEDMODE
DDERR_WASSTILLDRAWING
备注:
如果另一个应用程序改变了显示模式,主页面将丢失,并且返回一个DDERR_SURFACELOST的错误值,直到它被重建以适合新的显示模式。IDirectDraw接口的这个函数,没有包含dwRefreshRate和dwFlags参数。
快速信息:
Windows NT:适用于4.0或更新版
Windows:适用于Windows 95或更新版
Windows CE:不支持
头文件:ddraw.h
库文件:ddraw.lib
相关资料:
IDirectDraw2::RestoreDisplayMode,IDirectDraw2::GetDisplayMode,IDirectDraw2::EnumDisplayModes,IDirectDraw2::SetCooperativeLevel,IDirectDraw2的控制级和显示模式,设置显示模式。
The IDirectDraw2::WaitForVerticalBlank method helps the application synchronize itself with the vertical-blank interval.
HRESULT WaitForVerticalBlank(
DWORD dwFlags,
HANDLE hEvent
);
参数:
dwFlags
Determines how long to wait for the vertical blank.
DDWAITVB_BLOCKBEGIN
Returns when the vertical-blank interval begins.
DDWAITVB_BLOCKBEGINEVENT
Triggers an event when the vertical blank begins. This value is not currently supported.
DDWAITVB_BLOCKEND
Returns when the vertical-blank interval ends and the display begins.
hEvent
Handle of the event to be triggered when the vertical blank begins. This parameter is not currently used.
返回值:
如果函数调用成功,返回DD_OK。
如果函数调用失败,返回值可能是下列错误值之一:
DDERR_INVALIDOBJECT
DDERR_INVALIDPARAMS
DDERR_UNSUPPORTED
DDERR_WASSTILLDRAWING
快速信息:
Windows NT:适用于4.0或更新版
Windows:适用于Windows 95或更新版
Windows CE:不支持
头文件:ddraw.h
库文件:ddraw.lib
请参阅:
IDirectDraw2::GetVerticalBlankStatus, IDirectDraw2::GetScanLine