在CB中进行DirectX编程(1)
true
TCheckBox CheckBox4 Caption DDSCL_FULLSCREEN Checked true TCheckBox CheckBox5 Caption DDSCL_NORMAL TCheckBox CheckBox6 Caption DDSCL_NOWINDOWCHANGES Checked true TButton Button1 Caption 设备的枚举 TButton Button2 Caption 创建DirectDraw对象 Enabled false TButton Button3 Caption 获得COM的IDIRECT2接口 Enabled false TButton Button4 Caption 设置协作级别 Enabled false TButton Button5 Caption DDraw2显示模式的枚举 Enabled false TButton Button6 Caption 设置DDraw2的显示方式 Enabled false 表2.1 dx1控件对象属性设置一览表 确定已安装了DirectX5以上的SDK,且在C++Builder中已经将Project/Options/中标签页“Directories/Conditionals”上的“Include Path”和“Library Path”添加了DirectX5或以上SDK的路径。 在窗口模块中包含 #include "ddraw.h" 头文件。 现在可以开始编写代码了,我们按照按钮的顺序逐个实现每个步骤的任务。 2.2.2.1 设备的枚举 DirectDraw提供了一个函数DirectDrawEnumerate 来实现设备枚举功能,此函数的调用格式为: HRESULT DirectDrawEnumerate (LPDDENUMCALLBACK lpcallback LPVOID lpContext) (1)参数lpcallback是一个回调函数的地址指针。所谓回调函数是程序员自己编写的函数,当枚举函数每枚举一个设备时就调用这个回调函数一次,并把当前枚举的设备有关信息通过参数传递给回调函数处理。 在dx1程序中,回调函数命名为EnumDeviceCallBack,负责将每次枚举出的设备的描述和名称加入到ComboBox1的列表中去,并把设备标识地址指针保存到一个lpDevices数组中以便创建DirectDraw对象时使用。 (2)参数lpContext是一用户定义的上下文变量,我们仅取值NULL就可以了。 (3)DirectDrawEnumerate为回调函数指针,该函数的格式为: BOOL WINAPI EnumDeviceCallBack (GUID FAR *lpGUID, LPSTR lpDevice, LPSTR lpDeviceName, LPVOID lpContex) 其中:参数lpGUID 为当前枚举设备标识地址指针;参数lpDevice 为设备描述的地址指针;参数lpDeviceName 为设备名称的地址指针;参数 lpContext 为上下文变量地址指针,这里我们不使用它。在dx1程序中,此回调函数负责将所枚举设备的名称和描述显示在ComboBox1中,并将设备标识地址保存到lpDevices数组中。为了简化程序,这里的lpDevices数组只采用了静态数组,最多允许保存10个元素。后面在保存显示模式枚举信息时使用的DisplayModes数组也是为了简化程序,在实际编程时可以考虑动态分配。 需要说明的是,回调函数应该是一个独立的函数,不要把它们声明为窗口类的成员函数(否则回调不能进行),而只要声明为普通函数就可以了。 2.2.2.2 创建DirectDraw对象 在进行DirectDraw编程之前,必需首先用DirectDrawCreate函数创建DirectDraw对象,并获得该对象的入口指针。该函数格式如下: HRESULT DirectDrawCreate(GUID FAR *lpDD, LPDIRECTDRAW FAR &lplpDD, Iunknown FAR *p) (1)参数lpDD为指定的设备标识指针(为NULL时是主设备),在dx示例程序中的第一个按钮“设备的枚举”采用静态数组保存枚举设备的标识指针,在第二个按钮创建DirectDraw对象时,可根据用户在ComboBox1中的选择,提供一个设备标识指针,以便对该设备创建DirectDraw对象。 (2)参数 lplpDD 为对象创建成功后的获得IditrctDraw接口指针。 (3)参数p未使用,直接为NULL。 2 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |