在CB中进行DirectX编程(3)
创建主图面需要以下步骤: (1)获得并设置DDSURFACEDESC结构的尺寸dwSize:ddsd.dwSize=sizeof(ddsd); (2)简单地设置ddsd.dwFlags=DDSD_CAPS; (3)设置主图面标志:ddsd.ddsCaps.dwCaps=DDSCAPS_PRIMARYSURFACE; (4)调用CreateSurface方法创建图面。 2.3.3.2 创建后台图面 后台图面的创建与创建主图面基本相同,只是在DDDURFACEDESC结构中多给出一些信息。创建后台图面需要以下步骤: (1) 获得并设置DDSURFACEDESC结构的尺寸dwSize:ddsd.dwSize=sizeof(ddsd); (2) 设置ddsd.dwFlags=DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH; (3) 设置后台表面的宽和高(dx2中设为100):ddsd.dwHeight=100; ddsd.dwWidth=100; (4) 设置后台图面标志:ddsd.ddsCaps.dwCaps=DDSCAPS_OFFSCREENPLAIN; (5)调用CreateSurface方法创建图面。 2.3.3.3 图形文件的装入后台图面和图形文件的装入主图面 图形文件的装入主要采用Windows的函数,虽然使用C++Builder的TCavas对象打开图形文件要方便一些,但是在BitBlt时不够稳定,因此dx2还是选择了前者。 dx2在实现图形内存数据复制时采用了GDI,在DirectDrawSurface对象中有GetDC和ReleaseDC两个方法,以便取得HDC并调用GDI。 HRESULT IDirectDrawSurface::GetDC(HDC FAR *hdc) HRESULT IDirectDrawSurface::ReleaseDC(HDC hdc) 参数hdc是一个设备句柄。 BitBlt虽然速度比较慢,但是兼容性好,能够支持不同的显示模式,而且能够自动进行格式转换。 2.3.3.4 后台图面图形拷贝到主图面显示 这里同样使用了BitBlt,将后台图面的数据复制到主图面并显示出来。 2.3.3.5 丢失图面及恢复初始显示方式和图面 在dx2中我们演示了当改变屏幕显示方式时,图面丢失的现象,并且说明了在图面丢失后可以用HRESULT IDirectDrawSurface::Restore()方法来恢复图面,同时必需重新绘制图面上的图形。 Restore方法没有参数,但是若要成功恢复已丢失的图面,必需屏幕显示方式重新恢复到其初始的状态。 为了判断图面是否已经丢失,也可以使用HRESULT IDirectDrawSurface::IsLost()方法来进行检测,若返回值为DDERR_SURFACELOST则说明图面确实丢失了。在dx2中没有进行此判断,读者可以根据自己的理解修改dx2,实现恢复图面前首先进行图面是否丢失的判断。 2.3.4 dx2源程序 2.3.4.1 dx2主要文件的组成为:工程文件(dx2.bpr)、窗口文件(main.cpp)、头文件(main.h)、view.bmp。 2.3.4.2 头文件main.h
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |