2016-05-13 10 views
0

Ich habe ein VB6-Programm. Ich nutze das Mainfest, um "XP Themes" anzubringen und ihm den modernen (wie vor 8 Jahren!) Look zu geben.Wie kann ich erzwingen, dass sich ein vb6-Steuerelement neu zeichnet?

Für grafische Befehlsschaltflächen muss ich jedoch einen speziellen Code verwenden, um die Schaltfläche neu zu zeichnen. Darin liegt das Problem.

Wenn ich auf einer dieser grafischen Schaltflächen klicken, um es der richtige „Hervorhebung“ des Hintergrundes wird, aber wenn eine andere Taste den Fokus erhält oder Mouseover, etc., die ehemalige Taste der Hintergrund hervorgehoben hält.

Wenn ich ein anderes Fenster davor bewege, wird das Formular neu gezeichnet und diese "restliche" Hintergrundfarbe verschwindet.

Ich versuche herauszufinden, wie zwingen, dass zu passieren.

Was ich habe versucht:

  • button.refresh
  • form.refresh
  • DOEVENTS

Here is a video demo of the problem

Antwort

0

Ich habe nicht so etwas wie Ihr Setup Versuchen Sie dies, aber Sie können versuchen, den API-Aufruf InvalidateRect zu verwenden. Ich habe die Deklarationen gezeigt und ein Sub erstellt, das es verwendet. Es sollte eine einfache Kopie sein und einfügen, um es zu versuchen.

Private Type RECT 
    Left As Long 
    Top As Long 
    Right As Long 
    Bottom As Long 
End Type 

Private Declare Function InvalidateRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT, ByVal bErase As Long) As Long 
Private Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long 

Private Sub RefreshMe() 
    Dim udtRect As RECT 

    Call GetClientRect(Me.hwnd, udtRect) 
    InvalidateRect Me.hwnd, udtRect, 1 
    DoEvents 'give windows a chance to handle the event 

End Sub