2016-05-13 4 views
0

У меня есть программа VB6. Я использую Mainfest, чтобы применить «Темы XP» и дать ему современный (по состоянию на 8 лет назад!) Взгляд.Как я могу заставить элемент управления vb6 перерисовать себя?

Однако для командных кнопок графического стиля я должен использовать специальный код для перерисовки кнопки. В этом и заключается проблема.

Когда я нажимаю на одну из этих графических кнопок, он получает правильное «выделение» фона, но когда другая кнопка получает фокус или наведение курсора и т. Д., То кнопка удерживает выделение фона.

Если я переведу другое окно перед ним, форма перерисовывается, и этот «остаточный» цвет фона исчезает.

Я пытаюсь выяснить, как сила что произойдет.

Что я пробовал:

  • button.refresh
  • form.refresh
  • DoEvents

Here is a video demo of the problem

ответ

0

У меня нет ничего подобного вашей установки на попробуйте это, но вы можете попробовать использовать вызов API InvalidateRect. Я показал объявления и создал Sub, который его использует. Это должна быть простая копия и вставка, чтобы попробовать.

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 
Смежные вопросы