vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Grafik & Zeichnen22.03.05
DrawEdge-Funktion

Diese Funktion zeichnet einen Windows-Standard-Rahmen.

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

Deklaration:

Declare Function DrawEdge Lib "user32" ( _
  ByVal hDC As Long, _
  qrc As RECT, _
   ByVal edge As Long, _
  ByVal grfFlags As Long) As Long

Beschreibung:
Diese Funktion zeichnet einen Windows-Standard-Rahmen.

Parameter:
hDCErwartet das Handle des Gerätes, auf dem der Rahmen gezeichnet werden soll.
qrcErwartet eine RECT-Struktur, die mit den Koordinaten des zu zeichnenden Rahmens gefüllt ist.
edgeErwartet eine oder eine Kombination aus mehreren der folgenden Konstanten die beschreiben, wie der der innere und äußere Rahmen gezeichnet werden soll.
grfFlagsErwartet eine der folgenden Konstanten die beschreiben, welche Seiten des Rahmens gezeichnet werden sollen.

edge Konstanten:

Const BDR_RAISEDINNER = &H4
' Der innere Rahmen steigt an
 
Const BDR_RAISEDOUTER = &H1
' Der äußere Rahmen steigt an
 
Const BDR_SUNKENINNER = &H8
' Der innere Rahmen sinkt ab
 
Const BDR_SUNKENOUTER = &H2
' Der äußere Rahmen sinkt ab
 
Const EDGE_BUMP = (BDR_RAISEDOUTER Or BDR_SUNKENINNER)
' Eine Kombination aus BDR_RAISEDOUTER und BDR_SUNKENINNER
 
Const EDGE_ETCHED = (BDR_SUNKENOUTER Or BDR_RAISEDINNER)
' Eine Kombination aus BDR_SUNKENOUTER und BDR_RAISEDINNER
 
Const EDGE_RAISED = (BDR_RAISEDOUTER Or BDR_RAISEDINNER)
' Eine Kombination aus BDR_RAISEDOUTER und BDR_RAISEDINNER
 
Const EDGE_SUNKEN = (BDR_SUNKENOUTER Or BDR_SUNKENINNER)
' Eine Kombination aus BDR_SUNKENOUTER und BDR_SUNKENINNER

Rückgabewert:
Ist die Funktion erfolgreich, so wird ein Wert "ungleich 0" zurückgegeben, andernfalls ist derWert "0" die Rückgabe. Unter Windows NT, 2000 und XP können Sie 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 Commandbutton 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

Diese Seite wurde bereits 9.007 mal aufgerufen.

nach obenzurück
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle 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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel