Tag:开源控件 , 源码下载 , 控件开发 , 控件美化 , 窗体换肤 , Skin , QQ表情 , Windows API , GDI+编程 , SQLite , Socket , 控件透明 , 下拉控件 , HTML 解析器 , 图片水印 , ScrollBar(滚动条) , Google Sitemap , 数据库 , SQL , WinForm , P/Invoke , C# ToolTip , WinForm控件美化扩展

 
您的位置: >> 首页 >> C# 视角 >> C# 使用GDI+绘制漂亮的ToolTip控件

C# 使用GDI+绘制漂亮的ToolTip控件

2010-01-16  来自:CS 程序员之窗  字体大小:【  
  • 摘要:本文介绍C#使用GDI+重绘工具提示控件ToolTip,实现ToolTip自定义图标、大图标、小图标和透明显示,并可以轻松的更换ToolTip背景和边框颜色。

在前面的文章C# 用ToolStripDropDown实现任意Windows控件弹出显示中,我们通过继承ToolStripDropDown实现了一个PopupControlHost宿主类,使用它可以非常方便地实现弹出信息显示,支持不规则外观的控件,还允许用户进行相关操作。但如果只需要用来作信息的简短提示,用ToolTip工具提示控件就行了,.NET自带的ToolTip控件可以显示系统图标、标题和提示信息,但是要显示自定义图标、大图标和漂亮的背景就不太方便了,接下来就介绍怎样扩展ToolTip控件,实现显示自定义图标、大图标、小图标、透明背景和个性化的背景和边框。

 

首先,来看看扩展的ToolTipEx控件的几种显示效果:


 


 


 

 
 

 

ToolTipEx提供了几个基本的属性,方便用户设置其显示效果,以下是ToolTipEx的类视图:

 

 

各属性简单介绍:

 

1ColorTable:获取工具提示的颜色表单。

2Handle:获取该工具提示的句柄。

3Image:获取或设置工具提示自定义图标。

4ImageSize:获取或设置自定义图标大小(16 x 16 - 32 x 32)。

5Opacity:获取或设置工具提示的透明度。

6TitleFont:获取或设置工具提示标题的字体。

 

下面介绍实现扩展ToolTip控件的几个要点:

 

1、  ToolTip实现重绘,需要设置OwnerDraw true,并通过Draw事件来重绘ToolTip

2、  ToolTip控件不像一般的继承Control的控件那样,可以得到控件的句柄(Handle),.NET实现ToolTip的句柄是internal修饰的,利用反射可以得到它的句柄,代码如下:

protected IntPtr Handle
{
get
{
if (!DesignMode)
{
Type t
= typeof(ToolTip);
PropertyInfo pi
= t.GetProperty(
"Handle",
BindingFlags.NonPublic
| BindingFlags.Instance);

IntPtr handle
= (IntPtr)pi.GetValue(this, null);
return handle;
}

return IntPtr.Zero;
}
}

3、  ToolTip控件实现透明显示的实现。上面获取ToolTip控件的句柄就是为了实现透明背景所需要的。ToolTip还有一个Popup事件,这个事件注释入下:在工具提示最初显示之前发生。在ToolTip将要显示之前,获取它的位置和大小,然后截取这个位置和大小对应的屏幕的图像,并把这个图像作为ToolTip的背景,这样我们就可以实现ToolTip控件透明显示了。看看Popup事件的实现代码:

private void ToolTipExPopup(
object sender, PopupEventArgs e)
{
if (_opacity < 1D)
{
//如果使用背景透明,获取背景图。
TipCapture();
}
}

4、  实现透明图标显示。通过颜色矩阵实现绘制透明图像,具体实现请参考RenderHelper类的RenderAlphaImage方法。

 

更多详细的实现代码,大家可以下载ToolTipEx源码参考。到此,ToolTip的美化就算完成,希望对您有所帮助。

最后,感谢John(杨剑)为我写了这篇文章的原稿,让我稍加修改就可以发布了。
 

 

声明:

本文版权归作者和CS 程序员之窗所有,欢迎转载,转载必须保留以下版权信息,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

作者:Starts_2000

出处:CS 程序员之窗 http://www.csharpwin.com

你可以免费使用或修改提供的源代码,但请保留源代码中的版权信息,详情请查看:

CS程序员之窗开源协议 http://www.csharpwin.com/csol.html