| |
VB中使用DirectX库的简明教程 |
|
时间: 2004-01-30 来自:论坛 |
 |
|
一、
DirectDraw
DirectDraw类是DirectX中绘图的基础,它包含以下的对象:
·
DirectDraw7
· DirectDrawClipper
· DirectDrawEnumModes
· DirectDrawPalette
· DirectDrawSurface7
DirectDraw7是基本的DirectDraw类对象,它是建立其它对象的基础,DirectDraw7对象要通过DirectX7对象的DirectDrawCreate方法来建立。例如下面的语句就可以建立一个DirectDraw对象:
Dim objDx As New DirectX7 Dim objDraw As DirectDraw7
Set
objDx = New
DirectX7 | DirectDrawClipper对象可以建立一个屏幕的剪裁区域的列表。该对象的一个通常的应用是设置屏幕或者窗口区域,例如在你的游戏中有一个人物移动到了屏幕的边缘,你不希望他一下消失掉而是要平滑的移出,如果没有DirectDrawClipper对象的话这将后台的图像复制到前台会出现错误,因为人物图像的一部分已经移动到了绘图平面的外面,而有了DirectDrawClipper对象,DirectDraw就知道人物图像区域的那些部分是可见的而那些部分应该被剪裁掉。利用DirectDraw7的CreateClipper方法可以建立一个DirectDraw7下的DirectDrawClipper对象
通过DirectDrawEnumModes对象可以获得当前系统支持的显示模式。DirectDraw7的GetDisplayModesEnum方法可以建立一个DirectDrawEnumModes对象。
DirectDrawPalette对象是DirectDraw下的绘图调色板对象,它很类似于Windows下的调色板。DirectDraw7的CreatePalette方法可以建立一个DirectDrawPalette对象。
DirectDrawSurface7是DirectDraw下的最重要的对象,它有点类似Windows下窗口的hDC,我们所进行的所有图形、文本操作都是在这个对象上进行的。这个对象描述了一块线型的显存区域,你可以通过DirectDrawSurface7对象直接操作这片区域。如果你还记得在Dos下的QB4.5编写图形程序的话,DirectDrawSurface7对象就同它有一些类似。通过DirectDraw7的CreateSurface方法,你可以建立一个单一绘图平面、复合绘图平面或者三维绘图平面对象。而利用DirectDraw7的CreateSurfaceFromFile方法、CreateSurfaceFromResource方法可以建立一个包含位图的
DirectDrawSurface7对象。DirectDrawSurface7对象是DirectDraw类对象中最难掌握的对象。
下面我们将通过建立一个简单的DirectDraw程序并通过充实程序来学习DirectDraw的基本原理和应用。首先来建立一个简单的DirectDraw程序,建立一个新的工程,将Direct7说明库加入到工程中,然后在Form1中加入两个CommandButton和一个ListBox控件,在Form1中加入以下代码:
Option Explicit
Dim objDx As New DirectX7 Dim objDraw As
DirectDraw7 Dim objEnumModes As DirectDrawEnumModes
Sub
Cleanup() 'Cleanup函数回复屏幕并且清除DirectX对象 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对象并获得该对象支持的显示模式。下面我们要将在原来程序的基础上添加一些模块以实现更多的功能。
|
|
|
|
|
|
|
|