Rubrik: Grafik & Zeichnen | 22.03.05 |
DrawFrameControl-Funktion Diese Funktion zeichnet verschiedene Fensterobjekte wie Titelleistenbuttons, Checkboxen, Scrolleisten, etc. | ||
Betriebssystem: Win95, Win98, WinNT 4.0, Win2000, WinME | Views: 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:
hDC | Erwartet das Handle des Gerätes, auf dem das Objekt gezeichnet werden soll. |
lpRect | Erwartet eine RECT-Struktur, die gefüllt ist mit den Koordinaten indenen das Objekt gezeichnet werden soll. |
uType | Erwartet eine der folgenden Konstanten, die beschreiben welches Objekt gezeichnet werden soll. |
uState | Erwartet 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