Как я могу заставить элемент управления vb6 перерисовать себя?

У меня есть программа VB6. Я использую Mainfest для применения "Тем XP" и придаю ему современный (как и 8 лет назад!) Вид.

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

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

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

Я пытаюсь понять, как заставить это произойти.

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

  • button.refresh
  • form.refresh
  • DoEvents

Вот видео демонстрация проблемы

1 ответ

У меня нет ничего подобного вашей настройке, чтобы попробовать это, но вы можете попробовать использовать вызов 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
Другие вопросы по тегам