WPF中webview2鼠标移动窗体
WPF里webview2会一直处于其他控件最上层,是个历史遗留问题。
为了能在webview2里鼠标移动让窗体跟着移动位置代码如下:
async Task InitializeAsync()
{
AppLog.AddLog("InitializeAsync...........");
try
{
CoreWebView2EnvironmentOptions opts = new CoreWebView2EnvironmentOptions() { AdditionalBrowserArguments = "--autoplay-policy=user-gesture-required" };
var env = await CoreWebView2Environment.CreateAsync(userDataFolder: System.IO.Path.Combine(System.IO.Path.GetTempPath(), "wgscd_Browser"), options: opts);
await webView.EnsureCoreWebView2Async(env); // webView.CoreWebView2.AddWebResourceRequestedFilter(null, CoreWebView2WebResourceContext.Websocket); // webView.CoreWebView2.WebResourceRequested += CoreWebView2_WebResourceRequested;
//https://weblog.west-wind.com/posts/2021/Jan/14/Taking-the-new-Chromium-WebView2-Control-for-a-Spin-in-NET-Part-1 // webView.CoreWebView2.NavigationCompleted += CoreWebView2_NavigationCompleted;
// webView.ContextMenuOpening += WebView_ContextMenuOpening;
webView.CoreWebView2.Settings.AreHostObjectsAllowed = true;
webView.CoreWebView2.Settings.IsWebMessageEnabled = true;
webView.CoreWebView2.WebMessageReceived += CoreWebView2_WebMessageReceived; webView.DefaultBackgroundColor = System.Drawing.Color.FromArgb(0, 0, 0, 0);
//webView.Source = new System.Uri("E:\\mm\\2.html"); AppLog.AddLog("InitializeAsync...compete.");
} catch (Exception ex)
{
MessageBox.Show("init webview err:\r\n" + ex.Message); } } private void CoreWebView2_WebMessageReceived(object sender, CoreWebView2WebMessageReceivedEventArgs e)
{
var message = e.TryGetWebMessageAsString();
try
{
if (message.StartsWith("DragMove:"))
{
// 解析消息以获取需要移动的距离或其他信息
// 这里只是一个示例,你可能需要解析更复杂的消息格式
var xy = message.Substring("DragMove:".Length).Split(',');
var x = int.Parse(xy[0]);
var y = int.Parse(xy[1]);
Debug.Print("" + x+","+y);
Title = "" + "" + x + "," + y;
Left = Left + x;
Top = Top + y; }
}
catch { } /*
page js:
<script>
let startX, startY, distanceX, distanceY;
document.addEventListener('mousedown', function(e) {
startX = e.pageX;
startY = e.pageY;
document.addEventListener('mousemove', mouseMoveHandler);
document.addEventListener('mouseup', mouseUpHandler);
}); function mouseMoveHandler(e) {
distanceX = e.pageX - startX;
distanceY = e.pageY - startY;
window.chrome.webview.postMessage("DragMove:"+distanceX+","+distanceY);
console.log(`Dragged ${distanceX} horizontally and ${distanceY} vertically.`);
} function mouseUpHandler(e) {
document.removeEventListener('mousemove', mouseMoveHandler);
document.removeEventListener('mouseup', mouseUpHandler);
}
</script> */ }
WPF中webview2鼠标移动窗体的更多相关文章
- WPF中制作无边框窗体
原文:WPF中制作无边框窗体 众所周知,在WinForm中,如果要制作一个无边框窗体,可以将窗体的FormBorderStyle属性设置为None来完成.如果要制作成异形窗体,则需要使用图片或者使用G ...
- WPF中获取鼠标相对于屏幕的位置
原文:WPF中获取鼠标相对于屏幕的位置 WPF中获取鼠标相对于屏幕的位置 周银辉WPF编程时,我们经常使用Mouse.GetPosi ...
- 01.WPF中制作无边框窗体
[引用:]http://blog.csdn.net/johnsuna/article/details/1893319 众所周知,在WinForm中,如果要制作一个无边框窗体,可以将窗体的FormB ...
- VB6/VBA中跟踪鼠标移出窗体控件事件(类模块成员函数指针CHooker类应用)
一.关于起因 前几天发了一篇博文,是关于获取VB类模块成员函数指针的内容(http://www.cnblogs.com/alexywt/p/5880993.html):今天我就发一下我的应用实例. V ...
- WPF中自定义标题栏时窗体最大化处理之WindowChrome
注意: 本文方法基础是WindowChrome,而WindowChrome在.NET Framework 4.5之后才集成发布的.见:WindowChrome Class 在.NET Framewor ...
- WPF中当鼠标移到按钮上时,按钮的背景图片消失的问题
如果给按钮设置了背景图片,当鼠标移到按钮上的时候,按钮就好变成一个浅蓝色的按钮,背景图片就消失了,对于这个问题有很多解决方法,我只分享一下我的解决方法. 我第一次用的方式是在按钮中添加一个图片,不用背 ...
- WPF中获取鼠标相对于桌面位置
var transform = PresentationSource.FromVisual(this).CompositionTarget.TransformFromDevice; var mouse ...
- WPF中获取Hwnd与窗体,Uid获取控件
void MapControl_Loaded(object sender, RoutedEventArgs e) { this.OnApplyTemplate(); CurrentMapChanged ...
- WPF中不规则窗体与WindowsFormsHost控件的兼容问题完美解决方案
首先先得瑟一下,有关WPF中不规则窗体与WindowsFormsHost控件不兼容的问题,网上给出的解决方案不能满足所有的情况,是有特定条件的,比如 WPF中不规则窗体与WebBrowser控件的兼 ...
- WPF中不规则窗体与WebBrowser控件的兼容问题解决办法
原文:WPF中不规则窗体与WebBrowser控件的兼容问题解决办法 引言 这几天受委托开发一个网络电视项目,要求初步先使用内嵌网页形式实现视频播放和选单,以后再考虑将网页中的所有功能整合进桌面程序. ...
随机推荐
- C++之OpenCV入门到提高002:加载、修改、保存图像
一.介绍 今天是这个系列<C++之 Opencv 入门到提高>得第二篇文章.今天这个篇文章很简单,只是简单介绍如何使用 Opencv 加载图像.显示图像.修改图像和保存图像,先给大家一个最 ...
- 初识GO语言--并发
- C# 单例模式的多种实现
单例模式介绍 单例模式是一种创建型设计模式,它主要确保在一个类只有一个实例,并提供一个全局访问点来获取该实例.在C#中,有多种方式实现单例模式,每种方式都有其特定的使用场景和注意事项. 设计模式的作用 ...
- 新一代AI换脸更自然,DeepLiveCam下载介绍(可直播)
DeepLiveCam是一款基于人工智能的图片替换工具,专注于提供实时人脸交换和一键视频深度伪造(deepfake)技术,能通过使用单张图片,在视频或直播中实现高精度的人脸替换 DeepLiveCam ...
- js中的数组去重的多种方法
1. indexOf()方法 const arr = [1,2,3,4,5,1,2,3,4,6,1,1,6,6,7,5,8] const newArr = [] arr.forEach(item =& ...
- MySQL 8.0 OCP 最新中文考试题库(如需完整版请联系作者)
大家好!今天要给大家带来的是由Oracle公司研发的MySQL 8.0认证考试试题本次试题是全网最全面的试题,总共包含123道.试题正确率在95%以上.对于在今年报考MySQL8.0 中文版本的考生有 ...
- 基于docker的常用服务搭建
使用docker搭建相关服务: 1. MySQL服务 1) 拉取镜像 docker pull mysql:5.7 # 拉取 mysql 5.7 docker pull mysql # 拉取最新版mys ...
- Blazor 组件库 BootstrapBlazor 中Modal组件介绍
组件说明 Model组件是一个模态框组件,可以弹出一个对话框,适合需要定制性更大的场景. 它的样子如下: 其html代码为: <div class="modal-content&quo ...
- 开源 - Ideal库 - Excel帮助类,TableHelper实现(三)
书接上回,我们今天继续讲解实现对象集合与DataTable的相互转换. 01.把表格转换为对象集合 该方法是将表格的列名称作为类的属性名,将表格的行数据转为类的对象.从而实现表格转换为对象集合.同时我 ...
- Vue 二维码组件
1.前言 该组件依赖qrcode.js与element-ui 支持二维码大小配置,点击大图预览 该组件以vue文件形式进行封装,需要配置httpVueLoader插件进行引入,其他格式请自行更改源码 ...