📄 bcjq103.txt
字号:
2.3.1.3 图面的丢失
在DirectDraw应用程序被最小化、屏幕显示方式改变或用户按Alt+Tab键切换当前应用程序时,图面将会丢失,因此在重新回到DirectDraw应用程序中时,必需用Restore方法恢复图面。遗憾的是,虽然图面被恢复了,但其中图形数据却丢失了,需要重新绘制。
2.3.2 dx2运行过程
启动dx2程序后,只有第一个“执行”按钮可以使用,按下该按钮后,系统将创建DirectDraw对象,并设置为800*600全屏幕显示方式;按顺序按下“创建主图面”、“创建
图2.2 dx2
装入并显示图形文件程序运行界面
后台图面”按钮,分别创建对应屏幕显示的主图面和100*100点阵的后台图面;按下“后台图面装入图形”按钮,则图形文件view.bmp被一100*100点阵装入到后台图面,屏幕上看不见图形;再按下“主图面装入图形”按钮,view.bmp以200*100点阵缩放后装入到主图面(屏幕)的(0,0)位置,此时图形显示在屏幕左上角;继续按“拷贝后台图面到主图面”,将把后台图面的100*100图形显示在屏幕的(200,0)位置,我们可以看到两副同样的图形以不同的缩放比例并排显示在屏幕左上方;按下“图面丢失”后,屏幕被设置成640*480的显示方式,屏幕上显示出的图形消失了;用“恢复丢失的图面”按钮重新设置显示方式为800*600(必需恢复显示方式,否则图面恢复将会失败)并恢复图面,此时,失去的图形在屏幕上仍然看不见;最后,按“重新显示图形”来重新绘制view.bmp,屏幕重新展现原有的图形。
2.3.3 dx2程序的编程实现
2.2.2 dx1编程实现
启动C++ Builder后在窗口Form1中设计如图2.2的操作界面,各对象相关属性设置如表2.3:
控件对象类型
控件对象名称
相关属性
属性值
TForm
Form1
Caption
DirectX 练习程序1
TLabel
Label1
Caption
运行状态:
TLabel
Label2
Caption
设备的枚举
Tlabel
Label3
Caption
显示模式DDraw2
TEdit
Edit1
Text
(空)
ReadOnly
True
TGroupBox
GroupBox1
Caption
状态
TCheckBox
CheckBox6
Caption
DDSCL_NOWINDOWCHANGES
Checked
true
TButton
Button1
Caption
执行
TButton
Button2
Caption
创建主图面
Enabled
False
TButton
Button3
Caption
创建后台图面
Enabled
False
TButton
Button4
Caption
后台图面装入图形
Enabled
False
TButton
Button5
Caption
主图面装入图形
Enabled
False
TButton
Button6
Caption
拷贝后台图面到主图面
Enabled
False
TButton
Button7
Caption
图面丢失:设置640*480方式
Enabled
False
TButton
Button8
Caption
恢复已丢失的图面
Enabled
False
TButton
Button9
Caption
重新显示图形
Enabled
False
表2.3 dx2控件对象属性设置一览表
2.3.3.1 创建主图面
用HRESULT IDirectDraw::CreateSurface来创建图面:
lpDD2->CreateSurface(LPDDSURFACEDESC
lpDDSurfaceDesc,
LPDIRECTDRAWSURFACE FAR *lpDDSurface,
Iunknown FAR *pUnkOuter)
(1)参数lpDDSurfaceDesc是一个志向DDSURFACEDESC结构的指针,DDSURFACEDESC结构的定义比较复杂,幸好一般只需要使用其中很少的一部分。结构DDSURFACEDESC的部分描述如表2.4所示:
结构成员
描述
DOWRD dwSize
DDSURFACE结构的尺寸。在使用此结构之前,此项数据必需用sizeof函数设置
DWORD dwFlags
控制标志。主要可以设置的标志为:
DDSD_CAPS、
DDSD_HEIGHT、
DDSD_WIDTH、
DDSD_BACKBUFFERCOUNT、
DDSD_PIXELFORMATDENG 等
DWORD dwHeight
图面高度。主图面不需要设置
DWORD dwWidth
图面宽度。主图面不需要设置
DDSCAPS ddsCaps
图面能力。DDSCAPS也是一个结构,在创建图面时需要设置其成员dwCaps的值,以便确定所建图面的性质。
DwCaps的取值主要有:
DDSCAPS_PRIMARYSURFACE:主图面
DDSCAPS_OFFSCREENPLAIN:后台图面
DDSCAPS_COMPLEX:复合图面
DDSCAPS_FLIP:图面翻转链
DDSCAPS_OVERLAY:覆盖图面
DDSCAPS_VIDEOMEMORY:图面创建在显示内存
DDSCAPS_LOCALVIDMEM:使用常规显示内存
DDSCAPS_NONLOCALVIDMEM:使用AGP内存
DDSCAPS_SYSTEMMEMORY:图面创建在系统内存
表2.4 DDSURFACEDESC结构的部分成员说明
(2)参数lpDDSurface返回一个指向所创建图面的指针。
(3)参数pUnkOuter未使用,必需为NULL。
创建主图面需要以下步骤:
(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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -