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控件的兼容问题解决办法 引言 这几天受委托开发一个网络电视项目,要求初步先使用内嵌网页形式实现视频播放和选单,以后再考虑将网页中的所有功能整合进桌面程序. ...
随机推荐
- 采用线性回归实现训练和预测(Python)
已知测得某块地,当温度处于15至40度之间时,数得某块草地上小花朵的数量和温度值的数据如下表所示.现在要来找出这些数据中蕴含的规律,用来预测其它未测温度时的小花朵的数量. 测得数据如下图所示: imp ...
- 强化学习:塑造奖励(Shaping reward)
"塑造奖励"(Shaping reward)是一个主要用于行为心理学和强化学习领域的技术.它通过对目标行为或结果的逐步接近进行强化,逐渐通过奖励越来越接近目标的行为来"塑 ...
- macOS安装使用OpenConnect客户端替代cisco连接公司内网环境
mac_os安装openconnect服务 brew install openconnect 使用OpenConnect客户端拨通VPN,打开终端执行以下命令: sudo openconnect -u ...
- 在PyCharm中打包Python项目并将其运行到服务器上的方法
在PyCharm中打包Python项目并将其运行到服务器上的方法 在PyCharm中打包Python项目并将其运行到服务器上的过程,可以分解为几个关键步骤:创建项目.设置项目依赖.打包项目.配置服务器 ...
- 基于 Github 平台的 .NET 开源项目模板 - PR 相关
本篇将介绍开源模板的 PR 相关功能配置 赘述 project.yml 使用周期 文件来源: 运行跟目录下的 scanner.bat/sh 生成的. 文件位置: .github\project.yml ...
- Gunicorn 部署 Flask-Apscheduler 重复执行问题
目录 踩坑一:TimeZone offset does not match system offset 踩坑二:Flask-Apscheduler 多进程环境重复运行 踩坑三:集群环境下,Flask- ...
- ContosoRetailDW数据库恢复问题
https://www.microsoft.com/en-us/download/details.aspx?id=18279 下载 ContosoBIdemoBAK.exe和ContosoBIdemo ...
- CVE-2023-3609 Linux 内核 UAF 漏洞分析与漏洞利用
漏洞分析 通过分析补丁和漏洞描述可以知道漏洞是位于 u32_set_parms 函数里面,代码如下: static int u32_set_parms(struct net *net, struct ...
- openEuler欧拉配置MySQL8的MGR单主双从
一. 系统优化(三个节点全部操作) 关闭防火墙 systemctl stop firewalld systemctl disable firewalld 关闭selinux echo "S ...
- vmware ESXi快速创建新的虚拟机
准备工作:新虚拟机Win10 安装后,需要windows update,更新补丁到最新,关机.(本文案例win10-Amadeus) 在数据盘新建Win10-Users文件夹(可自定义) 复制win ...