C# 实现优酷视频弹出小窗口播放

国内大部分浏览器都支持视频弹出播放功能,但是网上却没有类似的例子。

在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;
        }
    }
}

转载请注明来源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值