xp样式按钮

using  System;
using  System.Windows;
using  System.Drawing;
using  System.Drawing.Drawing2D;
using  System.Windows .Forms ; 

namespace   Control
{
     

    
public class XPButtonII:System.Windows.Forms.Button
    
{
        
//state variable for mouse down
        private bool mouseDown=false;

        
//state variable for mouse hover
        private bool mouseHover=false;

        
public XPButtonII()
        
{
            
//set the control UserPaint
            SetStyle(ControlStyles.UserPaint,true);

            
//EventHandler for MouseDown
            
//MouseDown+=new MouseEventHandler(OnMouseDown);

            
//EventHandler for MouseUp
            
//MouseUp+=new MouseEventHandler(OnMouseUp);

            
//EventHandler for MouseEnter
            MouseEnter+=new EventHandler(OnMouseEnter);

            
//EventHandler for MouseLeave
            MouseLeave+=new EventHandler(OnMouseLeave);

            Height
=23;//Default Height
            Width=75;//Default Width
        }


        
protected override void OnPaint(PaintEventArgs pe)
        
{
 
        
//first, paint the control with parent form's background color
            pe.Graphics.FillRectangle(new SolidBrush(Parent.BackColor),
                pe.ClipRectangle);
             

            
//if the button is disabled, draw the disable style
            if (Enabled == false)
            
{
                DrawDisableButton(pe.Graphics);
            }

            
else if (mouseDown)
            
{
                
//when mouse down, draw the mouse down style
                DrawMouseDownButton(pe.Graphics);
            }

            
else if (mouseHover)
            
{
                
//when mouse hover, draw the mouse hover style
                DrawMouseHoverButton(pe.Graphics);
            }

            
else if (Focused)
            
{
                
//when mouse is focused but not mouse hover,
                
//draw the focus style
                DrawContainFocusButton(pe.Graphics);
            }
 
            
else//else, draw the normal style
            {
                DrawNormalButton(pe.Graphics);
            }

            WriteText(pe.Graphics);
//write text
        }

        
private void OnMouseDown(object sender,MouseEventArgs e)
        
{
            mouseDown
=true;    //mouse is down now
        }


        
private void OnMouseUp(object sender,MouseEventArgs e)
        
{
            mouseDown
=false;    //mouse is up now

            
//call paint action
            PaintEventArgs pe = 
                
new PaintEventArgs(CreateGraphics(),ClientRectangle);

            OnPaint(pe);
        }


        
private void OnMouseEnter(object sender,EventArgs e)
        
{
            mouseHover
=true;    //mouse hover on

            
//call paint action
            PaintEventArgs pe = 
                
new PaintEventArgs(CreateGraphics(),ClientRectangle);

            OnPaint(pe);
        }


        
private void OnMouseLeave(object sender,EventArgs e)
        
{
            mouseHover
=false;    //mouse is not hover on

            
//call paint action
            PaintEventArgs pe =
                
new PaintEventArgs(CreateGraphics(),ClientRectangle);

            OnPaint(pe);
        }


        
private void DrawBorder(Graphics g,int state)
        
{
            
if (state==1)//draw normal style broder
            {
                Pen p 
= new Pen(SystemColors.ControlLightLight,2);
                g.DrawLine(p,
1,1,1,Height-2);
                g.DrawLine(p,
1,1,Width-2,1);
                g.DrawLine(p,Width
-1,2,Width-1,Height-2);
                g.DrawLine(p,
2,Height-1,Width-2,Height-1);
            }

            
else if (state==2)//draw hover style border
            {
                Pen p 
= new Pen(Color.Yellow,2);
                g.DrawLine(p,
1,1,1,Height-2);
                g.DrawLine(p,
1,1,Width-2,1);
                g.DrawLine(p,Width
-1,2,Width-1,Height-2);
                g.DrawLine(p,
2,Height-1,Width-2,Height-1);
            }

            
else if (state==3)//draw pressed style border
            {
                Pen p 
= new Pen(SystemColors.ControlDark,2);
                g.DrawLine(p,
1,1,1,Height-2);
                g.DrawLine(p,
1,1,Width-2,1);
                g.DrawLine(p,Width
-1,2,Width-1,Height-2);
                g.DrawLine(p,
2,Height-1,Width-2,Height-1);
            }

            
else if (state==4)//draw disabled style border
            {
                Pen p 
= new Pen(SystemColors.ControlLight,2);
                g.DrawLine(p,
1,1,1,Height-2);
                g.DrawLine(p,
1,1,Width-2,1);
                g.DrawLine(p,Width
-1,2,Width-1,Height-2);
                g.DrawLine(p,
2,Height-1,Width-2,Height-1);
            }

            
else if (state==5)//draw default style border
            {
                Pen p 
= new Pen(Color.SkyBlue,2);
                g.DrawLine(p,
1,1,1,Height-2);
                g.DrawLine(p,
1,1,Width-2,1);
                g.DrawLine(p,Width
-1,2,Width-1,Height-2);
                g.DrawLine(p,
2,Height-1,Width-2,Height-1);
            }

            
if (state==4)//draw disable style border
            {
                Pen p 
= new Pen(Color.FromArgb(161,161,146),1);
                g.DrawLine(p,
0,2,0,Height-3);
                g.DrawLine(p,
2,0,Width-3,0);
                g.DrawLine(p,Width
-1,2,Width-1,Height-3);
                g.DrawLine(p,
2,Height-1,Width-3,Height-1);
                g.DrawLine(p,
0,2,2,0);
                g.DrawLine(p,
0,Height-3,2,Height-1);
                g.DrawLine(p,Width
-3,0,Width-1,2);
                g.DrawLine(p,Width
-3,Height-1,Width-1,Height-3);
            }

            
else//draw normal style border
            {
                g.DrawLine(Pens.Black,
0,2,0,Height-3);
                g.DrawLine(Pens.Black,
2,0,Width-3,0);
                g.DrawLine(Pens.Black,Width
-1,2,Width-1,Height-3);
                g.DrawLine(Pens.Black,
2,Height-1,Width-3,Height-1);
                g.DrawLine(Pens.Black,
0,2,2,0);
                g.DrawLine(Pens.Black,
0,Height-3,2,Height-1);
                g.DrawLine(Pens.Black,Width
-3,0,Width-1,2);
                g.DrawLine(Pens.Black,Width
-3,Height-1,
                    Width
-1,Height-3);
            }

        }


        
private void DrawNormalButton(Graphics g)//draw normal style button
        {
            
//draw normal style border
            DrawBorder(g,1);

            
//paint background
            PaintBack(g,SystemColors.ControlLightLight);
        }


        
private void DrawMouseHoverButton(Graphics g)
        
{
            
//draw mouse hover style border
            DrawBorder(g,2);

            
//paint background
            PaintBack(g,SystemColors.ControlLightLight);
        }
        

        
private void DrawMouseDownButton(Graphics g)
        
{
            
//draw mouse down style border
            DrawBorder(g,3);

            
//paint background
            PaintBack(g,SystemColors.ControlLight);
        }


        
private void DrawDisableButton(Graphics g)
        
{
            
//draw disable style border
            DrawBorder(g,4);

            
//paint background
            PaintBack(g,SystemColors.ControlLight);
        }


        
private void DrawContainFocusButton(Graphics g)
        
{
            
//draw contain focuse style border
            DrawBorder(g,5);

            
//paint background
            PaintBack(g,SystemColors.ControlLightLight);
        }


        
//paint background area of the button
        private void PaintBack(Graphics g,Color c)
        
{
            g.FillRectangle(
new SolidBrush(c),3,3,
                Width
-6,Height-6);
        }


        
private void WriteText(Graphics g)
        
{
            
//calculate the text position
            int x=0,y=0;
            Size s 
= g.MeasureString(Text,Font).ToSize();
            x
=(Width-s.Width)/2;
            y
=(Height-s.Height)/2;

            
//draw text
            if (Enabled) //is enabled, draw black text
                g.DrawString(Text,Font,Brushes.Black,x,y);
            
else //not enabled, draw gray text
                g.DrawString(Text,Font,Brushes.Gray,x,y);
        }

    }

}



using  System;
using  System.Windows;
using  System.Drawing;
using  System.Drawing.Drawing2D;
using  System.Windows .Forms ; 

namespace   Control
{
     

        
public class XPButton:System.Windows.Forms.Button
        
{
            
private bool mouseover=false;
            
public XPButton()
            
{
                
//
                
// TODO: 在此处添加构造函数逻辑
                
//
                this.Cursor = System.Windows.Forms.Cursors.Hand;
            }

            
protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
            
{
                
// base.OnPaint (e);
                
// System.Drawing.Graphics pp=this.CreateGraphics();
                
// e.Graphics.Clear(Color.Transparent);
                
// e.Graphics.DrawEllipse(new System.Drawing.Pen(System.Drawing.Color.WhiteSmoke,5),0,0,this.Width,this.Height);
                
// System.Drawing.SolidBrush dd=new SolidBrush(System.Drawing.Color.WhiteSmoke);
                
// e.Graphics.FillEllipse(dd,0,0,this.Width,this.Height);

                
// (this.BackColor.ToString ())
                Color c5 = Color.FromArgb
                    (
255,255,255);
                Color c2 
= Color.FromArgb
                    (
192,192,192);
                
if(mouseover)
                
{
                    c5
=Color.FromArgb(245,245,245);
                    
//c2=Color.FromArgb(192,192,192);
                    c2=Color.FromArgb(180,175,190);
                }

                Brush b 
= new System.Drawing.Drawing2D.LinearGradientBrush
                    (ClientRectangle, c5, c2, LinearGradientMode.Vertical);
                
//System.Drawing.Region=new Region(
                int offsetwidth=this.Width/50;
                Point[] points
=new Point[8];
                points[
0].X=offsetwidth;
                points[
0].Y=0;

                points[
1].X=this.Width-offsetwidth;
                points[
1].Y=0;

                points[
2].X=this.Width;
                points[
2].Y=offsetwidth;

                points[
3].X=this.Width;
                points[
3].Y=this.Height-offsetwidth;

                points[
4].X=this.Width-offsetwidth;
                points[
4].Y=this.Height;

                points[
5].X=offsetwidth;
                points[
5].Y=this.Height;

                points[
6].X=0;
                points[
6].Y=this.Height-offsetwidth;

                points[
7].X=0;
                points[
7].Y=offsetwidth;
                
// e.Graphics.FillRectangle (b, ClientRectangle);
                e.Graphics.FillPolygon(b,points,FillMode.Winding);
                
if(this.Focused)
                
{
                    
int offsetwidth1=(this.Width-5)/50+2;
                    Point[] points1
=new Point[8];
                    points1[
0].X=offsetwidth1;
                    points1[
0].Y=2;

                    points1[
1].X=this.Width-offsetwidth1;
                    points1[
1].Y=2;

                    points1[
2].X=this.Width-1;
                    points1[
2].Y=offsetwidth1;

                    points1[
3].X=this.Width-1;
                    points1[
3].Y=this.Height-offsetwidth1;

                    points1[
4].X=this.Width-offsetwidth1;
                    points1[
4].Y=this.Height-1;

                    points1[
5].X=1;
                    points1[
5].Y=this.Height-1;

                    points1[
6].X=2;
                    points1[
6].Y=this.Height-offsetwidth1;

                    points1[
7].X=2;
                    points1[
7].Y=offsetwidth1;
                    
// e.Graphics.DrawPolygon(new Pen(Color.Yellow,2),points1);
                    Pen p=new Pen(Color.Orange,2);
                    Pen p1
=new Pen(Color.Wheat,2);
                    
//p.DashStyle=DashStyle.DashDot;
                    e.Graphics.DrawLine(p1,points1[0],points1[1]);
                    e.Graphics.DrawLine(p,points1[
1],points1[2]);
                    e.Graphics.DrawLine(p,points1[
2],points1[3]);
                    e.Graphics.DrawLine(p,points1[
3],points1[4]);
                    e.Graphics.DrawLine(p,points1[
4],points1[5]);
                    e.Graphics.DrawLine(p,points1[
5],points1[6]);
                    e.Graphics.DrawLine(p1,points1[
6],points1[7]);
                    e.Graphics.DrawLine(p1,points1[
7],points1[0]);
                }

                e.Graphics.DrawPolygon(
new Pen(Color.DarkBlue,2),points);
                
// e.Graphics.DrawLine(new Pen(Color.DarkBlue,2),new Point(0,0),new Point(this.Width,0));
                
// e.Graphics.DrawLine(new Pen(Color.DarkBlue,2),new Point(0,0),new Point(0,this.Height));
                
// e.Graphics.DrawLine(new Pen(Color.DarkBlue,2),new Point(this.Width,this.Height),new Point(this.Width,0));
                
// e.Graphics.DrawLine(new Pen(Color.DarkBlue,2),new Point(this.Width,this.Height),new Point(0,this.Height));
                StringFormat drawFormat = new StringFormat();
                drawFormat.FormatFlags 
= StringFormatFlags.DisplayFormatControl;
                drawFormat.LineAlignment
=StringAlignment.Center;
                drawFormat.Alignment
=System.Drawing.StringAlignment.Center;

                e.Graphics.DrawString(
this.Text,this.Font,new LinearGradientBrush(this.ClientRectangle,Color.Black,Color.Black,LinearGradientMode.Vertical),this.ClientRectangle,drawFormat);
                b.Dispose();
            }

            
protected override void OnLeave(EventArgs e)
            
{
                
base.OnLeave (e);
            }


            
// protected override void OnMouseHover(EventArgs e)
            
// {
            
//
            
// mouseover=true;
            
// this.Invalidate(false);
            
// base.OnMouseHover (e);
            
// }
            protected override void OnMouseEnter(EventArgs e)
            
{
                mouseover
=true;
                
this.Invalidate(false);
                
base.OnMouseEnter (e);
            }


            
protected override void OnNotifyMessage(System.Windows.Forms.Message m)
            
{
                
base.OnNotifyMessage (m);
            }


            
protected override void OnMouseLeave(EventArgs e)
            
{
                mouseover
=false;
                
this.Invalidate(false);
                
base.OnMouseLeave (e);
            }

            
private void DrawButton( System.Drawing.Graphics g)
            
{

            }

            
protected override void OnPaintBackground(System.Windows.Forms.PaintEventArgs pevent)
            
{

                
// Color c5 = Color.FromArgb
                
// (255,255,255);
                
// Color c2 = Color.FromArgb
                
// (192,192,192);
                
// if(mouseover)
                
// {
                
// c5=Color.FromArgb(245,245,245);
                
// //c2=Color.FromArgb(192,192,192);
                
// c2=Color.FromArgb(180,175,190);
                
// }
                
// Brush b = new System.Drawing.Drawing2D.LinearGradientBrush
                
// (ClientRectangle, c5, c2, LinearGradientMode.Vertical);

                
//pevent.Graphics .DrawRectangle(new Pen(Color.Transparent,2),this.ClientRectangle);
                pevent.Graphics .Clear(Color.Wheat );
                
//base.OnPaintBackground (pevent);
            }

        }

     
}

 
#ifndef _BTNST_H #define _BTNST_H // Uncomment the following line to enable support for sound effects #define BTNST_USE_SOUND #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 // Return values #ifndef BTNST_OK #define BTNST_OK 0 #endif #ifndef BTNST_INVALIDRESOURCE #define BTNST_INVALIDRESOURCE 1 #endif #ifndef BTNST_FAILEDMASK #define BTNST_FAILEDMASK 2 #endif #ifndef BTNST_INVALIDINDEX #define BTNST_INVALIDINDEX 3 #endif #ifndef BTNST_INVALIDALIGN #define BTNST_INVALIDALIGN 4 #endif #ifndef BTNST_BADPARAM #define BTNST_BADPARAM 5 #endif #ifndef BTNST_INVALIDPRESSEDSTYLE #define BTNST_INVALIDPRESSEDSTYLE 6 #endif // Dummy identifier for grayscale icon #ifndef BTNST_AUTO_GRAY #define BTNST_AUTO_GRAY (HICON)(0xffffffff - 1L) #endif class CXPButton : public CButton { public: CXPButton(); ~CXPButton(); enum { ST_ALIGN_HORIZ = 0, // Icon/bitmap on the left, text on the right ST_ALIGN_VERT, // Icon/bitmap on the top, text on the bottom ST_ALIGN_HORIZ_RIGHT, // Icon/bitmap on the right, text on the left ST_ALIGN_OVERLAP // Icon/bitmap on the same space as text }; enum { BTNST_COLOR_BK_IN = 0, // Background color when mouse is INside BTNST_COLOR_FG_IN, // Text color when mouse is INside BTNST_COLOR_BK_OUT, // Background color when mouse is OUTside BTNST_COLOR_FG_OUT, // Text color when mouse is OUTside BTNST_COLOR_BK_FOCUS, // Background color when the button is focused BTNST_COLOR_FG_FOCUS, // Text color when the button is focused BTNST_MAX_COLORS }; enum { BTNST_PRESSED_LEFTRIGHT = 0, // Pressed style from left to right (as usual) BTNST_PRESSED_TOPBOTTOM // Pressed style from top to bottom }; // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CXPButton) public: virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct); virtual BOOL PreTranslateMessage(MSG* pMsg); protected: virtual void PreSubclassWindow(); //}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值