下面是详细讲解“浅析C#中如何在Form的WebBrowser控件中获得鼠标坐标”的完整攻略。
什么是WebBrowser控件
WebBrowser控件是Windows Forms中的一种控件,用于在Form窗体中嵌入一个Web浏览器。WebBrowser控件是一个包装了Internet Explorer浏览器的 ActiveX 控件,支持网页浏览、脚本执行、HTML 文档编辑等功能。
如何在WebBrowser控件中获得鼠标坐标
WebBrowser控件有两种模式:文档模式和浏览器模式。在WebBrowser控件中获得鼠标坐标需要根据不同的模式进行处理。
文档模式
文档模式下,我们可以通过事件捕获鼠标移动事件,并通过JavaScript向网页发送消息来获取鼠标坐标。具体步骤如下:
- 在Form窗体中添加一个WebBrowser控件,并注册DocumentCompleted事件。
private void Form1_Load(object sender, EventArgs e)
{
webBrowser1.DocumentCompleted += WebBrowser1_DocumentCompleted;
webBrowser1.Navigate("http://www.baidu.com");
}
private void WebBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
webBrowser1.Document.MouseDown += Document_MouseDown;
}
private void Document_MouseDown(object sender, HtmlElementEventArgs e)
{
// 获取鼠标坐标
int x = e.MousePosition.X;
int y = e.MousePosition.Y;
MessageBox.Show($"鼠标坐标:{x},{y}");
}
- 在网页中添加一个JavaScript函数获取鼠标坐标信息,发送到C#后台。
<script type="text/javascript">
function getMousePosition() {
var positions = {
x: event.clientX,
y: event.clientY
};
window.external.GetMousePosition(JSON.stringify(positions));
}
</script>
- 在后台代码中注册一个COM接口,并使用InvokeScript方法调用JavaScript发送鼠标坐标信息。
[ComVisible(true)]
public class ScriptManager
{
public void GetMousePosition(string positionJson)
{
dynamic position = JObject.Parse(positionJson);
int x = position.x;
int y = position.y;
MessageBox.Show($"鼠标坐标:{x},{y}");
}
}
private void WebBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
var scriptManager = new ScriptManager();
webBrowser1.ObjectForScripting = scriptManager;
webBrowser1.Document.InvokeScript("eval", new object[] {
"document.addEventListener('mousemove', function (event) { getMousePosition(event); });"
});
}
浏览器模式
浏览器模式下,我们可以通过鼠标事件的原始参数获取鼠标坐标。具体步骤如下:
- 监听浏览器控件的MouseMove事件。
private void Form1_Load(object sender, EventArgs e)
{
webBrowser1.AllowWebBrowserDrop = false;
webBrowser1.IsWebBrowserContextMenuEnabled = false;
webBrowser1.DocumentCompleted += WebBrowser1_DocumentCompleted;
webBrowser1.ScrollBarsEnabled = false;
webBrowser1.Navigate("http://www.baidu.com");
}
private void WebBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
// 监听MouseMove事件
webBrowser1.Document.MouseMove += Document_MouseMove;
}
private void Document_MouseMove(object sender, HtmlElementEventArgs e)
{
// 获取鼠标坐标
int x = e.MousePosition.X;
int y = e.MousePosition.Y;
MessageBox.Show($"鼠标坐标:{x},{y}");
}
- 将浏览器控件的焦点转移到HTML文档。
private void Form1_Load(object sender, EventArgs e)
{
// 打开一个网页
webBrowser1.AllowWebBrowserDrop = false;
webBrowser1.IsWebBrowserContextMenuEnabled = false;
webBrowser1.DocumentCompleted += WebBrowser1_DocumentCompleted;
webBrowser1.ScrollBarsEnabled = false;
webBrowser1.Navigate("http://www.baidu.com");
// 将控件的焦点移到HTML文档,以获取鼠标坐标
webBrowser1.Document.Body.MouseDown += Document_MouseDown;
}
private void Document_MouseDown(object sender, HtmlElementEventArgs e)
{
webBrowser1.Document.Focus();
}
示例说明
示例1:在文档模式下获取鼠标坐标
启动一个Form窗体,添加一个WebBrowser控件。在控件的DocumentCompleted事件中注册MouseDown事件,并在事件中调用JavaScript函数获取鼠标坐标,将坐标信息通过C#后台处理。
private void Form1_Load(object sender, EventArgs e)
{
webBrowser1.DocumentCompleted += WebBrowser1_DocumentCompleted;
webBrowser1.Navigate("http://www.baidu.com");
}
private void WebBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
var scriptManager = new ScriptManager();
webBrowser1.ObjectForScripting = scriptManager;
webBrowser1.Document.InvokeScript("eval", new object[] {
"document.addEventListener('mousemove', function (event) { getMousePosition(event); });"
});
}
[ComVisible(true)]
public class ScriptManager
{
public void GetMousePosition(string positionJson)
{
dynamic position = JObject.Parse(positionJson);
int x = position.x;
int y = position.y;
MessageBox.Show($"鼠标坐标:{x},{y}");
}
}
示例2:在浏览器模式下获取鼠标坐标
启动一个Form窗体,添加一个WebBrowser控件。在控件的DocumentCompleted事件中注册MouseMove事件,并在事件中获取鼠标坐标信息。
private void Form1_Load(object sender, EventArgs e)
{
webBrowser1.AllowWebBrowserDrop = false;
webBrowser1.IsWebBrowserContextMenuEnabled = false;
webBrowser1.DocumentCompleted += WebBrowser1_DocumentCompleted;
webBrowser1.ScrollBarsEnabled = false;
webBrowser1.Navigate("http://www.baidu.com");
}
private void WebBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
webBrowser1.Document.MouseMove += Document_MouseMove;
}
private void Document_MouseMove(object sender, HtmlElementEventArgs e)
{
int x = e.MousePosition.X;
int y = e.MousePosition.Y;
MessageBox.Show($"鼠标坐标:{x},{y}");
webBrowser1.Document.Focus();
}
总结
WebBrowser控件可以轻松嵌入一个Web浏览器到Windows Forms应用中,可以通过不同的模式获取鼠标坐标信息。在文档模式下需要使用JavaScript发送消息,而在浏览器模式下需要获取鼠标坐标事件参数。此外,在浏览器模式下需要将控件焦点移到HTML文档才能获取鼠标坐标信息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅析c#中如何在form的webbrowser控件中获得鼠标坐标 - Python技术站