在CB中进行DirectX编程(1)
.2.2.3 获得COM的IDIRECT2接口
由于DirectX采用了对象组件模型COM技术(这里不再介绍),因此如果我们需要使用DirectX5或以上版本提供的功能,就需要获得更高的IDirectDraw接口,例如:如果我们使用DirectX5开发包,就需要获得IDirectDraw2接口。 可以利用HRESULT IdirectDraw::QueryInterface方法获得高版本接口: lpDD->QueryInterface(IID_IDirectDraw2, (LPVOID *)LPDIRECTDRAW2 &lpDD2) 参数IID_IDirectDraw2是一个常量。 lpDD2是为获得的IdDrectDraw2接口指针。 如果您需要使用更高版本的开发包,也可以用此方法获得IDirectDraw3或更高的接口。高版本接口获得后,就可以释放低版本的接口了,方法是:lpDD->Release(); 2.2.2.4 设置协作级别 玩过DirectX游戏的朋友可能都领略过“全屏独占”和“窗口”两种图形模式,这就可以称为不同的协作级别,它控制应用程序与系统及其它应用程序的交互程度,因此我们必需用HRESULT IDIRECTDRAW2::SetCooperateLevel方法设置应用程序的协作级别。 LpDD2->SetCooperateLevel(HWND handle,DWORD dwFlag) (1)参数handle是当前应用程序窗口的句柄,在C++Builder中,TForm类的Handle属性就是当前应用程序窗口的句柄。 (2)参数dwFlag是协作标志,可以为表2.2中定义之一或多个之和。 序号 标志 说明 (1) DDSCL_ALLOWMODEX 允许使用Mode X模式。必须与(3)、(4)组合使用 (2) DDSCL_ALLOWREBOOT 当使用(3)、(4)时允许用户进行热启动 (3) DDSCL_EXCLUSIVE 使用独占方式,与(4)一起使用 (4) DDSCL_FULLSCREEN 全屏方式,与(3)一起使用 (5) DDSCL_NORMAL 以普通应用程序窗口方式运行 (6) DDSCL_NOWINDOWCHANGES DirectDraw不能自动最小化或恢复窗口 表2.2 dwFlag标志定义 在我们的dx1示例程序中,默认设置为: DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN|DDSCL_NOWINDOWCHANGES 2.2.2.5 DDraw2显示模式的枚举 利用HRESULT IDIRECTDRAW2::EnumDisplayModes方法及其相应的回调函数可以列出系统显示设备所支持的显示方式。您开发的应用程序可以判定当前运行的计算机是否支持所需的显示方式,也可以提供用户选择显示方式的功能。 lpDD2->EnumDisplayModes(DWORD dwFlag, LPDDSURFACEDESC lpDDSurfaceDesc, LPVOID lpContext, LPDDENUMMODESCALLBACK EnumDisplayModesCallBack (1)参数dwFlag是标志参数,可以为DDEDM_REFRESHRATES(枚举不同刷新频率的刷新模式)和DDEDM_STANDARDVGAMODES(枚举模式中包含Mode13)两者之一或之和,在dx1程序中采用了后者。 (2)参数lpDDSurfaceDesc是一个过滤显示模式的结构,只要设置为NULL就可以获得全部显示模式的枚举,否则只获得满足指定模式的枚举。 LPDDSURFACEDESC是一个结构,其中包含了显示模式有关信息,主要有: 屏幕点阵 DWORD dwWidth、DWORD dwHeight; 色彩深度 DWORD ddpfPixelFormat.dwRGBBitCount 屏幕刷新频率 DWORD dwRefreshRate (3)参数lpContex为用户上下文变量,设为NULL就可以了。 (4)参数EnumDisplayModesCallBack为回调函数指针,该回调函数规定有如下参数格式: BOOL WINAPI EnumDisplayModesCallBack(LPDDSURFACEDESC lpDDSurfaceDesc LPVOID lpContext) 其中:lpDDSurfaceDesc为当前所枚举显示模式的信息,lpContext为用户上下文变量。 在dx1程序中,此回调函数负责将每次回调的显示模式信息显示到ComboBox2中,并记录到一个结构数组DisplayModes中。 2.2.2.6 设置DDraw2的显示方式 每当用户选择了一个显示模式并点击“设置DDraw2的显示方式”按钮后,dx1将使用RESULT IdirectDraw2::SetDisplayMode方法改 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |