0

カスタム コントロールのプログレス バーの色を変更しようとしています。以下の sendmessage 関数を使用するなど、かなりの方法を試しました。

<DllImport("User32.Dll")> _
Public Shared Function SendMessage(hwnd As Integer, wMsg As Integer, wParam As Integer, lParam As Integer) As Integer
End Function
Public Const PBM_SETBKCOLOR As Integer = &H2001
Public Const PBM_SETBARCOLOR As Integer = &H409

Public Sub SetProgressBackColor(c As Color)

    Dim a As Integer = Convert.ToInt32(c.R.ToString())
    Dim b As Integer = Convert.ToInt32(c.G.ToString())
    Dim d As Integer = Convert.ToInt32(c.B.ToString())
    Dim tot As Integer = Convert.ToInt32(ColorTranslator.ToOle(Color.FromArgb(a, b, d)).ToString())
    Dim j As Integer = Me.PercentFull.Handle.ToInt32()
    SendMessage(j, PBM_SETBKCOLOR, 0, tot)
End Sub

Public Sub SetProgressForeColor(c As Color)

    Dim a As Integer = Convert.ToInt32(c.R.ToString())
    Dim b As Integer = Convert.ToInt32(c.G.ToString())
    Dim d As Integer = Convert.ToInt32(c.B.ToString())
    Dim tot As Integer = Convert.ToInt32(ColorTranslator.ToOle(Color.FromArgb(a, b, d)).ToString())
    Dim j As Integer = Me.PercentFull.Handle.ToInt32()
    SendMessage(j, PBM_SETBARCOLOR, 0, tot)
End Sub

しかし、これは私にとってはうまくいきませんでした。

このコントロールの前色を変更するにはどうすればよいでしょうか? XPスタイルが有効になるため、PercentFull.ForeColorを使用できません。

ありがとう

4

3 に答える 3

1

CodeProject のhttp://www.codeproject.com/Articles/9635/A-Smooth-ProgressBar-for-everyone-Part-Duexで、Stumpy は、色を変更できるプログレスバーを作成できる SmoothProgressBar を作成しました。見てみな。

于 2012-05-21T11:48:56.543 に答える
1

はこのBackColorメッセージを送信するだけです。
ドキュメントに記載されているように、

visual スタイルが有効になっている場合、このメッセージは無効です。

これはできません。

于 2012-05-20T18:50:25.930 に答える
0

助けてくれてありがとう、しかし私は次を使うことにしました:

SendMessage(PercentFull.Handle, &H400 + 16, &H2, 0) 'エラー; Red
SendMessage(PercentFull.Handle, &H400 + 16, &H3, 0) '一時停止; 黄
SendMessage(PercentFull.Handle, &H400 + 16, &H1, 0) '一時停止; 緑

于 2012-05-22T08:49:47.320 に答える