Tipp 0401 Text rendern
Autor/Einsender:
Datum:
  Alexander Csadek
30.06.2004
Entwicklungsumgebung:
DirectX-Version:
  VB 6
DirectX 8
Da es in DirectX 8 kein DirectDraw gibt, muss ein anderer Weg genommen werden, um Text auf den Bildschirm zu bekommen. Dafür gibt es das D3DXFont-Objekt. das über das D3DX8-Objekt erzeugt wird. Es braucht lediglich beim Erstellen einen gültigen D3DDevice und einen Handle auf ein Font-Objekt. Danach könnt ihr im Renderbereich (BeginScene und EndScene) euren Text zeichnen lassen.
Hierfür gibt es zwei Möglichkeiten, entweder über das D3DXFont-Objekt mit der Methode DrawTextW oder über das D3DX8-Objekt mit der Methode DrawText. Beide Methoden bringen das gleiche Ergebnis.
Interessant sind die Format-Flags, die beiden Methoden übergegeben werden können.
(Eine Auflistung aller Flags findet ihr in der MSDN.)
DT_LEFT
DT_CENTER
DT_RIGHT
DT_WORDBREAK
linksbündig
zentriert
rechtsbündig
automatischer Zeilenumbruch
Der Text wird dann im gewünschten Format in das angegebene Rechteck gerendert.
Es folgt nun der für diesen Tipp relevante Code...
 
Private Sub Render()
  'Ziel-Bereich für unseren Text
  Dim destrect As RECT
  If D3DDevice Is Nothing Then Exit Sub

  'BackBuffer wird bereinigt mit blauer Farbe
  D3DDevice.Clear 0, ByVal 0, D3DCLEAR_TARGET, &HFF&, 1, 0

  'Beginn der Render-Szene
  D3DDevice.BeginScene

  'Es gibt zwei Möglichkeiten um den Text zu zeichnen.
  'Entweder mit der Funktion DrawTextW auf dem D3DXFont-Objekt
  'oder mit der DrawText-Funktion vom D3DX-Objekt selbst.
  'Wenn ihr das D3DXFont-Objekt verwendet, dann müsst ihr vor
  'dem Zeichnen des Textes die Methode Begin und nach dem
  'Zeichnen des Textes die Methode End verwenden.
  'DirectX zeichnet dann den Text im entsprechenden Format in
  'das angegebene Rechteck (destrect).

  myFont.Begin

  With destrect
    .Left = 15
    .Top = 5
    .Right = 315
    .bottom = 50
  End With

  strText = "DirectX 8 und die Darstellung von Text"
  myFont.DrawTextW strText, Len(strText), destrect, _
        DT_CENTER Or DT_WORDBREAK, D3DColorMake(1, 1, 1, 1)

  With destrect
    .Left = 15
    .Top = 70
    .Right = 315
    .bottom = 115
  End With

  strText = "linksbündiger Text"
  myFont.DrawTextW strText, Len(strText), destrect, _
        DT_LEFT, D3DColorMake(1, 1, 1, 1)

  With destrect
    .Left = 15
    .Top = 130
    .Right = 315
    .bottom = 180
  End With

  strText = "rechtsbündiger Text"
  myFont.DrawTextW strText, Len(strText), destrect, _
        DT_RIGHT, D3DColorMake(1, 1, 1, 1)

  With destrect
    .Left = 15
    .Top = 190
    .Right = 315
    .bottom = 240
  End With

  strText = "automatischer Zeilenumbruch bei langem Text"
  myFont.DrawTextW strText, Len(strText), destrect, _
        DT_LEFT Or DT_WORDBREAK, D3DColorMake(1, 1, 1, 1)
  myFont.End

  'Wird die DrawText Methode des D3DX-Objekts verwendet,
  'dann müssen keine Anzahl der Zeichen übergeben werden.
  'Ansonsten bleibt alles gleich.
  'D3DX.DrawText myFont, D3DColorMake(1, 1, 1, 1), _ 
  '    "DirectX 8 und die Darstellung von Text", destrect, _
  '    DT_LEFT Or DT_WORDBREAK
  'Ende der Render-Szene
  D3DDevice.EndScene

  'Kopieren des BackBuffers zum FrontBuffer (Bildschirm)
  D3DDevice.Present ByVal 0, ByVal 0, 0, ByVal 0
End Sub

Private Function CreateFont(ByVal f As StdFont) As D3DXFont
  Dim iT As IFont
  Set iT = f

  'Zum Erstellen des D3DXFont-Objektes benötigen wir
  'ein D3DDevice und einen Handle des Font-Objektes.
  'Da auf normalen Weg im VB6 kein Handle vom Font zur
  'Verfügung steht, wird der Umweg über das IFont-Objekt
  'genommen.
  Set CreateFont = D3DX.CreateFont(D3DDevice, iT.hFont)

End Function
 
Hinweis
Um dieses Beispiel ausführen zu können, wird die DirectX 8 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 kB) Downloads bisher: [ 691 ]

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: Donnerstag, 8. September 2011