Tipp 0041 DirectDraw - Text
Autor/Einsender:
Datum:
  Jack Hoxley
27.04.2001
Entwicklungsumgebung:
DirectX-Version:
  VB 6
DirectX 7
Dieses Beispiel zeigt wie es möglich ist, mit DirectDraw Text auf dem Surface auszugeben. Der Autor hat den Quellcode im Download-Beispiel vorbildlich kommentiert.
 
Option Explicit

Dim binit As Boolean
Dim dx As New DirectX7
Dim dd As DirectDraw7
Dim Mainsurf As DirectDrawSurface7
Dim primary As DirectDrawSurface7
Dim backbuffer As DirectDrawSurface7
Dim ddsd1 As DDSURFACEDESC2
Dim ddsd3 As DDSURFACEDESC2
Dim brunning As Boolean
Dim CurModeActiveStatus As Boolean
Dim bRestore As Boolean
Dim FillRect As RECT
Dim FillRet As Long
Dim FontInfo As New StdFont

Sub Init()
  On Local Error GoTo errOut

  Set dd = dx.DirectDrawCreate("")
  Me.Show

  Call dd.SetCooperativeLevel(Me.hWnd, DDSCL_FULLSCREEN Or _
       DDSCL_ALLOWMODEX Or DDSCL_EXCLUSIVE)
  Call dd.SetDisplayMode(640, 480, 16, 0, DDSDM_DEFAULT)
  ddsd1.lFlags = DDSD_CAPS Or DDSD_BACKBUFFERCOUNT
  ddsd1.ddsCaps.lCaps = DDSCAPS_PRIMARYSURFACE Or _
        DDSCAPS_FLIP Or DDSCAPS_COMPLEX
  ddsd1.lBackBufferCount = 1
  Set primary = dd.CreateSurface(ddsd1)

  Dim caps As DDSCAPS2
  caps.lCaps = DDSCAPS_BACKBUFFER
  Set backbuffer = primary.GetAttachedSurface(caps)
  backbuffer.GetSurfaceDesc ddsd3

  backbuffer.SetFontTransparency True
  backbuffer.SetForeColor RGB(0, 0, 200)

  binit = True
  brunning = True
  Do While brunning
    blt
    DoEvents
  Loop

errOut:
  EndIt
End Sub

Sub blt()
  On Local Error GoTo errOut

  If binit = False Then Exit Sub

  bRestore = False
  Do Until ExModeActive
     DoEvents
     bRestore = True
  Loop

  DoEvents
  If bRestore Then
    bRestore = False
    dd.RestoreAllSurfaces
  End If

  FillRect.Bottom = 480: FillRect.Right = 640
  FillRet = backbuffer.BltColorFill(FillRect, RGB(0, 0, 0))
  FontInfo.Bold = True
  FontInfo.Size = 20
  FontInfo.Name = "Verdana"
  backbuffer.SetFont FontInfo
  backbuffer.SetForeColor RGB(0, 0, 225)
  Call backbuffer.DrawText(10, 10, _
       "DirectDraw Textausgabe-Beispiel.", False)

  FontInfo.Bold = False
  FontInfo.Size = 20
  FontInfo.Name = "Verdana"
  backbuffer.SetFont FontInfo
  backbuffer.SetForeColor RGB(255, 0, 0)
  Call backbuffer.DrawText(10, 385, _
       "Maus-Klick zum Verlassen", False)

  primary.Flip Nothing, DDFLIP_WAIT

errOut:
End Sub

Sub EndIt()
  Call dd.RestoreDisplayMode
  Call dd.SetCooperativeLevel(Me.hWnd, DDSCL_NORMAL)
  End
End Sub

Private Sub Form_Click()
  EndIt
End Sub

Private Sub Form_Load()
  Init
End Sub

Private Sub Form_Paint()
  blt
End Sub

Function ExModeActive() As Boolean
  Dim TestCoopRes As Long

  TestCoopRes = dd.TestCooperativeLevel

  If (TestCoopRes = DD_OK) Then
    ExModeActive = True
  Else
    ExModeActive = False
  End If
End Function
 
Weitere Links zum Thema
Eigene Schriften verwenden
TextBox
Hinweis
Um dieses Beispiel ausführen zu können, wird die DirectX 7 for Visual Basic Type Library benötigt (siehe dazu die Erläuterungen in der DirectX-Rubrik).

Windows-Version
95
98/SE
ME
NT
2000
XP
Vista
Win 7
VB-Version
VBA 5
VBA 6
VB 4/16
VB 4/32
VB 5
VB 6


Download  (4,7 kB) Downloads bisher: [ 1386 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Projekte | Tutorials | API-Referenz | VB-/VBA-Tipps | Komponenten | Bücherecke | VB/VBA-Forum | VB.Net-Forum | DirectX-Forum | Foren-Archiv | DirectX | VB.Net-Tipps | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Sonntag, 28. August 2011