首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#中picturebox控件解决思路

2013-04-22 
C#中picturebox控件C#中picturebox控件怎样在播放视频的同时在上面画图啊,播放视频的时候总是会挡住在pict

C#中picturebox控件
C#中picturebox控件怎样在播放视频的同时在上面画图啊,播放视频的时候总是会挡住在picturebox上画的线,但是我又需要在播放视频的同时画线,而且不要被视频挡住,就像是画图是在视频上画的
[解决办法]
picturebox播放视频?播放过程中画线?
可以考虑在一个picturebox上覆盖一个透明容器,在透明容器上画线,下面的picturebox播放视频,这样就互不影响了

给你一个透明容器的代码,你参考修改一下

using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;

namespace COMMON
{
    public partial class TransparentInfo : System.Windows.Forms.UserControl
    {
        private string m_strInfo;
        public void ShowInfo(string strInfo) //透明容器上显示文字
        {
            m_strInfo = strInfo;
            this.Invalidate();
        }

        private void TransparentInfo_MouseEnter(object sender, EventArgs e)
        {
            this.Visible = true;
        }

        public bool drag = false;
        public bool enab = false;
        private Color fillColor = Color.White;
        private int opacity = 75; //默认透明度
        private int alpha;

        public TransparentInfo()
        {
            SetStyle(ControlStyles.SupportsTransparentBackColor, true);
            SetStyle(ControlStyles.Opaque, true);
            this.BackColor = Color.Transparent;
        }

        public Color FillColor
        {
            get
            {
                return this.fillColor;
            }
            set
            {
                this.fillColor = value;
                if (this.Parent != null) Parent.Invalidate(this.Bounds, true);
            }
        }

        public int Opacity


        {
            get
            {
                if (opacity > 100) { opacity = 100; }
                else if (opacity < 1) { opacity = 1; }
                return this.opacity;
            }
            set
            {
                this.opacity = value;
                if (this.Parent != null) Parent.Invalidate(this.Bounds, true);
            }
        }

        //protected override CreateParams CreateParams
        //{
        //    get
        //    {
        //        CreateParams cp = base.CreateParams;
        //        cp.ExStyle 
[解决办法]
= 0x20;
        //        return cp;
        //    }
        //}

        protected override void OnPaint(PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            Rectangle bounds = new Rectangle(0, 0, this.Width - 1, this.Height - 1);

            Color frmColor = this.Parent.BackColor;
            Brush brushColor;
            Brush bckColor;

            alpha = (opacity * 255) / 100;

            if (drag)
            {
                Color dragFillColor;
                Color dragBckColor;

                if (BackColor != Color.Transparent)
                {


                    int Rb = BackColor.R * alpha / 255 + frmColor.R * (255 - alpha) / 255;
                    int Gb = BackColor.G * alpha / 255 + frmColor.G * (255 - alpha) / 255;
                    int Bb = BackColor.B * alpha / 255 + frmColor.B * (255 - alpha) / 255;
                    dragBckColor = Color.FromArgb(Rb, Gb, Bb);
                }
                else dragBckColor = frmColor;

                if (fillColor != Color.Transparent)
                {
                    int Rf = fillColor.R * alpha / 255 + frmColor.R * (255 - alpha) / 255;
                    int Gf = fillColor.G * alpha / 255 + frmColor.G * (255 - alpha) / 255;
                    int Bf = fillColor.B * alpha / 255 + frmColor.B * (255 - alpha) / 255;
                    dragFillColor = Color.FromArgb(Rf, Gf, Bf);
                }
                else dragFillColor = dragBckColor;

                alpha = 255;
                brushColor = new SolidBrush(Color.FromArgb(alpha, dragFillColor));
                bckColor = new SolidBrush(Color.FromArgb(alpha, dragBckColor));
            }
            else
            {
                Color color = fillColor;
                brushColor = new SolidBrush(Color.FromArgb(alpha, color));
                bckColor = new SolidBrush(Color.FromArgb(alpha, this.BackColor));
            }



            if (this.BackColor != Color.Transparent 
[解决办法]
 drag)
            {
                g.FillRectangle(bckColor, bounds);
            }

            if(m_strInfo!=null && m_strInfo.Length>0)
            {
                g.DrawString(m_strInfo, this.Font, new SolidBrush(this.ForeColor), 10, 10);
            }

            brushColor.Dispose();
            bckColor.Dispose();
            g.Dispose();

            base.OnPaint(e);
        }

        protected override void OnBackColorChanged(EventArgs e)
        {
            if (this.Parent != null) Parent.Invalidate(this.Bounds, true);
            base.OnBackColorChanged(e);
        }

        protected override void OnParentBackColorChanged(EventArgs e)
        {
            this.Invalidate();
            base.OnParentBackColorChanged(e);
        }
    }


}


[解决办法]
这个或许能帮到你!C#中picturebox控件解决思路
文章:《DotNet实现PictureBox重叠透明效果》
URL: http://www.cnblogs.com/hanyonglu/archive/2012/04/04/2431625.html

热点排行