vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 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
DrawFocusRect-Funktion

Diese Funktion zeichnet ein Rechteck mit gestrichelten Linien, wie es Windows für das Markieren von Objekten tut.

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

Deklaration:

Declare Function DrawFocusRect Lib "user32" ( _
  ByVal hDC As Long, _
  lpRect As RECT) As Long

Beschreibung:
Diese Funktion zeichnet ein Rechteck mit gestrichelten Linien, wie es Windows für das Markieren von Objekten tut.

Parameter:
hDCErwartet das Handle des Gerätes, auf dem das Fokusrechteck gezeichnet werden soll.
lpRectErwartet eine RECT-Struktur, die gefüllt ist mit den Koordinaten auf denen das Fokusrechteck gezeichnet werden soll.

Rückgabewert:
Ist die Funktion erfolgreich, so wird ein Wert "ungleich 0" zurückgegeben, andernfalls derWert "0". 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 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

Diese Seite wurde bereits 9.265 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