zoukankan      html  css  js  c++  java
  • Wince下实现ImageButton

    我们在winform中给按钮设置个背景图片超级简单,是不?可是在wince下面就没那么简单了,下面我来介绍一种方式来实现ImageButton。

    实现思路是重新写一个usercontrol就ok。具体的实现方式如下:

    /IotButton是我们新控件的名字,具体的可以自己定义 
    public partial class IotButton : UserControl 
        {
            public IotButton()
            {
                InitializeComponent();
            }
     
            Image backgroundImage;
            bool pressed = false;
     
            // Property for the background image to be drawn behind the button text.  
            public Image BackgroundImage
            {
                get
                {
                    return this.backgroundImage;
                }
                set
                {
                    this.backgroundImage = value;
                }
            }
            // When the mouse button is pressed, set the "pressed" flag to true   
            // and invalidate the form to cause a repaint.  The .NET Compact Framework   
            // sets the mouse capture automatically.  
            protected override void OnMouseDown(MouseEventArgs e)
            {
                this.pressed = true;
                this.Invalidate();
                base.OnMouseDown(e);
            }
     
            // When the mouse is released, reset the "pressed" flag   
            // and invalidate to redraw the button in the unpressed state.  
            protected override void OnMouseUp(MouseEventArgs e)
            {
                this.pressed = false;
                this.Invalidate();
                base.OnMouseUp(e);
            }
     
            // Override the OnPaint method to draw the background image and the text.  
            protected override void OnPaint(PaintEventArgs e)
            {
                e.Graphics.FillRectangle(new SolidBrush(SystemColors.ActiveCaption), e.ClipRectangle);
     
                if (this.backgroundImage != null)
                {
                    ImageAttributes attr = new ImageAttributes();
                    attr.SetColorKey(Color.Magenta, Color.Magenta);
     
                    if (this.pressed)
                        e.Graphics.DrawImage(this.backgroundImage, this.ClientRectangle, 0, 0, this.backgroundImage.Width, this.backgroundImage.Height, GraphicsUnit.Pixel, attr);
                    else
                        e.Graphics.DrawImage(this.backgroundImage, this.ClientRectangle, 0, 0, this.backgroundImage.Width, this.backgroundImage.Height, GraphicsUnit.Pixel, attr);
     
                }
     
                base.OnPaint(e);
            }
        }
    

     这里为什么要实现一个新的UserControl而不是基于Button呢?具体原因是这样的,因为Button中没有Paint事件,没有MouseUP MouseDown MouseMove等事件因此不能很好的实现,有图有证据哦?

    看看我们自定义的按钮的事件和属性吧:

    总结

    上面的方式实现了在wince下自定义一个可以放image的控件,具体的不同我们可以对比上面的两图得到。希望对大家有帮助哦。

  • 相关阅读:
    27 Spring Cloud Feign整合Hystrix实现容错处理
    26 Spring Cloud使用Hystrix实现容错处理
    25 Spring Cloud Hystrix缓存与合并请求
    24 Spring Cloud Hystrix资源隔离策略(线程、信号量)
    23 Spring Cloud Hystrix(熔断器)介绍及使用
    22 Spring Cloud Feign的自定义配置及使用
    21 Spring Cloud使用Feign调用服务接口
    20 Spring Cloud Ribbon配置详解
    19 Spring Cloud Ribbon自定义负载均衡策略
    18 Spring Cloud Ribbon负载均衡策略介绍
  • 原文地址:https://www.cnblogs.com/vsdot/p/3268362.html
Copyright © 2011-2022 走看看