读书人

C#中picturebox控件解决思路

发布时间: 2013-04-22 16:01:35 作者: rapoo

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

读书人网 >C#

热点推荐