我使用Graphics自己绘制了一个窗体。
最小化、最大化、关闭按钮全部是用Rectangle定义区域填充图片显示的。。
现在想实现鼠标移到关闭按钮上的时候改变图片。
需要怎么实现??
谢谢解答。!

解决方案 »

  1.   

    你先定义一个 Rectangle  例如 Rectangle _CloseRectangle =new Rectangle(100,100,10,10);Graphics.DrawImage(关闭图片,_CloseRectangle);
    在Mouse里使用if(_Rectangle.Contains(e.x,e.y))
    {
      //关闭..
    }
      

  2.   

    在MouseMove事件里判断鼠标的位置是否在矩形内就好了。
      

  3.   

    我以前都做B/S开发。最近才开始研究做C/S。能给出详细点的代码么?
    非常感谢。
    public void DrawClose(Graphics g)
            {
                Rectangle closeRecangle = new Rectangle(tt3.Left - this.closeImage.Width - systemMenuSplitWidth, tt3.Y + systemMenuTop, this.closeImage.Width, this.closeImage.Height);
                using (TextureBrush sb = new TextureBrush(this.closeImage))
                {
                    sb.TranslateTransform(tt3.Left - this.closeImage.Width - systemMenuSplitWidth, tt3.Y + systemMenuTop);
                    g.FillRectangle(sb, closeRecangle);
                }
            }这是我绘制的关闭图片。
    mouseenter事件要写在哪里呢?
    或者用MouseMove时间写要怎么写啊?
      

  4.   

    private Rectangle closeRecangle;
    public void DrawClose(Graphics g) 
            { 
                closeRecangle = new Rectangle(tt3.Left - this.closeImage.Width - systemMenuSplitWidth, tt3.Y + systemMenuTop, this.closeImage.Width, this.closeImage.Height); 
                using (TextureBrush sb = new TextureBrush(this.closeImage)) 
                { 
                    sb.TranslateTransform(tt3.Left - this.closeImage.Width - systemMenuSplitWidth, tt3.Y + systemMenuTop); 
                    g.FillRectangle(sb, closeRecangle); 
                } 
            }  private Rectangle closeRecangle;        private void Form1_MouseUp(object sender, MouseEventArgs e)
            {
                if (closeRecangle.Contains(e.X, e.Y))
                {
                    Application.Exit();
                }
            }这样看看.
      

  5.   

    4楼。我的意思是鼠标移到那个图片上的时候不是关闭,是换一张图片。。
    就像QQ那样子的。
    移到关闭的图片上就变成红色图片。
    我做的界面就和QQ差不多的。
      

  6.   

           private void Form1_MouseMove(object sender, MouseEventArgs e) 
            { 
                if (closeRecangle.Contains(e.X, e.Y)) 
                { 
                    // Use Graph 1 
                } 
                else
                {
                   // use graph 2
                }
            } 
      

  7.   

    注意这个里是MouseMove事件...不是 MouseUp了
    private void Form1_MouseMove(object sender, MouseEventArgs e) 

    Graphics _Graphis = Graphics.FromHwnd(this.Handle);if (closeRecangle.Contains(e.X, e.Y)) 

        _Graphics.DrawImage(???,closeRecangle);

    else
    {
       _Graphics.DrawImage(this.closeImage,closeRecangle);
    }

      

  8.   

    namespace CSharpForm
    {
        public partial class CloseButton : UserControl
        {
            public CloseButton()
            {
                InitializeComponent();
            }        private bool _mouseHover = false;        private void CloseButton_Paint(object sender, PaintEventArgs e)
            {
                if (_mouseHover)
                    // Draw graph 1
                else
                    // Draw graph 2
                    
            }        private void CloseButton_MouseLeave(object sender, EventArgs e)
            {
                _mouseHover = false;
                this.Refresh();        }        private void CloseButton_MouseEnter(object sender, EventArgs e)
            {
                _mouseHover = true;
                this.Refresh();
                
            }
        }
    }