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

 
您的位置: >> 首页 >> C# 视角 >> C# WinForm控件美化扩展系列之TabControl控件(3)-完整版

C# WinForm控件美化扩展系列之TabControl控件(3)-完整版

2009-08-25  来自:CS 程序员之窗  字体大小:【  
  • 摘要:前面的文章C# WinForm控件美化扩展系列之TabControl控件(2)实现了对Tab项处于上方和下方时的重绘,这篇文章中接着介绍Tab项处于左边和右边时的重绘,实现对TabControl的完全美化。

前面的文章C# WinForm控件美化扩展系列之TabControl控件(2实现了对Tab项处于上方和下方时的重绘,这篇文章中接着介绍Tab项处于左边和右边时的重绘,实现对TabControl的完全美化。

实现Tab项处于左右两边的重绘跟Tab项处于上方和下方时的重绘几乎一样,难点在于文字需要竖着绘制,这涉及到GDI+旋转和平移的知识。具体怎么实现平移和旋转在这里不进行详细的介绍,贴一段Tab项在左边是绘制文字的代码吧:

                case TabAlignment.Left:

                    if (hasImage)

                    {

                        textRect.Height = tabRect.Height - tabRect.Width + 2;

                    }

                    g.TranslateTransform(textRect.X, textRect.Bottom); //平移

                    g.RotateTransform(270F);  //旋转

                    sf = new StringFormat(StringFormatFlags.NoWrap);

                    sf.Alignment = StringAlignment.Center;

                    sf.LineAlignment = StringAlignment.Center;

                    sf.Trimming = StringTrimming.Character;

                    newTextRect = textRect;

                    newTextRect.X = 0;

                    newTextRect.Y = 0;

                    newTextRect.Width = textRect.Height;

                    newTextRect.Height = textRect.Width;

                    using (Brush brush = new SolidBrush(page.ForeColor))

                    {

                        g.DrawString(

                            page.Text,

                            page.Font,

                            brush,

                            newTextRect,

                            sf);

                    }

                    g.ResetTransform();

                    break;

除了绘制文字,就是对背景、图标和边框的绘制了,这些比较容易,就不介绍了,最后来看看TabControl完成后的完整效果:

    到此为止,就完成了对TabControl的完全绘制,但是有点遗憾的是,当TabControl设为左右显示Tab项的时候,就会默认是多行显示Tab项,不能实现垂直显示的时候也是单行显示,实现像QQ那样的TabControl,这等以后有时间再来解决了。

声明:

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

作者:Starts_2000

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

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

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