zoukankan      html  css  js  c++  java
  • TabControl控件的美化

    文件下载:http://files.cnblogs.com/zfanlong1314/TabControlEX.rar

    本文转载:http://www.cnblogs.com/lmlblog/archive/2012/03/29/TabControl.html

      最近因项目需要 所以就到网上找了一个美化过的TabControl控件   只不过这个控件没有实现TabPage的关闭功能 所以就自己添加了一个关闭功能

    好了废话不多说 

    直接贴代码

    UpDownButtonPaintEventArgs 类的代码

    复制代码
     1 using System;
    2 using System.Collections.Generic;
    3 using System.Text;
    4 using System.Windows.Forms;
    5 using System.Drawing;
    6
    7 namespace StyleWinForm.TabControls
    8 {
    9 public delegate void UpDownButtonPaintEventHandler(
    10 object sender,
    11 UpDownButtonPaintEventArgs e);
    12
    13 public class UpDownButtonPaintEventArgs : PaintEventArgs
    14 {
    15 private bool _mouseOver;
    16 private bool _mousePress;
    17 private bool _mouseInUpButton;
    18
    19 public UpDownButtonPaintEventArgs(
    20 Graphics graphics,
    21 Rectangle clipRect,
    22 bool mouseOver,
    23 bool mousePress,
    24 bool mouseInUpButton)
    25 : base(graphics, clipRect)
    26 {
    27 _mouseOver = mouseOver;
    28 _mousePress = mousePress;
    29 _mouseInUpButton = mouseInUpButton;
    30 }
    31
    32 public bool MouseOver
    33 {
    34 get { return _mouseOver; }
    35 }
    36
    37 public bool MousePress
    38 {
    39 get { return _mousePress; }
    40 }
    41
    42 public bool MouseInUpButton
    43 {
    44 get { return _mouseInUpButton; }
    45 }
    46 }
    47 }
    复制代码

    NativeMethods 类的代码

    复制代码
     1 using System;
    2 using System.Collections.Generic;
    3 using System.Text;
    4 using System.Runtime.InteropServices;
    5 using System.Drawing;
    6
    7 namespace StyleWinForm.TabControls
    8 {
    9 internal class NativeMethods
    10 {
    11 public const int WM_PAINT = 0xF;
    12
    13 public const int VK_LBUTTON = 0x1;
    14 public const int VK_RBUTTON = 0x2;
    15
    16 private const int TCM_FIRST = 0x1300;
    17 public const int TCM_GETITEMRECT = (TCM_FIRST + 10);
    18
    19 public static readonly IntPtr TRUE = new IntPtr(1);
    20
    21 [StructLayout(LayoutKind.Sequential)]
    22 public struct PAINTSTRUCT
    23 {
    24 internal IntPtr hdc;
    25 internal int fErase;
    26 internal RECT rcPaint;
    27 internal int fRestore;
    28 internal int fIncUpdate;
    29 internal int Reserved1;
    30 internal int Reserved2;
    31 internal int Reserved3;
    32 internal int Reserved4;
    33 internal int Reserved5;
    34 internal int Reserved6;
    35 internal int Reserved7;
    36 internal int Reserved8;
    37 }
    38
    39 [StructLayout(LayoutKind.Sequential)]
    40 public struct RECT
    41 {
    42 internal RECT(int X, int Y, int Width, int Height)
    43 {
    44 this.Left = X;
    45 this.Top = Y;
    46 this.Right = Width;
    47 this.Bottom = Height;
    48 }
    49 internal int Left;
    50 internal int Top;
    51 internal int Right;
    52 internal int Bottom;
    53 }
    54
    55 [DllImport("user32.dll")]
    56 public static extern IntPtr FindWindowEx(
    57 IntPtr hwndParent,
    58 IntPtr hwndChildAfter,
    59 string lpszClass,
    60 string lpszWindow);
    61
    62 [DllImport("user32.dll")]
    63 public static extern IntPtr BeginPaint(IntPtr hWnd, ref PAINTSTRUCT ps);
    64
    65 [DllImport("user32.dll")]
    66 [return: MarshalAs(UnmanagedType.Bool)]
    67 public static extern bool EndPaint(IntPtr hWnd, ref PAINTSTRUCT ps);
    68
    69 [DllImport("user32.dll")]
    70 public static extern short GetKeyState(int nVirtKey);
    71
    72 [DllImport("user32.dll")]
    73 public static extern IntPtr SendMessage(
    74 IntPtr hWnd, int Msg, int wParam, ref RECT lParam);
    75
    76 [DllImport("user32.dll")]
    77 [return: MarshalAs(UnmanagedType.Bool)]
    78 public static extern bool GetCursorPos(ref Point lpPoint);
    79
    80 [DllImport("user32.dll")]
    81 public extern static int OffsetRect(ref RECT lpRect, int x, int y);
    82
    83 [DllImport("user32.dll")]
    84 [return: MarshalAs(UnmanagedType.Bool)]
    85 public static extern bool PtInRect([In] ref RECT lprc, Point pt);
    86
    87 [DllImport("user32.dll")]
    88 [return: MarshalAs(UnmanagedType.Bool)]
    89 public static extern bool GetWindowRect(IntPtr hWnd, ref RECT lpRect);
    90
    91 [DllImport("user32.dll")]
    92 [return: MarshalAs(UnmanagedType.Bool)]
    93 public static extern bool GetClientRect(IntPtr hWnd, ref RECT r);
    94
    95 [DllImport("User32.dll", CharSet = CharSet.Auto)]
    96 public static extern bool IsWindowVisible(IntPtr hwnd);
    97 }
    98 }
    复制代码

    TabControl组件的代码

      

    复制代码
     1  #region 为TabControl添加关闭按钮
    2 const int CLOSE_SIZE = 15;
    3 //关闭按钮功能
    4 private void MainTabControl_MouseDown(object sender, MouseEventArgs e)
    5 {
    6 if (tabContent.SelectedTab.Name != "tabPageWelcome")
    7 {
    8 if (e.Button == MouseButtons.Left)
    9 {
    10 int x = e.X, y = e.Y;
    11 //计算关闭区域
    12 Rectangle myTabRect = this.tabContent.GetTabRect(this.tabContent.SelectedIndex);
    13
    14 myTabRect.Offset(myTabRect.Width - (CLOSE_SIZE + 3), 2);
    15 myTabRect.Width = CLOSE_SIZE;
    16 myTabRect.Height = CLOSE_SIZE;
    17
    18 //如果鼠标在区域内就关闭选项卡
    19 bool isClose = x > myTabRect.X && x < myTabRect.Right && y > myTabRect.Y && y < myTabRect.Bottom;
    20 if (isClose == true)
    21 {
    22 this.tabContent.TabPages.Remove(this.tabContent.SelectedTab);
    23 }
    24 }
    25 }
    26 }
    27 #endregion
    复制代码



  • 相关阅读:
    第八章 1 元组简介
    第七章 5 字典生成式
    第七章 4 字典的视图操作、字典的遍历、字典的特点
    第七章 3 字典的常用操作(增删改查)
    第七章 2 字典的创建以及字典元素的获取
    第七章 1 字典介绍
    Java 中 Executors.newSingleThreadExecutor() 与Executors.newFixedThreadPool(1)有什么区别
    Java 使用线程池执行若干任务
    使用Jacoco获取 Java 程序的代码执行覆盖率
    基于 Golang 完整获取百度地图POI数据的方案
  • 原文地址:https://www.cnblogs.com/51net/p/3999698.html
Copyright © 2011-2022 走看看