.Net(C#)自定义WinForm控件之BalloonWindow
写在前面:使用Tooltip的时候,大家都会觉得有不足够的地方,如,在使用图片时,很不方便,如,要增加ToolTip的自动时(搜索内容等)不方便。普通都会想,如果ToolTip是一个Form,那什么问题都
好解决了。下面就介绍一个ToolTip,它的本质是一个Form。
介绍此款用户控件的源网址是:http://www.codeproject.com/KB/miscctrl/balloonnet.aspx
设计剖析
将Form变成ToopTip形状,可以设置显示的时间,关闭和打开的动作等
布局
要把一个Form变成一个Tooltip形状,那需要解决的问题有:源指向,也就是需要提示的控件或位置,上图所示,就是label4,要设计源指向的形状,至少设计为一个三角形,有一个顶点指向源控件。Form
的标题区域取消,Form的四边要变成椭圆形状,整个ToopTip的边框是可以设置边框颜色的。
动作与方法
从源文件中,可以发现两个重要的入口,
WndProc(ref System.Windows.Forms.Message m)
RecalcLayout()
众所周知,WndProc是消息处理的函数,源文件对三个消息进行了加工和处理,它们是WM_NCCALCSIZE,WM_NCPAINT,WM_NCHITTEST,三个消息的含义是这样的
WM_NCCALCSIZE消息在需要计算窗口客户区的大小和位置时发送。通过处理这个消息,应用程序可以
在窗口大小或位置改变时控制客户区的内容。
WM_NCPAINT用于重画窗口的非用户区,如标题,边框和滚动杆。
WM_NCHITTEST讯息是一个很特殊的讯息。它是用来决定目前滑鼠所在位置属性的讯息,因此我们可以利用此特性,当滑鼠移至指定的位置时,传回 HTCAPTION,使得系统以为滑鼠目前位於标题棒,如此就
可以移动视窗了。
正是利用了这三个方法,使得Form的形状变成ToopTip一样,下面,就算有了一个形似ToolTip的Form,我们,还是差一点,就是ToopTip的定位,往往在屏幕边界时,ToopTip的位置需要一定的调整,特别
是那个小的三角形,随着顶点位置的不同,就要作不同的变形。
下面是RecalcLayout的部分代码,看到了,下面的形式,就是计算边框和四角的大小和位置的。
强,而可使用面更宽。
其它
如果,可以设置一下,不出现三角形的指向,那么更好。
BalloonWindow是一个比较好的控件,好多的方法都提供了重写功能,这样,使到控件的适应性大大加
.Net(C#)自定义WinForm控件之Message Balloon
写在前面:.Net自带有标准的控件Tooltip,但是,在使用过程中,也有不合人意的时候,如自动关闭的问题,或怎样关闭提示,提示显示多长时间的问题。下面介绍一个比较好用的Tooltip自定义控件Message
Balloon,通过对些控件的一些简单的介绍,希望大家可以找到自已喜欢的Tooltip控件。
介绍这一款控件的源网址是:http://www.codeproject.com/KB/shell/balloontipsarticle.aspx 作者也是想构造一个比较好用的Tooltip,正如所说,Tooltip用得好,是有很大帮助的,不过,用得不好,
真是烦人的。 设计剖析
在.Net(C#)的平台下使用标准的API接口,创建Tooltip窗口
布局
定位ToolTip的位置,然后弹出Tooltip界面,界面中包括图标,文字标题,文字内容和关闭窗口的功能。
Tooltip界面的显示时间是没有限制的,点击时隐藏,而点击“Hide Tip”也可以隐藏。
动作与方法 外部调用接口有 构造函数: MessageBalloon()
MessageBalloon(Control parent)
显示与隐藏: Show() Hide() 重要的方法有
顾名思义,下面的方法是创建Tooltip界面和设计界面的位置
CreateTool() SetBalloonPosition()
下面是CreateTool的方法体,也就是创建Tooltip的全过程,可以看到,大部分的功能都是由标准的API
来组成的。由此可见,做自定义界面控件调用标准API是少不了的。
其中SendMessage,SetWindowPos等的语法,跟C++基本上是一致的。
字体格式选择ComboBox控件
写在前面:当我们在使用Microsoft Word这个软件时,经常会使用到字体选择功能,如宋体,黑体,隶书之类,是一个下拉框的功能,当前,这个,在.Net的标准控件中,是一个叫ComboBox的控件,那么,
下面介绍的,就当然是FontComboBox了,自定义字体选择ComboBox。
介绍此控件的源网址是:http://www.codeproject.com/KB/combobox/CGFontCombo.aspx 和普通的ComboBox最大的不同就是下拉的内容,是显示不同的字体的。用户选择不同的内容后,可以
让别的控件的字体显示选择的字体。
设计剖析
重写ComboBox的DrawItem方法,画我们需要的Item。
布局
使用了一个ComboBox以辅助显示和定位,而仅仅在DrawItem方法中,用我们所需要的样式来显示
动作
如下图所示,程序在构造函数中就订阅了三个事件,并针对这些事件做处理,
DrawItem,SelectedIndexChanged,FontChanged。
同时,重写了句柄创建方法,在CreateSampleFonts中对控件ComboBox的内容进行填充,填充所有
的字体库,