CSharp扩展TrackBar控件显示不同风格_第1页
CSharp扩展TrackBar控件显示不同风格_第2页
CSharp扩展TrackBar控件显示不同风格_第3页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C#扩展TrackBar控件显示不同风格1.控件效果关注55%意同购买2.开发思路TrackBar控件没有像其他控件那样,直接提供给用户重绘的函数,要实现个性化的TrackBar控件直接继承 TrackBar控件,利用TrackBar的一些 Windows消息,获取TrackBar 控件的信息,然后自己完全重绘,这种方法的好处是保留TrackBar控件的标准操作和属性,但是需要比较清楚的了解TrackBar控件的 Windows消息。3 .源码介绍实现TrackBar控件显示不同风格需要的一些API消息。TrackBar控件相关的一些消息都是以TBM(TackBar Message)开头的,在

2、TrackBar控件的美化中,主要用到了以下三个消 息:TBM_GETCHANNELREC获取轨道的位置和大小。TBM_GETTHUMBRE(获取滑块的位置和大小。 TBM_GETNUMTICS获取刻度的总个数。要获取这些信息,只需要向TrackBar控件发送相应的消息即可,例如需要获取取轨道的位置和大小: Se ndMessage(hWnd, TBM.TBM_GETCHANNELRECT, 0, ref trackRect)。接下来就是重绘 TrackBar控件了。重绘TrackBar控件,需要重写 WndProc函数,在 WM_PAIN消息实现重绘就行了:/ <summary>

3、/接收消息/ </summary>/ <param name="m"></param>protected override void WndProc( ref Messagem)switch (m.Msg)case WI.WM_PAINT:if (!_bPainting)_bPainting =true ;PAINTSTRUCTs = new PAINTSTRUCTNativeMethods .BeginPaint(m.HWnd, ref ps);DrawTrackBar(m.HWnd);NativeMethods .ValidateRe

4、ct(m.HWnd, ref ps.rcPaint);NativeMethods .EndPaint(m.HWnd, ref ps);_bPainting =false ;m.Result =Result .TRUE;elsebase.WndProc( ref m);break;default :base.WndProc( ref m);break;DrawTrackBar函数的功能就是获取TrackBar控件的一些信息,然后分别调用四个函数来绘制TrackBar控件:OnRenderBackground 函数,绘制 TrackBar 控件的背景。OnRenderTick函数,绘制TrackB

5、ar控件的刻度。OnRenderTrack函数,绘制TrackBar控件的轨道。On Re nderThumb函数,绘制TrackBar控件的滑块。这四个函数都是可以重写的,如果想实现不同样式的TrackBar控件,重写这四个函数,可以相应的绘制。DrawTrackBar函数的具体代码:private void DrawTrackBar( IntPtr hWnd)ControlState state = ControlState .Normal;bool horizontal = base.Orientation = Orientation .Horizontal;ImageDc tempDc

6、 = new ImageDc( base.Width, base.Height); TrackRECTtrackRect = new TrackRECT(); TrackRECTthumbRect = new TrackRECT();Graphics g = Graphics .FromHdc(tempDc.Hdc);NativeMethods .SendMessage(hWnd, TBM.TBM_GETCHANNELRECT, 0r,ef trackRect);NativeMethods .SendMessage(hWnd, TBM.TBM_GETTHUMBRECT, 0r,ef thumb

7、Rect);Rectangle trackRectangle = horizontal ? trackRect.Rect :Rectangle .FromLTRB(trackRect.Top, trackRect.Left, trackRect.Bottom, trackRect.Right);if (ThumbHovering(thumbRect)if ( Helper .LeftKeyPressed()state = ControlState .Pressed;elsestate = ControlState .Hover;/绘制TrackBar控件的背景using ( PaintEven

8、tArgs pe = new PaintEventArgs (g, ClientRectangle)OnRenderBackground(pe);int ticks = NativeMethods .SendMessage(hWnd, TBM.TBM_GETNUMTICS, 0, 0);int thumbOffset = horizontal ? thumbRect.Rect.Width : thumbRect.Rect.Height;int trackWidth = trackRect.Right - trackRect.Left;if (ticks > 0)List <floa

9、t > tickPosList = new List <float >(ticks);float tickSpace = (trackWidth - thumbOffset) / ( float )(ticks - 1);float offset = trackRect.Left + thumbOffset / 2f;for (int pos = 0; pos < ticks; pos +)tickPosList.Add(offset + tickSpace * pos);/绘制TrackBar控件的刻度using ( PaintTickEventArgs pte =

10、new PaintTickEventArgs (g, trackRectangle, tickPosList)OnRenderTick(pte);int rangeMin = NativeMethods .SendMessage(hWnd, TBM.TBM_GETRANGEMIN, 0, 0);int rangeMax = NativeMethods .SendMessage(hWnd, TBM.TBM_GETRANGEMAX, 0, 0);int iRange = rangeMax - rangeMin + 1;if (iRange > 0)float rangeSpace = iRa

11、nge = 1 ? 0 : (trackWidth - thumbOffset) / (float )(iRange- 1);float rangeOffset = trackRect.Left + thumbOffset / 2f;/ 绘制 TrackBar 控件的轨道using ( PaintTrackEventArgs pe = new PaintTrackEventArgs (g, trackRectangle,rangeSpace, rangeOffset, rangeMin, rangeMax)OnRenderTrack(pe);/绘制TrackBar控件的滑块using ( Pa

12、intThumbEventArgs pe = new PaintThumbEventArgs (g, thumbRect.Rect, state)OnRenderThumb(pe);g.Dispose();IntPtr hDC = NativeMethods .GetDC(hWnd);NativeMethods .BitBlt(hDC, 0, 0, base.Width, base.Height, tempDc.Hdc, 0, 0,0xCC0020);NativeMethods .ReleaseDC(hWnd, hDC);tempDc.Dispose();扩展后的TrackBar控件还实现了一个ColorTable和Items属性,ColorTable :只要通过ColorTable设置相应的颜色,就可以得到不同颜色效果的TrackBar 控件了。Items :通过添加项,可以显示不同段的背景颜色。TrackBar控件的完整类视图:Tr ackBarExClass H>TrackBarffi字段s属性宜 ColorTable 冒 IsShow

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论