浅析c#中如何在form的webbrowser控件中获得鼠标坐标

下面是详细讲解“浅析C#中如何在Form的WebBrowser控件中获得鼠标坐标”的完整攻略。

什么是WebBrowser控件

WebBrowser控件是Windows Forms中的一种控件,用于在Form窗体中嵌入一个Web浏览器。WebBrowser控件是一个包装了Internet Explorer浏览器的 ActiveX 控件,支持网页浏览、脚本执行、HTML 文档编辑等功能。

如何在WebBrowser控件中获得鼠标坐标

WebBrowser控件有两种模式:文档模式和浏览器模式。在WebBrowser控件中获得鼠标坐标需要根据不同的模式进行处理。

文档模式

文档模式下,我们可以通过事件捕获鼠标移动事件,并通过JavaScript向网页发送消息来获取鼠标坐标。具体步骤如下:

  1. 在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}");
}
  1. 在网页中添加一个JavaScript函数获取鼠标坐标信息,发送到C#后台。
<script type="text/javascript">
    function getMousePosition() {
        var positions = {
            x: event.clientX,
            y: event.clientY
        };
        window.external.GetMousePosition(JSON.stringify(positions));
    }
</script>
  1. 在后台代码中注册一个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); });" 
    });
}

浏览器模式

浏览器模式下,我们可以通过鼠标事件的原始参数获取鼠标坐标。具体步骤如下:

  1. 监听浏览器控件的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}");
}
  1. 将浏览器控件的焦点转移到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技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • c++ 如何合并两个有序链表

    合并两个有序链表是一个经典的算法问题。下面将详细讲解使用C++解决这个问题的完整攻略。 问题描述 合并两个有序链表为一个新的有序链表。 解决思路 迭代法 迭代法的思路是:比较两个链表的节点,将较小的节点加入合并后的链表,直到有一个链表为空。此时将另一个非空链表节点全部加入合并后的链表即可。 递归法 递归法的思路是:比较两个链表的头部,较小的节点加入合并后的链…

    C 2023年5月23日
    00
  • C++ 中const对象与const成员函数的实例详解

    下面是对 “C++ 中const对象与const成员函数的实例详解” 的详细讲解: 什么是 const 对象? const 对象:指一旦被初始化后就不能被修改的对象。 const 对象必须在创建时进行初始化,因为一旦创建后就不能再改变它的值。 访问一个 const 对象的地址是完全合法的。 普通的 const 对象 看以下代码示例: #include &lt…

    C 2023年5月22日
    00
  • C语言 strftime 格式化显示日期时间的实现

    C语言提供了strftime函数用于将日期时间按照指定格式转换为字符串,下面是使用步骤: 步骤一:头文件引入 #include <time.h> 步骤二:分配时间结构体 struct tm *tm; time_t timep; time(&timep); //获取秒数 tm = localtime(&timep); //转为日期时…

    C 2023年5月22日
    00
  • mysql(5.6及以下)解析json的方法实例详解

    mysql(5.6及以下)解析json的方法实例详解 背景 在以往的开发中,我们通常使用MySQL来存储数据,然而在数据中存在着大量的json类型的数据,如何快速、便捷的解析json数据就变得尤为重要。本文将介绍Mysql(5.6及以下)中解析json类型数据的方法及实例。 操作步骤 使用JSON_EXTRACT()方法解析json数据 JSON_EXTRA…

    C 2023年5月23日
    00
  • 4499元起!华为 Vision 智慧屏 3 发布

    华为 Vision 智慧屏 3 发布攻略 概述 华为 Vision 智慧屏 3 是华为公司推出的一款智能电视产品。该产品适用于家居娱乐、学习、办公等多种场景,具有高清晰度、大屏幕显示、语音控制等特点。据官方消息,华为 Vision 智慧屏 3 的价格从 4499 元起。 产品特点 华为 Vision 智慧屏 3 具有如下特点: 巨幕画质:采用 4K 高清分辨…

    C 2023年5月23日
    00
  • excel表格常用函数技巧大全 excel中最常用的30个函数分享

    “Excel表格常用函数技巧大全 Excel中最常用的30个函数分享”是一个非常实用的指南,能够帮助用户掌握Excel中最常用的函数,提高Excel表格的使用效率。以下是该攻略的详细讲解: 概述 本攻略介绍Excel中最常用的30个函数,包含函数的语法、用途及示例等方面的详细解释,旨在提高用户对Excel函数的认识,提高表格的使用效率。 函数分类 本攻略将这…

    C 2023年5月22日
    00
  • C语言实现直方图均衡化

    下面是“C语言实现直方图均衡化”的完整攻略: 1.什么是直方图均衡化? 直方图均衡化是一种针对图像处理和计算机视觉中的技术,其主要目的是提高图像对比度和亮度的可读性。它的基本思想是使像素值分布更加均匀,从而达到增强图像对比度和亮度的效果。 2.实现步骤 计算图像的直方图。 直方图是指图像中每个像素值出现的次数。首先需要将图像转换为灰度图像,然后统计每个像素值…

    C 2023年5月23日
    00
  • python 内置函数-range()+zip()+sorted()+map()+reduce()+filter()

    Python内置函数是Python语言的一个基础组成部分,它可以帮助程序员简化代码编写流程。在本文中,我们将会讲解Python内置函数中的 range()、zip()、sorted()、map()、reduce() 和 filter() 函数,以及如何使用它们。 1. range() range() 函数是Python内置的生成连续整数的函数。range(s…

    C 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部