vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Grafik & Zeichnen15.04.02
SelectObject-Funktion

Diese Funktion setzt ein Objekt für ein Device. Gültige Objekte sind zum Beispiel Brush' s, Bitmaps, Fonts, Pens und Regionen...

Betriebssystem:  Win95, Win98, WinNT 3.1, Win2000, WinMEViews:  11.416 

Deklaration:

Declare Function SelectObject Lib "gdi32.dll" ( _
  ByVal hdc As Long, _
  ByVal hObject As Long) As Long


Beschreibung:

Diese Funktion setzt ein Objekt für ein Device. Gültige Objekte sind zum Beispiel Brush' s, Bitmaps, Fonts, Pens und Regionen. Dadurch kann man z.B. erreichen, dass ein Device immer einen festgelegten Brush zum Neuzeichnen seines Fensterinhaltes benutzt.


Parameter:

hdcErwartet den Device-Kontext des Gerätes, das ein Objekt zugewiesen bekommen soll.
hObjectErwartet das Handle des Objektes, das zugewiesen werden soll, wie z.B. hBrush, hBitmap, hPen oder ähnliches.


Rückgabewert:

Diese Funktion liefert das Handle des Objektes, das vorher gesetzt war. Das heißt, setzt man einen Brush, so liefert die Funktiondas Handle des vorherigen Brush' s. Tritt ein Fehler auf, wie zum Beispiel bei einemungültigem Handle, dann ist der Rückgabewert "0".

Beispiel:

Private Declare Function CreateHatchBrush Lib "gdi32" ( _
  ByVal nIndex As Long, _
  ByVal crColor As Long) As Long
Private Declare Function GetBrushOrgEx Lib "gdi32" ( _
  ByVal hDC As Long, _
  lpPoint As POINTAPI) As Long
Private Declare Function SetBrushOrgEx Lib "gdi32" ( _
  ByVal hDC As Long, _
  ByVal nXOrg As Long, _
  ByVal nYOrg As Long, _
  lppt As POINTAPI) As Long
Private Declare Function SelectObject Lib "gdi32" ( _
  ByVal hDC As Long, _
  ByVal hObject As Long) As Long
Private Declare Function Rectangle Lib "gdi32" ( _
  ByVal hDC As Long, _
  ByVal X1 As Long, _
  ByVal Y1 As Long, _
  ByVal X2 As Long, _
  ByVal Y2 As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
 
Private Const HS_BDIAGONAL = 3 ' diagonal von links unten nach rechts oben (/)
Private Const HS_CROSS = 4 ' Kreuz (+)
Private Const HS_DIAGCROSS = 5 ' diagonales Kreuz (x)
Private Const HS_FDIAGONAL = 2 ' diagonal von rechts unten nach links oben (\)
Private Const HS_HORIZONTAL = 0 ' horizontal (-)
Private Const HS_VERTICAL = 1 ' vertikal (|)
 
Private Type POINTAPI
     x As Long
     y As Long
End Type
 
Private RetVal As Long, hBrushNew As Long, hBrushOld As Long
Private OldOrginPt As POINTAPI, NewOrginPt As POINTAPI
' lädt die neuen Brush-Eigenschaften und speichert die alten in Variablen
' Die AutoRedraw-Eigenschaft muss False sein !!!
Private Sub Form_Load()
  Me.ScaleMode = vbPixels
 
  ' erst einmal fragen wir den aktuellen Orgin-Punkt ab, den wir am Ende  
  ' wiederherstellen müssen
  RetVal = GetBrushOrgEx(Me.hDC, OldOrginPt)
 
  ' danach setzen wir den neuen Orign-Punkt
  NewOrginPt.x = 4
  NewOrginPt.y = 4
  RetVal = SetBrushOrgEx(Me.hDC, NewOrginPt.x, NewOrginPt.y, NewOrginPt)
 
  ' dann erstellen wir uns einen neuen Brush in Blau
  hBrushNew = CreateHatchBrush(HS_DIAGCROSS, vbBlue)
 
  ' nun weisen wir den neuen Brush dem Fernster zu und erhalten dabei den alten
  hBrushOld = SelectObject(Me.hDC, hBrushNew)
End Sub
' zeichnet den neuen Brush innerhalb eines Rechtecks
Private Sub Form_Paint()
  ' Forminhalt löschen
  Me.Cls
 
  ' weil beim Maximieren und Minimieren die Form den alten Brush immer
  ' wiederherstellt müssen wir ihn jedes Mal erneut zuweisen um sicher zu stellen,
  ' dass der gewollte Brush auch das Rechteck ausfüllt
  SelectObject Me.hDC, hBrushNew
 
  ' nun zeichnen wir ein Rechteck in der Mitte der Form
  RetVal = Rectangle(Me.hDC, Me.ScaleWidth / 3, Me.ScaleHeight / 3,  _
  Me.ScaleWidth / 3 * 2, Me.ScaleHeight / 3 * 2)
End Sub
' erzwingt, dass beim Maximieren eine Form_Paint Ereignis ausgelöst wird
Private Sub Form_Resize()
  If Me.WindowState = vbmxaximized Then
    Me.Refresh
  End If
End Sub
' stellt den Orginal-Brush wieder her
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
  ' hier stellen wir den alten Brush und dessen Orginpunkt wieder her
  DeleteObject SelectObject(Me.hDC, hBrushOld)
  RetVal = SetBrushOrgEx(Me.hDC, OldOrginPt.x, OldOrginPt.y, OldOrginPt)
End Sub

 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.