当前位置: 首页 > 文档资料 > DirectX 中文教程 >

IDirectDraw2接口

优质
小牛编辑
147浏览
2023-12-01

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;

    1. IDirectDraw2::Compact
    2. 目前,该函数尚未完成,还不能使用。

      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

    3. IDirectDraw2::CreateClipper
    4. 创建一个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

    5. IDirectDraw2::CreatePalette
    6. 为该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

    7. IDirectDraw2::CreateSurface
    8. 该函数为该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

    9. IDirectDraw2::DuplicateSurface
    10. 复制一个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

    11. IDirectDraw2::EnumDisplayModes
    12. 该函数列举出暴露于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

    13. IDirectDraw2::EnumSurfaces
    14. 列举出所有满足指定的搜索条件的已经存在或可能存在的页面。

      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

    15. IDirectDraw2::FlipToGDISurface
    16. 使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

    17. IDirectDraw2::GetAvailableVidMem
    18. 该函数可以获得所有可用的显存容量值,和当前可以为某种指定类型的页面所用的空余显存容量值。

      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

    19. IDirectDraw2::GetCaps
    20. 获得硬件和硬件仿真层(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

    21. IDirectDraw2::GetDisplayMode
    22. 获得当前的显示模式。

      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

    23. IDirectDraw2::GetFourCCCodes
    24. 获得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

    25. IDirectDraw2::GetGDISurface
    26. 获得当前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

    27. IDirectDraw2::GetMonitorFrequency
    28. 获得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

    29. IDirectDraw2::GetScanLine
    30. 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

    31. IDirectDraw2::GetVerticalBlankStatus
    32. 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

    33. IDirectDraw2::Initialize
    34. 该函数初始化一个用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

    35. IDirectDraw2::RestoreDisplayMode
    36. 该函数用来重设主页面的显示模式至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

    37. IDirectDraw2::SetCooperativeLevel
    38. 该函数决定了应用程序最高层次的行为模式。

      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 显示模式,焦点和设备窗口,缺省设备窗口。

    39. IDirectDraw2::SetDisplayMode
    40. 该函数设置显示器的显示模式。

      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的控制级和显示模式,设置显示模式。

    41. IDirectDraw2::WaitForVerticalBlank

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