国内大部分浏览器都支持视频弹出播放功能,但是网上却没有类似的例子。
在2012年过年的时候,闲着没事,写了一个。支持部分优酷的视频弹出播放。
提供两个核心的类,当然还是需要其他类来完成。这是一个思路,需要网站的可以找我拿源码!
这应该算是首发吧,请各位网友转载时注明来源,尊重作者版权。-by潘敬
代码:
WebElem.cs 主要负责获取视频对象的elem实例
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
namespace MyWebBrowser
{
public class WebElem
{
public WebElem(HtmlDocument document,bool scroll)
{
this.Document = document;
//取消滚动条
if(scroll)
document.GetElementsByTagName("html")[0].Style = "overflow:hidden";
}
public WebElem(HtmlDocument document)
{
this.Document = document;
document.GetElementsByTagName("html")[0].Style = "overflow:hidden";
}
private string _name;
private string _obj;
public HtmlDocument Document { set; get; }
public HtmlElement FindElement(string name,string obj)
{
_name = name;
_obj = obj;
HtmlElement _elem=null;
//需要添加异常处理
foreach (HtmlElement elem in Document.GetElementsByTagName(_name))
{
if (elem.Id == _obj)
{
_elem = elem;
int top = 0;
int left = 0;
HtmlElement _parent = null;
_parent = elem.Parent;
//循环取得父容器元素直到为空
while (_parent != null)
{
top += _parent.OffsetRectangle.Top;
left += _parent.OffsetRectangle.Left;
_parent = _parent.Parent;
}
this.Rectangle = elem.OffsetRectangle;
this.Top = top;
this.Left = left;
break;
}
}
return _elem;
}
public HtmlElement FindElement(string name)
{
_name = name;
HtmlElement _elem = null;
//需要添加异常处理
foreach (HtmlElement elem in Document.GetElementsByTagName(_name))
{
_elem = elem;
int top = 0;
int left = 0;
HtmlElement _parent = null;
_parent = elem.Parent;
//循环取得父容器元素直到为空
while (_parent != null)
{
top += _parent.OffsetRectangle.Top;
left += _parent.OffsetRectangle.Left;
_parent = _parent.Parent;
}
this.Rectangle = elem.OffsetRectangle;
Left = left;
Top = top;
MessageBox.Show(left+"");
break;
}
return _elem;
}
public Rectangle Rectangle { set; get; }
public int Top { set; get; }
public int Left { set; get; }
}
}
FrmVideo.cs 主要是用来显示视频的
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MyWebBrowser;
using System.Runtime.InteropServices;
namespace WebVideo
{
public partial class FrmVideo : Form
{
public FrmVideo()
{
InitializeComponent();
this.Resize += new EventHandler(Form4_Resize);
this.Load += new EventHandler(Form4_Load);
OnUnload += new Unload(FrmVideo_OnUnload);
SystemMenu.InitMenu(this);
}
//SystemMenu
protected override void WndProc(ref Message m)
{
if (m.Msg == SystemMenu.WM_SYSCOMMAND)
{
switch (m.WParam.ToInt32())
{
case SystemMenu.IDM_EDITFUNDS:
if (this.TopMost == true)
{
this.TopMost = false;
this.Text = ((WebBrowser)Controls[0]).DocumentTitle;
}
else
{
this.Text = ((WebBrowser)Controls[0]).DocumentTitle + " [置顶]";
this.TopMost = true;
}
break;
default:
break;
}
}
if (m.Msg == 0x0014) // 禁掉清除背景消息
return;
base.WndProc(ref m);
}
//End SystemMenu
void FrmVideo_OnUnload(object sender, FormClosingEventArgs e)
{
}
public delegate void Unload(object sender, FormClosingEventArgs e);
public event Unload OnUnload;
void Form4_Load(object sender, EventArgs e)
{
Elem.Style = string.Format(" position: absolute;left:0px;top:0px;height:{0}px;width:{1}px", this.Height - 35, this.Width - 15);
//标题设置
this.Text=((WebBrowser)Controls[0]).DocumentTitle+" [置顶]";
}
void Form4_Resize(object sender, EventArgs e)
{
Elem.Style = string.Format(" position: absolute;left:0px;top:0px;height:{0}px;width:{1}px;z-index:1000000000", this.Height - 35, this.Width - 15);
}
public HtmlElement Elem
{
get
{
WebElem elem = new WebElem(this.Document);
return elem.FindElement("DIV", "player");
}
}
public HtmlDocument Document { set; get; }
private void Form4_FormClosing(object sender, FormClosingEventArgs e)
{
//f2.Controls.Add(this.Controls[0]);
Elem.Style = "";
Document.GetElementsByTagName("html")[0].Style="";
OnUnload(this,e);
}
private void FrmVideo_Load(object sender, EventArgs e)
{
this.ShowIcon = false;
}
}
}
转载请注明来源。