废话少说,直接上码:

namespace csPublish
{
[ToolboxItem(true)]
class textProgressBar : System.Windows.Forms.ProgressBar
{
[System.Runtime.InteropServices.DllImport("user32.dll ")]
static extern IntPtr GetWindowDC(IntPtr hWnd); [System.Runtime.InteropServices.DllImport("user32.dll ")]
static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC); private System.Drawing.Color _TextColor = System.Drawing.Color.Black;
private System.Drawing.Font _TextFont = new System.Drawing.Font("SimSun ", ); public System.Drawing.Color TextColor
{
get { return _TextColor; }
set { _TextColor = value; this.Invalidate(); }
} public System.Drawing.Font TextFont
{
get { return _TextFont; }
set { _TextFont = value; this.Invalidate(); }
} protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
if (m.Msg == 0xf || m.Msg == 0x133)
{
//拦截系统消息,获得当前控件进程以便重绘。
//一些控件(如TextBox、Button等)是由系统进程绘制,重载OnPaint方法将不起作用.
//所有这里并没有使用重载OnPaint方法绘制TextBox边框。
//
//MSDN:重写 OnPaint 将禁止修改所有控件的外观。
//那些由 Windows 完成其所有绘图的控件(例如 Textbox)从不调用它们的 OnPaint 方法,
//因此将永远不会使用自定义代码。请参见您要修改的特定控件的文档,
//查看 OnPaint 方法是否可用。如果某个控件未将 OnPaint 作为成员方法列出,
//则您无法通过重写此方法改变其外观。
//
//MSDN:要了解可用的 Message.Msg、Message.LParam 和 Message.WParam 值,
//请参考位于 MSDN Library 中的 Platform SDK 文档参考。可在 Platform SDK(“Core SDK”一节)
//下载中包含的 windows.h 头文件中找到实际常数值,该文件也可在 MSDN 上找到。
IntPtr hDC = GetWindowDC(m.HWnd);
if (hDC.ToInt32() == )
{
return;
} //base.OnPaint(e);
System.Drawing.Graphics g = Graphics.FromHdc(hDC);
SolidBrush brush = new SolidBrush(_TextColor);
string s = string.Format("{0}%", this.Value * / this.Maximum);
SizeF size = g.MeasureString(s, _TextFont);
float x = (this.Width - size.Width) / ;
float y = (this.Height - size.Height) / ;
g.DrawString(s, _TextFont, brush, x, y);
//返回结果
m.Result = IntPtr.Zero;
//释放
ReleaseDC(m.HWnd, hDC);
}
}
}
}

引文链接:

c#在WinForm中重写ProgressBar控件(带%的显示)

http://www.codeproject.com/Articles/29457/TSmartProgressBar-A-Smart-C-ProgressBar-with-Perce

下载链接:http://yun.baidu.com/share/link?shareid=2240439027&uk=3221713554

http://stackoverflow.com/questions/3529928/how-do-i-put-text-on-progressbar

http://stackoverflow.com/questions/8259157/text-on-progressbar-in-c-sharp/8259258

c# 进度条的使用(例子)

C#在WinForm中重写ProgressBar控件(带%的显示)的更多相关文章

  1. Winform中修改WebBrowser控件User-Agent的方法(已经测试成功)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...

  2. WPF中嵌入WinForm中的webbrowser控件

    原文:WPF中嵌入WinForm中的webbrowser控件 使用VS2008创建WPF应用程序,需使用webbrowser.从工具箱中添加WPF组件中的webbrowser发现其中有很多属性事件不能 ...

  3. winform中的dateTimePicker控件设置默认值为空

    winform中的dateTimePicker控件设置默认值为空   第一步:设置Format的属性值为“Custom” 第二步:设置CustomFormat的属性值为空,需要按一个空格键

  4. easyui中tree型控件不正常显示的处理方法

    我在使用easyui中的tree控件时,出现不正常显示的现象,比如li中不能使用自定义的图标.父级展开或关闭时,其子级仍然显现并出现重叠等.找了很多资料,都没解决这个问题,后来逐个对照官方的源码,才找 ...

  5. WinForm中的DataGridView控件显示数据字典方案2

    winform代码分析object数据库 做这部分功能的时候,上网搜索了很多资料,发现很少涉及到这方面的解决方案,找了相关的问题帖子,很多人都叫使用视图去处理,当然,用视图是可以解决这个问题,但是,这 ...

  6. Winform中使用printDocument控件打印pictureBox中的二维码照片

    场景 Winform中使用zxing和Graphics实现自定义绘制二维码布局: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1 ...

  7. winform中如何在多线程中更新UI控件--ListView实时显示执行信息

    1.在winform中,所有对UI的操作,都得回到UI线程(主线程)上来,才不会报错 线程间操作无效: 从不是创建控件的线程访问它. 2.在winform中,允许通过Control.invoke对控件 ...

  8. Winform中生成自动控件

    场景: 前几天项目需要模拟数据,但是实际设备还没有接上,就自己用Winform搭建了一个数据模拟器,生成数据给平台.这里又一个需求,就是从数据库中找出设备,然后自动生成控件,勾选就表示开启该设备,能上 ...

  9. winform中更新UI控件的方案介绍

    这是一个古老的话题...直入主题吧! 对winfrom的控件来说,多线程操作非常容易导致复杂且严重的bug,比如不同线程可能会因场景需要强制设置控件为不同的状态,进而引起并发.加锁.死锁.阻塞等问题. ...

随机推荐

  1. ASP.NET MVC 简单分页代码

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  2. vue-router 路由懒加载

    webpack打包会将所有资源文件合并压缩成一个文件,导致最终的文件非常大,甚至超过几M,以致页面首次加载会比较慢,如下图: 其中红色标出的是在浏览器中加载的js文件,gzip压缩前已经达到500多K ...

  3. 51Nod1584 加权约数和

    这题其实就是反演一波就好了(那你还推了一下午+一晚上),不过第一次碰到\(O(n\log n)\)预处理分块和式的方法-- 不知为啥我跟唐教主的题解推的式子不太一样--(虽然本质上可能是相同的吧) 那 ...

  4. IBM V7000错误代码及解决

    https://www.ibm.com/support/knowledgecenter/zh/ST3FR7_7.7.1/com.ibm.storwize.v7000.771.doc/svc_error ...

  5. CRM Online Outlook Client Configuration Wizard

    CRM Outlook客户端满足和便捷了用户对office outlook和CRM两个程序的使用需求.通过CRM outlook 客户端,用户可以像在浏览器中访问CRM一样,流畅的读写CRM数据.同时 ...

  6. 【小程序】微信小程序绑定企业微信后怎样获取到用户信息

    一.获取access_token 1.https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID&corpsecret=SECRECT Cor ...

  7. cookie implements session

    cookie实现会话 服务器调用response.addCookie()设置set-cookie响应头后,浏览器收到这个响应头与数值后,会将它以文件的形式存储于本地PC上.当浏览器再次访问同一Web服 ...

  8. Linux wget安装详解

    Wget是一个十分常用命令行下载工具,多数Linux发行版本都默认包含这个工具.如果没有安装可在 http://www.gnu.org/software/wget/wget.html下载最新版本,并使 ...

  9. [WINDOWS MOBILE | SOLUTION] 通过有线连接到 PC 后,WM设备能 PING 通网关但是不能上网

    在 Windows Mobile Device Center 处点击 Mobile Device Settings, Connection Settings, 选择 This computer con ...

  10. C# DataGridview用NPOI导出Excel文件

    导出excel我用的是nuget 的NPOI,直接在项目中添加的,引用到项目中,下面是截图: 下面我把ExcelHelper贴出来 public static class ExcelHelper { ...