Hallo,
benutze vb.2010
auf einem Formular sind verschieden Controls.
Textboxen,
PictureBox,
RichTextBox,
ComboBox,
NumericUpDown,
Label und
eigenes erstellte Comboboxen (f. 2 Spalten).
Nun möchte ich bei bestimmten Situationen einen roten Rahmen (Bordercolor) um die einzelnen Elemente legen können.
Ich habe nun eine Methode um bei den eigens erstellten Comboboxen mittels
einer Überschreibung der 'WndProc'-Methode.
Über die 'Override WndProc-Methode' abfangen des 'WM_PAINT's.
Es funktioniert zwar bei den eigenen erstellten Comboboxen, da ich dort die NEW Methode selbst erstelle,
aber wie kann ich für alle die obig genannten Controls bei bestimmten Situationen die 'WndProc'-Methode nutzen.
Wie kann ich einem speziellen Control jetzt im Programm mitteilen, dass es diese Methode nutzen soll und wie? control.Invalidate?
Aber wie kann ich dann im Paint diese Methode aufrufen?
Protected Overrides Sub WndProc (ByRef m As Message)
Wie erreiche ich die Übergabe von m? bezw. g As Graphics des Controls.
Imports System.Windows.Forms
Imports System.Drawing
Imports System.Runtime.InteropServices
Public Class FlatComboBox
Inherits ComboBox
Public Const WM_PAINT As Integer = &Hf
<DllImport("user32")> _
Public Shared Function GetWindowDC(hWnd As IntPtr) As IntPtr
End Function
<DllImport("user32")> _
Public Shared Function ReleaseDC(hWnd As IntPtr, hDC As IntPtr) As Integer
End Function
Public Sub New()
MyBase.New()
Me.SetStyle(ControlStyles.DoubleBuffer, True)
Me.IntegralHeight = False
Me.DropDownStyle = ComboBoxStyle.Simple
End Sub
Protected Overrides Sub WndProc(ByRef m As Message)
Dim hDC As IntPtr = IntPtr.Zero
Dim gdc As Graphics = Nothing
Select Case m.Msg
Case WM_PAINT
MyBase.WndProc(m)
hDC = GetWindowDC(Me.Handle)
gdc = Graphics.FromHdc(hDC)
PaintFlatControlBorder(Me, gdc)
ReleaseDC(m.HWnd, hDC)
gdc.Dispose()
Exit Select
Case Else
MyBase.WndProc(m)
Exit Select
End Select
End Sub
Private Sub PaintFlatControlBorder(ctrl As Control, g As Graphics)
Dim rect1 As New Rectangle(0, 0, ctrl.Width, 20)
Dim rect2 As New Rectangle(0, 21, ctrl.Width, ctrl.Height - 21)
ControlPaint.DrawBorder(g, rect1, Color.Black, ButtonBorderStyle.Solid)
ControlPaint.DrawBorder(g, rect2, Color.Black, ButtonBorderStyle.Solid)
End Sub
End ClassDanke |