手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网络编程>Asp.Net编程>列表

VB中使用DirectX库的简明教程

来源:互联网 作者:西部数码 时间:2008-04-09
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

Call objDraw.RestoreDisplayMode
Call objDraw.SetCooperativeLevel(Me.hWnd, DDSCL_NORMAL)
Set objDraw = Nothing
Set objDx = Nothing
End
End Sub

Private Sub Command1_Click()
CleanUp
End Sub

Private Sub Form_Load()
Command1.Caption = "结束"
Command2.Caption = "设置显示模式"

On Error GoTo ErrHandler:

Dim ddsd As DDSURFACEDESC2
Dim I As Long, lgCount As Long

Set objDx = New DirectX7
'建立 DirectDraw 对象
Set objDraw = objDx.DirectDrawCreate("")

'将DirectDraw对象支持的显示模式设置到DirectDrawEnumModes对象中
Set objEnumModes = objDraw.GetDisplayModesEnum(DDEDM_DEFAULT, ddsd)

'将数据设置到ListBox中
lgCount = objEnumModes.GetCount()
For I = 1 To lgCount
objEnumModes.GetItem I, ddsd
List1.AddItem CStr(ddsd.lWidth) & "x" & CStr(ddsd.lHeight) & "x" _
& CStr(ddsd.ddpfPixelFormat.lRGBBitCount)
Next I

ErrHandler:
Select Case Err.Number
Case 0 ''没有错误
Case Else
Err.Raise Err.Number, Err.Source, Err.Description, Err.HelpContext, _
Err.HelpContext
Call Cleanup
End Select
End Sub
Private Sub Form_Unload(Cancel As Integer)
Cleanup
End Sub
  程序的运行结果如下图:



  上面的范例首先演示了如何建立一个简单的DirectDraw对象并获得该对象支持的显示模式。下面我们要将在原来程序的基础上添加一些模块以实现更多的功能。 首先在上面的程序中加入一个函数SetNewDisplayMode,函数代码如下:

Private Function SetNewDisplayMode()

On Error GoTo ErrHandler

Dim ddsd As DDSURFACEDESC2
Dim i As Long

i = List1.ListIndex
If i = -1 Then
MsgBox "请在列表中选择一种显示模式", vbOKOnly, "错误"
Exit Function
End If

objEnumModes.GetItem (i 1), ddsd

''设置协作模式
objDraw.SetCooperativeLevel Me.hWnd, DDSCL_FULLSCREEN Or _
DDSCL_ALLOWMODEX Or DDSCL_EXCLUSIVE

''设置显示模式
objDraw.SetDisplayMode ddsd.lWidth,ddsd.lHeight, _
ddsd.ddpfPixelFormat.lRGBBitCount, _
0, DDSDM_DEFAULT

Me.Refresh

ErrHandler:
Select Case Err.Number
Case 0 ''No Errors
Case Else
Err.Raise Err.Number, Err.Source, Err.Description, Err.HelpContext, _
Err.HelpContext
Call Cleanup
End Select
End Function
在Command2的Click事件中加入以下代码:
Dim i

For i = 0 To Form1.Controls.Count - 1
Form1.Controls(i).Visible = False
Next i

SetNewDisplayMode
  再次运行程序,点击列表中的任意一个显示模式,然后点击"设置显示模式"按钮,可以看到屏幕的显示模式被设置成了你在列表中选择的模式。

  上面介绍的是如何设置显示模式,下面介绍如何利用DirectSurface对象来进行图形绘制以及如何利用前台绘图平面同后台绘图平面相配合工作。这个程序要实现的目的是:在屏幕上显示一幅背景位图,然后有一个角色在屏幕上移动。为了实现上面的目的,我们需要建立四个绘图平面,一个主平面,就是程序运行时可以看到的平面;一个后台缓冲平面,用于进行图像操作;一个位图平面,用于显示背景位图;一个角色位图平面,用于显示角色位图。在程序运行时首先将背景位图贴到后台缓冲平面,然后将角色位图平面贴到后台缓冲平面,在后台缓冲平面输出一些提示文字,最后将后台缓冲平面的内容贴到主平面上。   为完成下面的程序,首先要在你的工程文件的目录下建立一个名字为Demo.bmp的位图文件最为背景和一个名字为 Sprite.bmp 的位图作为角色位图。在Form1中加入一个ListBox控件和两个CommandButton控件。加入Directx7说明库,然后在Form1的代码窗口中添加以下的代码:

Option Explicit

Dim objDx As New DirectX7
Dim objDraw As DirectDraw7
Dim objEnumModes As DirectDrawEnumModes

Dim MainSurf As DirectDrawSurface7
Dim BackSurf As DirectDrawSurface7
Dim BmpSurf As DirectDrawSurface7
Dim SpriteSurf As DirectDrawSurface7

Dim ddsd As DDSURFACEDESC2
Dim ddsd1 As DDSURFACEDESC2
Dim ddsd2 As DDSURFACEDESC2
Dim ddsd3 As DDSURFACEDESC2
Dim ddsd4 As DDSURFACEDESC2
Dim ddsd5 As DDSURFACEDESC2

Dim bRun As Boolean
Dim lastTime As Long
Dim fps As Long
Dim lfps As Long
Dim FrameCount As Long
Dim Clipper As DirectDrawClipper
Dim x As DDPIXELFORMAT
Dim sx, sy As Integer
Dim Pict() As Byte

Sub InitSurf()
On Error GoTo ErrHandler

'设置主绘图平面的属性
ddsd1.lFlags = DDSD_CAPS Or DDSD_BACKBUFFERCOUNT

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!