2016-05-13 66 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