扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
Dim DirectX As New DirectX7 |
Option Explicit Dim DirectX As New DirectX7 Dim DDEnum As DirectDrawEnum Dim DDSound As DirectSoundEnum Private Sub Command1_Click() Dim Count, i As Integer Set DDEnum = DirectX.GetDDEnum Count = DDEnum.GetCount List1.Clear For i = 1 To Count List1.AddItem DDEnum.GetDescription(i) Next i Set DDEnum = Nothing End Sub Private Sub Command2_Click() Dim Count, i As Integer Set DDEnum = DirectX.GetDDEnum Count = DDEnum.GetCount List1.Clear For i = 1 To Count List1.AddItem DDEnum.GetName(i) Next i Set DDEnum = Nothing End Sub Private Sub Command3_Click() Dim Count, i As Integer Set DDSound = DirectX.GetDSEnum Count = DDSound.GetCount List1.Clear For i = 1 To Count List1.AddItem DDSound.GetDescription(i) Next i End Sub Private Sub Command4_Click() Dim Count, i As Integer Set DDSound = DirectX.GetDSEnum Count = DDSound.GetCount List1.Clear For i = 1 To Count List1.AddItem DDSound.GetName(i) Next i End Sub Private Sub Form_Load() Command1.Caption = “DirectDraw驱动描述” Command2.Caption = “DirectDraw驱动名称” Command3.Caption = “DirectSound驱动描述” Command4.Caption = “DirectSound驱动名称” End Sub Private Sub Form_Unload(Cancel As Integer) Set DirectX = Nothing End Sub |
Dim DX As New DirectX7 Dim DDraw As DirectDraw7 Set DDraw = DX.DirectDrawCreate(“”) |
object.SetCooperativeLevel( hdl As Long, flags As CONST_DDSCLFLAGS) |
DDraw.SetCooperativeLevel Me.hWnd, DDSCL_NORMAL |
DDraw.SetCooperativeLevel MainForm.hWnd, DDSCL_EXCLUSIVE Or _ DDSCL_FULLSCREEN |
2.3 设置显示模式
设置显示模式是使用SetDispalyMode函数实现的,函数的定义如下:
object.SetDisplayMode( _ w As Long, _ h As Long, _ bpp As Long, _ ref As Long, _ mode As CONST_DDSDMFLAGS |
其中参数w、h分别指定屏幕的宽度和高度,bpp指定屏幕显示的颜色位数,参数ref指定屏幕的刷新频率,设置为0使用显示驱动的缺省刷新频率,mode指定附加的参数。要获得系统支持的显示模式,可以使用DirectDraw对象的GetDisplayModesEnum函数来遍历所有支持的显示模式。
2.4 建立平面对象
一个平面或者说DirectDrawSurface对象是DirectDraw中图形显示和绘制对象。用户可以在DirectDrawSurface上贴位图、绘制图形,还可以直接操作DirectDrawSurface对象使用显存里的内容。利用DirectDraw对象的CreateSurface方法可以建立一个DirectDrawSurface7对象。例如:
Public DDSFrontDesc As DDSURFACEDESC2 With DDSFrontDesc .lFlags = DDSD_CAPS .ddsCaps.lCaps=DDSCAPS_PRIMARYSURFACE ' End With Set DDSFront = DDraw.CreateSurface(DDSFrontDesc) |
也可以利用DirectDraw对象的CreateSurfaceFromFile函数或者CreateSurfaceFromResource函数建立一个DirectDrawSurface7对象,同时将图像文件或者资源文件中的图像装入建立的DirectDrawSurface中。如果上面的函数调用成功,函数将返回一个DirectDrawSurface对象。如果在设定DirectDraw对象的协作层时将其设置为全屏幕模式的话,为了改善图像性能,可以设立一个主平面和若干个屏下缓冲平面,首先在屏下平面中生成图像,然后将图像翻转到主平面上,这样可以有效地避免图像闪烁。
下面通过一个具体的范例来对DirectDraw进行说明:这个范例建立一个全屏幕的DirectDraw对象,通过操作主显示平面的显示内存在屏幕上显示火焰字的特效,然后按Enter键可以将DirectDraw平面中的图形保存起来。程序的具体实现如下:
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者