【问题标题】:How can I force a vb6 control to redraw itself?如何强制 vb6 控件重绘自身?
【发布时间】:2016-09-10 06:14:15
【问题描述】:

我有一个 VB6 程序。我正在使用 Mainfest 应用“XP 主题”并赋予它现代(截至 8 年前!)的外观。

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

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

如果我在它前面移动另一个窗口,表单会重新绘制自己,并且这个“剩余”背景颜色会消失。

我正在尝试弄清楚如何强制发生这种情况。

我尝试过的:

  • button.refresh
  • form.refresh
  • 事件

Here is a video demo of the problem

【问题讨论】:

    标签: vb6 xp-theme


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多