2016-05-13 35 views
0

私はVB6プログラムを持っています。私はMainfestを使って "XP Themes"を適用し、現代的(8年前のように)見ています。vb6コントロールを強制的に再描画する方法はありますか?

しかし、グラフィカルスタイルのコマンドボタンでは、ボタンを再描画するために特別なコードを使用する必要があります。そこに問題があります。

このグラフィックボタンの1つをクリックすると、背景の適切な「強調表示」が得られますが、別のボタンがフォーカスまたはマウスオーバーなどを取得すると、前のボタンは背景のハイライトを保持します。

別のウィンドウを前面に移動すると、フォームが再描画され、この「残った」背景色が消えます。

私は方法を理解しようとしていますが起こるようにします。

私が試したもの:

  • button.refresh
  • form.refresh
  • DoEvents関数

Here is a video demo of the problem

答えて

0

私はへのセットアップのようなものを持っていませんこれを試してください。ただし、InvalidateRect API呼び出しを使用してみてください。私は宣言を示し、それを使用する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 
関連する問題