我想在c#WinForm Webbrowser控件中显示youtube视频,但是我想禁用所有用户交互(没有鼠标单击也没有键盘事件...)。
我正在捕获所有控件预览,鼠标和键盘事件,此外,我在加载的html文档中放置了一些处理程序,但未成功:
void webBrowser1_DocumentCompleted( object sender, WebBrowserDocumentCompletedEventArgs e )
{
if(webBrowser1.Document != null) {
var doc = webBrowser1.Document;
doc.Body.Style = "overflow:hidden";
doc.Click += htmlDoc_Click;
doc.MouseDown += htmlDoc_MouseDown;
doc.MouseMove += htmlDoc_MouseMove;
webBrowser1.Document.Body.Click += new HtmlElementEventHandler(htmlDoc_Click);
webBrowser1.Document.Body.MouseDown += new HtmlElementEventHandler(Document_MouseDown);
webBrowser1.Document.Body.MouseUp += new HtmlElementEventHandler(Document_MouseMove);
webBrowser1.Document.Body.MouseUp += new HtmlElementEventHandler(Document_MouseUp);
HtmlElement head = doc.GetElementsByTagName("head")[0];
HtmlElement mscript = doc.CreateElement("script");
IHTMLScriptElement element = (IHTMLScriptElement)mscript.DomElement;
element.text = "function handleMouseEvent(e) { "
+ "var evt = (e==null ? event:e); "
+ "return true; } "
+ "document.onmousedown = handleMouseEvent; "
+ "document.onmouseup = handleMouseEvent; "
+ "document.onclick = handleMouseEvent; ";
head.AppendChild(mscript);
}
}
我也可以在Web浏览器控件“前面”使用透明控件。
还有其他想法吗?
答案 0 :(得分:2)
这是从标准WinForms面板派生的自定义控件,已修改为完全透明但“稳定”(接收Mouse事件)。
通过CreateParams添加ExStyle = WS_EX_TRANSPARENT
来实现透明;
此外,使用Control.SetStyle()方法来修改控件行为,并添加以下ControlStyles:
ControlStyles.Opaque
阻止绘制控件BackGround
,因此它不受系统管理。
ControlStyles.SupportsTransparentBackColor
允许控件接受Alpha值作为背景色。
ControlStyles.ResizeRedraw
会在调整控件大小时重新绘制控件。
初始化自定义控件,将其必须引用的控件传递给覆盖。然后,它将自身调整为此引用控件的大小,从此度量中排除ScrollBar,以便可以使用它们。
OverlayPanel
类的引用并调用辅助方法CreateOverlay(Control control)
:
private OverlayPanel overlayPanel;
private void CreateOverlay(Control control)
{
overlayPanel = new OverlayPanel(this.webBrowser1);
Controls.Add(overlayPanel);
overlayPanel.BringToFront();
}
OverlayPanel
类代码可以插入到Form或它自己的类文件中。
当Form中的所有控件都已设置其尺寸时,应创建该代码: 1}}事件或可见父窗体的任何其他时间。无论如何,Form.Shown()
事件在大多数情况下也可能有效。
请注意,此Form.Load()
目前没有OverlayPanel
方法,如果在某个时候调整了覆盖控件的大小,则需要此方法。但这是一个非常简单的实现,如果需要的话。
Resize