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

https://www.vbarchiv.net
Rubrik: Grafik & Zeichnen22.03.05
DrawFrameControl-Funktion

Diese Funktion zeichnet verschiedene Fensterobjekte wie Titelleistenbuttons, Checkboxen, Scrolleisten, etc.

Betriebssystem:  Win95, Win98, WinNT 4.0, Win2000, WinMEViews:  8.164 

Deklaration:

Declare Function DrawFrameControl Lib "user32" ( _
  ByVal hDC As Long, _
  lpRect  As RECT, _
  ByVal uType As Long, _
  ByVal uState As Long) As Long

Beschreibung:
Diese Funktion zeichnet verschiedene Fensterobjekte wie Titelleistenbuttons, Checkboxen, Scrolleisten, etc.

Parameter:
hDCErwartet das Handle des Gerätes, auf dem das Objekt gezeichnet werden soll.
lpRectErwartet eine RECT-Struktur, die gefüllt ist mit den Koordinaten indenen das Objekt gezeichnet werden soll.
uTypeErwartet eine der folgenden Konstanten, die beschreiben welches Objekt gezeichnet werden soll.
uStateErwartet eine oder eine Kombination von mehreren der folgenden Konstanten entsprechend für das gewählte Objekt, um dieArt und den Status des zu zeichnenden Objekts festzulegen.

uType Konstanten:

Const DFC_BUTTON = 4
' Standard-Button
 
Const DFC_CAPTION = 1
' Titelleiste
 
Const DFC_MENU = 2
' Menü
 
Const DFC_POPUPMENU = 5
' (Windows 98, ME, NT, 2000, XP) Popupmenü
 
Const DFC_SCROLL = 3
' Scrollleiste

Rückgabewert:
Ist die Funktion erfolgreich, so wird ein Wert "ungleich 0" zurückgegeben, andernfalls der wert "0". Unter Windows NT, 2000 und XP könnenSie die GetLastError-Funktion für erweiterte Fehlerinformationen aufrufen.

Beispiel:

Private Declare Function DrawCaption Lib "user32" ( _
  ByVal hWnd As Long, _
   ByVal hDC As Long, _
  pcRect As RECT, _
  ByVal uFlags As Long) As Long
Private Declare Function DrawEdge Lib "user32" ( _
  ByVal hDC As Long, _
  qrc As RECT, _
  ByVal edge As Long, _
  ByVal grfFlags As Long) As Long
Private Declare Function DrawFocusRect Lib "user32" ( _
  ByVal hDC As Long, _
   lpRect As RECT) As Long
Private Declare Function DrawFrameControl Lib "user32" ( _
  ByVal hDC As Long, _
   lpRect As RECT, _
  ByVal uType As Long, _
  ByVal uState As Long) As Long
Private Declare Function DrawText Lib "user32" _
  Alias "DrawTextA" ( _
  ByVal hDC  As Long, _
  lpStr As String, _
  ByVal nCount As Long, _
  lpRect As RECT, _
  ByVal wFormat As Long) As Long
Private Declare Function SetRect Lib "user32" ( _
  lpRect As RECT, _
  ByVal X1 As Long, _
  ByVal Y1 As Long, _
  ByVal X2 As Long, _
  ByVal Y2 As Long) As Long
Private Declare Function PtInRect Lib "user32.dll" ( _
  lpRect As RECT, _
  ByVal x  As Long, _
  ByVal y As Long) As Long
 
Private Type RECT
  Left As Long
  Top As Long
  Right As Long
  Bottom As Long
End Type
 
' DrawText wFormat-Konstanten
Private Const DT_CENTER = &H1' Der Text wird horizontal zentriert
Private Const DT_SINGLELINE = &H20 ' Der Text wird in einer einzelnen Zeile  
' gezeichnet, VBCrLf-Zeichen werden ignoriert
Private Const DT_VCENTER = &H4 ' Der Text wird vertikal Zentriert (nur in  
' Verbindung mit DT_SINGLELINE)
 
' DrawFrameControl uState-Konstanten
Private Const DFCS_BUTTONPUSH = &H10 ' (DFC_BUTTON) Standard-Button
Private Const DFCS_CAPTIONCLOSE = &H0 ' (DFC_CAPTION) Schließensymbol der Titelleiste 
Private Const DFCS_FLAT = &H4000 ' Das Objekt ist flach
Private Const DFCS_PUSHED = &H200 ' Das Objekt ist gedrückt
 
' DrawFrameControl uType-Konstanten
Private Const DFC_BUTTON = 4 ' Standard-Button
Private Const DFC_CAPTION = 1 ' Titelleiste
 
' DrawEdge grfFlags-Konstanten
Private Const BF_TOP = &H2 ' Der obere Rahmen wird gezeichnet
Private Const BF_RIGHT = &H4 ' Der rechte Rahmen wird gezeichnet
Private Const BF_LEFT = &H1 ' Der linke Rahmen wird gezeichnet
Private Const BF_BOTTOM = &H8 ' Der untere Rahmen wird gezeichnet
Private Const BF_RECT = (BF_LEFT Or BF_TOP Or BF_RIGHT Or BF_BOTTOM) ' Es  
' werden alle Seiten des Rahmens gezeichnet
 
' DrawEdge edge-Konstanten
Private Const BDR_RAISEDOUTER = &H1 ' Der äußere Rahmen steigt an
Private Const BDR_SUNKENINNER = &H8 ' Der innere Rahmen sinkt ab
Private Const EDGE_BUMP = (BDR_RAISEDOUTER Or BDR_SUNKENINNER) ' Eine  
' Kombination aus BDR_RAISEDOUTER und BDR_SUNKENINNER
 
' DrawCaption uFlags-Konstanten
Private Const DC_ACTIVE = &H1 ' Zeichnet eine aktive Titelleiste
Private Const DC_GRADIENT = &H20 ' (ab Windows 98) Benutzt den Verlauf für die Titelleiste
Private Const DC_ICON = &H4 ' Zeichnet das Icon in der Titelleiste (VB macht  
' da einen Strich durch wenn das Fenster keinen Rahmen hat)
Private Const DC_TEXT = &H8 ' Zeichnet den Text für die Titelleiste
 
Dim TitelBar As RECT, TBClose As RECT, CloseState As Long, WorkArea As RECT
Dim CMDButton As RECT, ButtonState As Long, CMDHaveFocus As Boolean,  _
FoucsRect As RECT
' Fensterbereiche festlegen
' (Eigenschaft setzen nicht vergessen: Me.BorderStyle = 0 und  
' Me.ShowInTaskbar = True)
Private Sub Form_Load()
  Dim Retval As Long
 
  Me.ScaleMode = vbPixels
 
  ' Titelleiste setzen
  Retval = SetRect(TitelBar, 0, 0, Me.ScaleWidth, 18)
 
  ' Titelleistenbutton setzen
  Retval = SetRect(TBClose, Me.ScaleWidth - 18, 2, Me.ScaleWidth - 2, 16)
 
  ' Arbeitsbereich setzen
  Retval = SetRect(WorkArea, 0, 18, Me.ScaleWidth - 1, Me.ScaleHeight)
 
  ' Commandbutton setzen
  Retval = SetRect(CMDButton, (Me.ScaleWidth / 2) - 80, (Me.ScaleHeight  _
  / 2) - 30, Me.ScaleWidth / 2, Me.ScaleHeight / 2)
 
  ' Fokusrechteck des Commandbuttons setzen
  Retval = SetRect(FoucsRect, (Me.ScaleWidth / 2) - 78, (Me.ScaleHeight  _
  / 2) - 28, Me.ScaleWidth / 2 - 2, Me.ScaleHeight / 2 - 2)
End Sub
' Zeichnen der Objekte
Private Sub Form_Paint()
  Dim Retval As Long
 
  ' Titelleiste zeichnen
  Retval = DrawCaption(Me.hWnd, Me.hDC, TitelBar, DC_ACTIVE Or  _
  DC_GRADIENT Or DC_ICON Or DC_TEXT)
 
  ' Titelleisten-Button zeichnen
  Retval = DrawFrameControl(Me.hDC, TBClose, DFC_CAPTION,  _
  DFCS_CAPTIONCLOSE Or CloseState)
 
  ' Arbeitsbereich zeichnen
  Retval = DrawEdge(Me.hDC, WorkArea, EDGE_BUMP, BF_RECT)
 
  ' Commandbutton zeichnen
  Retval = DrawFrameControl(Me.hDC, CMDButton, DFC_BUTTON,  _
  DFCS_BUTTONPUSH Or ButtonState)
 
  ' Text des Commandbuttons zeichnen
  Retval = DrawText(Me.hDC, ByVal "Command1", Len("Command1"),  _
  CMDButton, DT_CENTER Or DT_VCENTER Or DT_SINGLELINE)
 
  ' Focus zeichnen ?
  If CMDHaveFocus Then
    Retval = DrawFocusRect(Me.hDC, FoucsRect)
  End If
End Sub
' Buttonveräderungen anzeigen
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As _
Single, y As Single)
  Select Case 1
  Case PtInRect(CMDButton, x, y)
    If ButtonState = 0 Then
      ButtonState = DFCS_FLAT
      Me.Refresh
    End If
 
  Case PtInRect(TBClose, x, y)
    If CloseState = 0 Then
      CloseState = DFCS_FLAT
      Me.Refresh
    End If
 
  Case Else
    If ButtonState = DFCS_FLAT Then
      ButtonState = 0
      Me.Refresh
    End If
    If CloseState = DFCS_FLAT Then
      CloseState = 0
      Me.Refresh
    End If
  End Select
End Sub
' Klick eines Buttons simulieren
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, x As _
Single, y As Single)
  Select Case 1
  Case PtInRect(CMDButton, x, y)
    ButtonState = DFCS_PUSHED
    Me.Refresh
 
  Case PtInRect(TBClose, x, y)
    CloseState = DFCS_PUSHED
    CMDHaveFocus = False
    Me.Refresh
  End Select
End Sub
' Ereignis beim Klicken eines Buttons auslösen
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, x As Single,  _
y As Single)
  Select Case 1
  Case PtInRect(CMDButton, x, y)
    ButtonState = 0
    CMDHaveFocus = True
    Me.Refresh
    MsgBox "Sie haben Command1 gedrückt"
 
  Case PtInRect(TBClose, x, y)
    CloseState = 0
    Me.Refresh
    Unload Me
 
  Case Else
    ButtonState = 0
    CloseState = 0
    Me.Refresh
  End Select
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.