none
请教如何在ProgressBar中央绘制百分比? RRS feed

  • 问题

  •  

    我们都知道,windows中的进度条是随着主题的变化而变化的。而自行绘制一个进度条并加入百分比并不太难,但是,这样绘制的进度条是不能根据主题的不同而变化,所以,在此请教如何向.NET中的ProgressBar加入一个百分比,并将其显示在ProgressBar中央?
    2008年5月7日 6:54

答案

  •  

    您所遇到的问题 可以总结为  系统控件的二次开发。即系统控件继承重写。

    在不破坏原有控件的功能、属性上,添加新的属性或方法

     

     

    解决方法步骤

    1-〉继承原有系统控件 即ProgressBar类,有此可以保留原有控件的功能、效果或状态

    2-〉重写原有控件的绘制方法 eg:OnDraw或OnPaint

    3-〉生成自己 独立控件或控件包,以便后期发布。

     

    注1:步骤2中必须 调用基类 绘制方法,由于系统控件绘制中会调用系统Theme Dll。有此才能够实现不同 系统主题有不同 感官效果。您也可以自己调用系统主题DLL不继承VS 自己的控件。但此方式复杂度 很高。个人不推荐这个方式。假使你非常希望 了解、尝试或学习这种方式。请您查阅 相应系统白皮书。不同系统 使用Theme DLL 方式略有不同。尤其VISTA和win2k有非常大区别。

    注2:数值绘制部分 参考GDI+绘制方式 即 System.Drawing命名空间下的 Graghics、Pen、SoildColor等类实现绘制。

     

    2008年5月12日 3:17

全部回复

  • 我想要的效果是在ProgressBar标准控件上绘制百分比,这样才能使做出来的控件随着Windows主题的变化而变化,而且视觉上也好看得多。

    2008年5月7日 10:15
  • 你在progressbar上面放一个pic控件或其他什么可以画图的控件,然后你自己处理这个控件。

    2008年5月8日 3:29
  •  JACK Fu-MSFT 写:

    你在progressbar上面放一个pic控件或其他什么可以画图的控件,然后你自己处理这个控件。

    你指的pic控件是不是PictureBox?

    如果是的话就根本就不可以,它会有一个矩形在档在ProgressBar上。

    2008年5月8日 16:43
  •  

    不用阿。。你直接画也可以的,怎么好看怎么画。
    2008年5月12日 1:57
  •  

    您所遇到的问题 可以总结为  系统控件的二次开发。即系统控件继承重写。

    在不破坏原有控件的功能、属性上,添加新的属性或方法

     

     

    解决方法步骤

    1-〉继承原有系统控件 即ProgressBar类,有此可以保留原有控件的功能、效果或状态

    2-〉重写原有控件的绘制方法 eg:OnDraw或OnPaint

    3-〉生成自己 独立控件或控件包,以便后期发布。

     

    注1:步骤2中必须 调用基类 绘制方法,由于系统控件绘制中会调用系统Theme Dll。有此才能够实现不同 系统主题有不同 感官效果。您也可以自己调用系统主题DLL不继承VS 自己的控件。但此方式复杂度 很高。个人不推荐这个方式。假使你非常希望 了解、尝试或学习这种方式。请您查阅 相应系统白皮书。不同系统 使用Theme DLL 方式略有不同。尤其VISTA和win2k有非常大区别。

    注2:数值绘制部分 参考GDI+绘制方式 即 System.Drawing命名空间下的 Graghics、Pen、SoildColor等类实现绘制。

     

    2008年5月12日 3:17
  •  薛洪立 写:

     

    您所遇到的问题 可以总结为  系统控件的二次开发。即系统控件继承重写。

    在不破坏原有控件的功能、属性上,添加新的属性或方法

     

     

    解决方法步骤

    1-〉继承原有系统控件 即ProgressBar类,有此可以保留原有控件的功能、效果或状态

    2-〉重写原有控件的绘制方法 eg:OnDraw或OnPaint

    3-〉生成自己 独立控件或控件包,以便后期发布。

     

    注1:步骤2中必须 调用基类 绘制方法,由于系统控件绘制中会调用系统Theme Dll。有此才能够实现不同 系统主题有不同 感官效果。您也可以自己调用系统主题DLL不继承VS 自己的控件。但此方式复杂度 很高。个人不推荐这个方式。假使你非常希望 了解、尝试或学习这种方式。请您查阅 相应系统白皮书。不同系统 使用Theme DLL 方式略有不同。尤其VISTA和win2k有非常大区别。

    注2:数值绘制部分 参考GDI+绘制方式 即 System.Drawing命名空间下的 Graghics、Pen、SoildColor等类实现绘制。

     

    重写OnPaint在一年前就已经试过了,完全不行,在ProgressBar上都看不到所画的东西

    2008年5月14日 14:16
  • Public Class mypro
        Inherits ProgressBar
        Dim wg As Graphics
        Dim bp As Bitmap
        Public Sub DrawString() '调用此方法
            Me.Refresh()
            bp = New Bitmap(Me.Width, Me.Height)
            wg = Graphics.FromImage(bp)
            Dim tsizef As SizeF = wg.MeasureString(Me.Text, Me.Font)
            wg.DrawString(Me.Text, Me.Font, New SolidBrush(Me.ForeColor), Me.Width / 2 - tsizef.Width / 2, Me.Height / 2 - tsizef.Height / 2)
            Me.CreateGraphics.DrawImage(bp, 0, 0)
        End Sub
    End Class
    2009年6月28日 20:25
  • 别搞那么复杂,在ProgressBar上叠加一个TextBlock算了。这样完全可以达到你要的效果,也极其简单。
    2011年1月20日 17:04