Winforms透明面板控件-悬停,单击并重画问题

我在这里和其他网站上关注了许多帖子,为WinForms创建具有“真实”透明度(即,它不仅继承了其所在容器的背景色)的透明面板控件。

这是我派生的面板类,因此您可以了解我的做法:

namespace TransparencyPOC
{
    public partial class TransPictureBox : Panel
    {
        public TransPictureBox()
        {
            InitializeComponent();
        }

        public TransPictureBox(IContainer container)
        {
            container.Add(this);
            InitializeComponent();
        }

        protected override void OnPaintBackground(PaintEventArgs e)
        {
            //do nothing
        }

        protected override void Onmove(EventArgs e)
        {
            RecreateHandle();
        }

        protected override CreateParams CreateParams
        {
            get
            {
                CreateParams cp = base.CreateParams;
                cp.ExStyle |= 0x20; //WS_EX_TRANSPARENT
                return cp;
            }
        }

        private Image m_Image;
        public Image Image
        {
            get
            {
                return m_Image;
            }

            set
            {
                m_Image = value;
            }
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            Graphics g = e.Graphics;

            Bitmap bmp = new Bitmap(m_Image);
            bmp.MakeTransparent();

            g.DrawImage(bmp,100,100);
            g.Dispose();
        }

    }
}

我正在使用此面板控件来保存具有透明背景的PNG,并且需要将其定位在其他控件上方,例如其他透明面板,按钮等。

两个问题:

  • 如果将此面板部分地放置在按钮控件上,则只能在面板不与控件重叠的区域中单击按钮。有什么方法可以使悬停和单击事件通过透明面板,以便当我在按钮上悬停或单击任何位置时,即使按钮的某些部分被PNG遮盖,按钮也会收到这些单击?假定这是动态的,即我不知道该图像位于上方的控制位置,只是希望它能够通过悬停并单击进入其下方的任何内容。
  • 当我将鼠标悬停在面板未覆盖的部分按钮上时,按钮会在透明面板上方重新绘制自身的颜色(之前和之后请参见下图)

悬停之前:

Winforms透明面板控件-悬停,单击并重画问题

悬停后:

Winforms透明面板控件-悬停,单击并重画问题

问题:

  • 我可以允许按钮在透明面板中徘徊/单击吗?理想情况下,我希望基础按钮的任何可见部分都是可悬停/可点击的,但是,如果那不是可行的,那么我希望它是可单击/悬停的,就像上面没有任何东西一样。
  • 当我将按钮悬停在面板上时,是否可以防止它在面板上重绘?和/或在发生这种情况时触发面板的重新粉刷?

提前谢谢!

wanziang0723 回答:Winforms透明面板控件-悬停,单击并重画问题

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2850306.html

大家都在问