.Net(C#)自定义WinForm控件之BalloonWindow
写在前面:使用Tooltip的时候,大家都会觉得有不足够的地方,如,在使用图片时,很不方便,如,要增加ToolTip的自动时(搜索内容等)不方便。普通都会想,如果ToolTip是一个Form,那什么问题都好解决了。下面就介绍一个ToolTip,它的本质是一个Form。
介绍此款用户控件的源网址是:deproject/KB/miscctrl/balloonnet.aspx
介绍此款用户控件的源网址是:deproject/KB/miscctrl/balloonnet.aspx
设计剖析
将Form变成ToopTip形状,可以设置显示的时间,关闭和打开的动作等
将Form变成ToopTip形状,可以设置显示的时间,关闭和打开的动作等
布局
要把一个Form变成一个Tooltip形状,那需要解决的问题有:源指向,也就是需要提示的控件或位置,上图所示,就是label4,要设计源指向的形状,至少设计为一个三角形,有一个顶点指向源控件。Form的标题区域取消,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消息在需要计算窗口客户区的大小和位置时发送。通过处理这个消息,应用程序可以在窗口大小或位置改变时控制客户区的内容。
从源文件中,可以发现两个重要的入口,
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的部分代码,看到了,下面的形式,就是计算边框和四角的大小和位置的。
WM_NCHITTEST讯息是一个很特殊的讯息。它是用来决定目前滑鼠所在位置属性的讯息,因此我们可以利用此特性,当滑鼠移至指定的位置时,传回 HTCAPTION,使得系统以为滑鼠目前位於标题棒,如此就可以移动视窗了。
正是利用了这三个方法,使得Form的形状变成ToopTip一样,下面,就算有了一个形似ToolTip的Form,我们,还是差一点,就是ToopTip的定位,往往在屏幕边界时,ToopTip的位置需要一定的调整,特别是那个小的三角形,随着顶点位置的不同,就要作不同的变形。
下面是RecalcLayout的部分代码,看到了,下面的形式,就是计算边框和四角的大小和位置的。
BalloonWindow是一个比较好的控件,好多的方法都提供了重写功能,这样,使到控件的适应性大大加强,而可使用面更宽。
其它
如果,可以设置一下,不出现三角形的指向,那么更好。
如果,可以设置一下,不出现三角形的指向,那么更好。
.Net(C#)自定义WinFormmousemove是什么键控件之Message Balloon
写在前面:.Net自带有标准的控件Tooltip,但是,在使用过程中,也有不合人意的时候,如自动关闭的问题,或怎样关闭提示,提示显示多长时间的问题。下面介绍一个比较好用的Tooltip自定义控件Message Balloon,通过对些控件的一些简单的介绍,希望大家可以到自已喜欢的Tooltip控件。
介绍这一款控件的源网址是:deproject/KB/shell/balloontipsarticle.aspx
作者也是想构造一个比较好用的Tooltip,正如所说,Tooltip用得好,是有很大帮助的,不过,用得不好,真是烦人的。
作者也是想构造一个比较好用的Tooltip,正如所说,Tooltip用得好,是有很大帮助的,不过,用得不好,真是烦人的。
设计剖析
在.Net(C#)的平台下使用标准的API接口,创建Tooltip窗口
在.Net(C#)的平台下使用标准的API接口,创建Tooltip窗口
布局
定位ToolTip的位置,然后弹出Tooltip界面,界面中包括图标,文字标题,文字内容和关闭窗口的功能。Tooltip界面的显示时间是没有限制的,点击时隐藏,而点击“Hide Tip”也可以隐藏。
定位ToolTip的位置,然后弹出Tooltip界面,界面中包括图标,文字标题,文字内容和关闭窗口的功能。Tooltip界面的显示时间是没有限制的,点击时隐藏,而点击“Hide Tip”也可以隐藏。
动作与方法
外部调用接口有
构造函数:
MessageBalloon()
MessageBalloon(Control parent)
显示与隐藏:
Show()
Hide()
重要的方法有
顾名思义,下面的方法是创建Tooltip界面和设计界面的位置
CreateTool()
SetBalloonPosition()
下面是CreateTool的方法体,也就是创建Tooltip的全过程,可以看到,大部分的功能都是由标准的API来组成的。由此可见,做自定义界面控件调用标准API是少不了的。
外部调用接口有
构造函数:
MessageBalloon()
MessageBalloon(Control parent)
显示与隐藏:
Show()
Hide()
重要的方法有
顾名思义,下面的方法是创建Tooltip界面和设计界面的位置
CreateTool()
SetBalloonPosition()
下面是CreateTool的方法体,也就是创建Tooltip的全过程,可以看到,大部分的功能都是由标准的API来组成的。由此可见,做自定义界面控件调用标准API是少不了的。
其中SendMessage,SetWindowPos等的语法,跟C++基本上是一致的。
字体格式选择ComboBox控件
写在前面:当我们在使用Microsoft Word这个软件时,经常会使用到字体选择功能,如宋体,黑体,隶书之类,是一个下拉框的功能,当前,这个,在.Net的标准控件中,是一个叫ComboBox的控件,那么,下面介绍的,就当然是FontComboBox了,自定义字体选择ComboBox。
介绍此控件的源网址是:deproject/KB/combobox/CGFontCombo.aspx
和普通的ComboBox最大的不同就是下拉的内容,是显示不同的字体的。用户选择不同的内容后,可以让别的控件的字体显示选择的字体。
和普通的ComboBox最大的不同就是下拉的内容,是显示不同的字体的。用户选择不同的内容后,可以让别的控件的字体显示选择的字体。
设计剖析
重写ComboBox的DrawItem方法,画我们需要的Item。
重写ComboBox的DrawItem方法,画我们需要的Item。
布局
使用了一个ComboBox以辅助显示和定位,而仅仅在DrawItem方法中,用我们所需要的样式来显示
使用了一个ComboBox以辅助显示和定位,而仅仅在DrawItem方法中,用我们所需要的样式来显示
动作
如下图所示,程序在构造函数中就订阅了三个事件,并针对这些事件做处理,DrawItem,SelectedIndexChanged,FontChanged。
同时,重写了句柄创建方法,在CreateSampleFonts中对控件ComboBox的内容进行填充,填充所有的字体库,
注意到,在画ComboBox的Item时,每画一个,都是按Item的内容来画的。
如下图所示,程序在构造函数中就订阅了三个事件,并针对这些事件做处理,DrawItem,SelectedIndexChanged,FontChanged。
同时,重写了句柄创建方法,在CreateSampleFonts中对控件ComboBox的内容进行填充,填充所有的字体库,
注意到,在画ComboBox的Item时,每画一个,都是按Item的内容来画的。
对FontComboBox的介绍就到此
带优美外观的UserControl控件GroupBox
写在前面:如果大家觉得.Net自带的GroupBox控件太差了,样子很不美观,而想用.Net强大的自定义功能来实现定制控件,如,在GroupBox的Title那里加个Button形状的东西,给GroupBox的四周的角都变成圆的,给GroupBox加个背景,并且有过渡效果。那,请您看看,下面的效果图,是不是您所需要的?就是不是你需要的,但是不是有很大的参考价值?应该是吧。
介绍此自定义控件的源网址是:deproject/KB/miscctrl/grouper.aspx
代码是用C#来写的。在那里,你可以下载到自定义控件的源码,不过,请您尊重作者的原创。
代码是用C#来写的。在那里,你可以下载到自定义控件的源码,不过,请您尊重作者的原创。
设计剖析
新自定义一个UserControl,然后按GroupBox的样子画出控件。
新自定义一个UserControl,然后按GroupBox的样子画出控件。
布局
不继承GroupBox而直接新建一个UserControl控件,需要勇气和技术,GroupBox有如下的部分:标题,也就是GroupBox左上角部分,在此控件中,被打包成一个Button的样子,Button的四个角都是平滑而有弧度的,而且,可以放图片,可以定义控件的固定位置,如UserControl的Left,Top设计好,然后开始画这个Button,而Shadow也是通过画椭圆弧来实现的,Button中的过渡,可以通过LinearGradientBrush等类提供的方法来实现,Brush中提供了一,二和三维的颜方案。
GroupBox的角,椭圆弧和Shadow也是这样画出来的,这需要编程者,有比较深厚的GUI经验和耐心的调试。对于GroupBox的内部,使用UserControl默认的容器形式。
不继承GroupBox而直接新建一个UserControl控件,需要勇气和技术,GroupBox有如下的部分:标题,也就是GroupBox左上角部分,在此控件中,被打包成一个Button的样子,Button的四个角都是平滑而有弧度的,而且,可以放图片,可以定义控件的固定位置,如UserControl的Left,Top设计好,然后开始画这个Button,而Shadow也是通过画椭圆弧来实现的,Button中的过渡,可以通过LinearGradientBrush等类提供的方法来实现,Brush中提供了一,二和三维的颜方案。
GroupBox的角,椭圆弧和Shadow也是这样画出来的,这需要编程者,有比较深厚的GUI经验和耐心的调试。对于GroupBox的内部,使用UserControl默认的容器形式。
根据这样的布局,产生了多个属性的设置,如源背景,过渡后的背景,Title的弧度,GroupBox的弧度等。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论