zoukankan      html  css  js  c++  java
  • C#自定义控件背景色透明的方法

    I struggled for ages with the problem of having controls show through a control that was painted on top of them.  It seems that ControlStyles.SupportsTransparentBackColor just allowed the control to pick up the container's background colour/image and wouldn't prevent the control from hiding any controls that were underneath it. I eventually found an answer so I thought I would post it here.  This code example of a Pointer class, will take an alpha-blended png in the constructor and allow all the controls behind it to show through the transparent or semi-transparent pixels in the png, even when the pointer's location is changed ...

    public class Pointer : Control
    {
        public Pointer(Image image)
            : base()
        {
            Image = image;
            SetStyle(ControlStyles.SupportsTransparentBackColor
              | ControlStyles.UserPaint
              | ControlStyles.AllPaintingInWmPaint
              | ControlStyles.Opaque, true);
            BackColor = Color.Transparent;
        }
    
        protected override void OnLocationChanged(EventArgs e)
        {
            // pick up the container's surface again. 
            Visible = false;
            Visible = true;
        }
    
        protected override CreateParams CreateParams
        {
            get
            {
                CreateParams cp = base.CreateParams;
                cp.ExStyle |= 0x00000020; //WS_EX_TRANSPARENT 
                return cp;
            }
        }
    
        private Image image;
        public Image Image
        {
            get
            {
                return image;
            }
            set
            {
                image = value;
                Size = image.Size;
            }
        }
    
        protected override void OnPaint(PaintEventArgs pe)
        {
            base.OnPaint(pe);
            pe.Graphics.DrawImage(image, 0, 0);
        }
    
    } 
  • 相关阅读:
    更改数据库的主键长度
    数据库字段更改
    mysql数据权限的分配
    CentOS 7下安装Python3.6
    轻量级ORM框架:Dapper中的一些复杂操作和inner join应该注意的坑
    LINQ教程
    C# 委托及各种写法
    Func与Action
    C#中的is和as操作符
    Dapper ORM 用法
  • 原文地址:https://www.cnblogs.com/luozhai714/p/3686078.html
Copyright © 2011-2022 走看看