如何强制vb6控件重绘自己?

时间:2016-05-13 22:38:07

标签: vb6 xp-theme

我有一个VB6程序。我正在使用Mainfest来应用" XP主题"并给它现代(截至8年前!)看。

但是,对于图形样式的Command按钮,我必须使用一些特殊代码来重绘按钮。这就是问题所在。

当我点击其中一个图形按钮时,它会得到正确的"突出显示"背景,但当另一个按钮获得焦点或鼠标悬停等时,前按钮保持背景突出显示

如果我在它前面移动另一个窗口,那么表单会重新绘制并且这个"残留"背景颜色消失。

我试图找出如何强制发生这种情况。

我尝试过的事情:

  • button.refresh
  • form.refresh
  • DOEVENTS

Here is a video demo of the problem

1 个答案:

答案 0 :(得分: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
相关问题