|
|

楼主 |
发表于 2006-6-1 23:12:00
|
显示全部楼层
Re: 用DirectDraw显示位图问题
不是全屏模式的,代码如下,省略设置窗口和图片框属性:
Option Explicit
Option Base 0
Dim WithEvents picture1 As PictureBox
Dim DX As DirectX7
Dim DDraw As DirectDraw7
Dim DDrawSurfacePrimary As DirectDrawSurface7
Dim ddsdPrimary As DDSURFACEDESC2
Dim DDClip As DirectDrawClipper
Dim DDSBackGround As DirectDrawSurface7
Dim ddsdBackGround As DDSURFACEDESC2
Dim DDrawSurfaceSecond As DirectDrawSurface7
Dim ddsdSecond As DDSURFACEDESC2
Private Sub Form_Load()
With Form1
...
End With
Set picture1 = Controls.Add("VB.PictureBox", "picture1")
With picture1
...
End With
Dim rSecond As RECT
Set DX = New DirectX7
Set DDraw = DX.DirectDrawCreate("")
DDraw.SetCooperativeLevel picture1.hWnd, DDSCL_NORMAL
ddsdPrimary.lFlags = DDSD_CAPS 'Or DDSD_WIDTH Or DDSD_HEIGHT
ddsdPrimary.ddsCaps.lCaps = DDSCAPS_PRIMARYSURFACE
ddsdPrimary.lWidth = 640
ddsdPrimary.lHeight = 480
Set DDrawSurfacePrimary = DDraw.CreateSurface(ddsdPrimary)
Set DDClip = DDraw.CreateClipper(0)
DDClip.SetHWnd picture1.hWnd
DDrawSurfacePrimary.SetClipper DDClip
ddsdSecond.lFlags = DDSD_CAPS Or DDSD_WIDTH Or DDSD_HEIGHT
ddsdSecond.ddsCaps.lCaps = DDSCAPS_OFFSCREENPLAIN
ddsdSecond.lWidth = 640
ddsdSecond.lHeight = 480
Set DDrawSurfaceSecond = DDraw.CreateSurface(ddsdSecond)
rSecond.Right = 640
rSecond.Bottom = 480
'DDrawSurfacePrimary.Blt rSecond, DDrawSurfaceSecond, rSecond, DDBLT_WAIT
ddsdBackGround.lFlags = DDSD_CAPS Or DDSD_WIDTH Or DDSD_HEIGHT
ddsdBackGround.ddsCaps.lCaps = DDSCAPS_OFFSCREENPLAIN
ddsdBackGround.lWidth = 640
ddsdBackGround.lHeight = 480
Set DDSBackGround = DDraw.CreateSurfaceFromFile(App.Path & "\backGround.bmp", ddsdBackGround)
DDrawSurfaceSecond.Blt rSecond, DDSBackGround, rSecond, DDBLT_WAIT
DDrawSurfacePrimary.Blt rSecond, DDrawSurfaceSecond, rSecond, DDBLT_WAIT
'DDrawSurfaceSecond.BltFast 0, 0, DDrawSurfacePrimary, rSecond, DDBLTFAST_WAIT
End Sub
|
|