首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

WPF 同一窗口内的多线程多进程 UI(使用 SetParent 嵌入另一个窗口

WPF 同一窗口内的多线程/多进程 UI(使用 SetParent 嵌入另一个窗口) 发布于 2018-07-11 13:35...更新于 2018-07-12 11:44 WPF 的 UI 逻辑只在同一线程,这是学习 WPF 开发中大家几乎都会学习到的经验。...如果希望做不同线程的 UI,大家也会想到使用另一个窗口来实现,让每个窗口拥有自己的 UI 线程。然而,就不能让同一窗口内部使用多个 UI 线程吗?...---- WPF 同一窗口中跨线程访问 UI 有多种方法: 使用 VisualTarget (本文) 使用 SetParent 嵌入另一个窗口 前者使用的是 WPF 原生方式,做出来的跨线程 UI 可以和原来的...这是 WPF 窗口刚刚获得 Windows 窗口句柄的时机,在此事件,我们可以最早地拿到窗口句柄以便进行 Win32 函数调用。

3.9K10

Windows 下的高 DPI 应用开发(UWP WPF Windows Forms Win32)

当多个屏幕 DPI 不一样,而应用从一屏幕切换到另一个屏幕的时候,应用会收到 DPI 改变的消息 只有应用的顶层 HWND 会收到 DPI 改变消息 屏幕级感知第二代 (Per-Monitor V2...当多个屏幕 DPI 不一样,而应用从一屏幕切换到另一个屏幕的时候,应用会收到 DPI 改变的消息 应用的顶层和子 HWND 都会收到 DPI 改变消息 以下 UI 元素也会在 DPI 改变时缩放 非客户区...混合 DPI 感知级别 当项目足够大的时候,一或几个项目成员可能很难了解所有的窗口逻辑。让一进程的所有窗口开启 DPI 缩放对应用的高 DPI 迁移来说比较困难。...在创建一窗口的前后分别调用 SetThreadDpiAwarenessContext 函数可以让创建的这个窗口具有单独的 DPI 感知级别。...在以下实验,我组成了一 96 DPI 的主屏和 144 DPI 的副屏,先在 96 DPI 的屏幕上截一张图,再将窗口动到 144 DPI 的屏幕再截一张图。

69650
您找到你想要的搜索结果了吗?
是的
没有找到

Windows 对全屏应用的优化

全屏应用对应的是窗口模式应用,全屏应用指的是整个屏幕都是被咱一应用独占了,屏幕上没有显示其他的应用,此时的应用就叫全屏应用。希沃白板这个程序。...在 Windows 上运行的应用,游戏等有三不同的显示模式(考古发现还有一些特别的显示模式,但是太诡异了我就不敢说了)包括 全拼独占模式(FSE Fullscreen Exclusive)、窗口模式...这个拦截会出现比较多性能问题和不稳定问题 全屏独占窗口对于多个屏幕的设备不够友好,如果使用 DWM 管理另一个屏幕,那么当另一个屏幕的应用获取焦点又需要如何处理。...更多关于 WPF 的优化请看 从 DX 层面讲 WPF 渲染卡顿 注:有小伙伴对于独占全屏应用的多屏幕处理觉得有点迷,我换句话告诉大家,请打开一 UWP 的视频应用,让他进入全屏。...这个应用进入全屏就是独占模式,此时你在另一个屏幕移动一窗口,逐步移动到视频应用的屏幕上,你可以看到要么视频的屏幕依然播放视频,要么就是你移动过去了,视频应用就最小化了 另外在 win7 下的对无边框的全屏应用的优化也是有坑的

1.8K20

dotnet 从入门到放弃的 500 篇文章合集

对比 UWP 开发,需要知道的1000问题 Visual studio C# 代码使用 NotNull visual Studio 无法调试,提示程序跟踪已退出 visual-studio-2015...的文字到另一个TextBlock win10 uwp 如何让 Page 继承泛型类 win10 uwp 如何让一集合按照需要的顺序进行排序 win10 UWP 序列化 win10 UWP 应用设置 win10...控件 WPF 修改按钮按下的颜色 WPF 写系统日志 WPF 判断调用方法堆栈 wpf 单例 WPF 只允许打开一实例 WPF 可获得焦点属性 WPF 在 Alt+Tab 隐藏窗口 WPF 好看的矢量图标...wpf 如何使用 Magick.NET 播放 gif 图片 WPF何在 WriteableBitmap 写文字 WPF何在应用程序调试启动 WPF何在绑定失败异常 WPF 如何画出1像素的线...ViewBox 不显示线的问题 WPF 解决 xaml 设计显示异常 WPF 解决弹出模态窗口关闭后,主窗口不在最前 WPF 设置纯软件渲染 WPF 设置输入只能英文 WPF 调试 获得追踪输出 WPF

10.4K20

WPF 程序鼠标在窗口之外的时候,控件拿到的鼠标位置在哪里?

WPF 程序,我们有 Mouse.GetPosition(IInputElement relativeTo) 方法可以拿到鼠标当前相对于某个 WPF 控件的位置,也可以通过在 MouseMove...---- 可用于演示的 DEMO 直接使用 Visual Studio 2019 创建一空的 WPF 应用程序。默认 .NET Core 版本的 WPF 会带一文本框和一按钮。...如果不知道客户区是什么,可以阅读下面我的另一篇博客: WPF 使用 WindowChrome,在自定义窗口标题栏的同时最大程度保留原生窗口样式(类似 UWP/Chrome) 在以上图中,我拖动改变了窗口的位置...,这时将鼠标移动至离开客户区后,获取到的坐标点又被固定为另一个数值。...验证这一点,我们把窗口动到屏幕的左上角后,将鼠标移出客户区,左上角的控件其获取到的鼠标位置已经变成了 (0, 31),而这个是窗口标题栏非客户区的高度。

49540

WPF AvalonDock拖拽布局学习整理

AvalonDock提供了一系统,允许开发人员使用类似于许多流行的集成开发环境(IDE)窗口对接系统来创建可自定义的布局。 AvalonDock遵循MVVM设计。...DockingManager类 布局模型类 以下示例显示如何在DockingManager设置各种布局元素。...只有一逻辑树,以DockingManager为根。即使控件放在不同的窗口(即自动隐藏窗口或浮动窗口,它也始终属于DockingManager下面的同一逻辑树。...可锚定通常是应用程序控件的容器,可以从其容器窗格(LayoutAnchorablePane)拖出并重新定位到另一个窗格。...Anchobles也可以拖动到父DockingManager的边框,这使它们出现在所有其他anchorables或文档的上方,下方,左侧或右侧(自动隐藏窗口除外;请参阅下面的LayoutAnchorSide

2.5K30

Vim命令使用说明

如果是终端,则会打开netrw的文件浏览窗口; 如果是gvim,则会打开一图形界面的浏览窗口。 实际上:browse后可以跟任何编辑文档的命令,sp等。...,浏览文件系统; :Vex – 垂直分割一窗口,浏览文件系统; 光标的移动 基本移动 h或退格: 左移一字符; l或空格: 右移一字符; j: 下移一行; k: 上一行; gj: 移动到一段内的下一行...w: 前单词,光标停在下一单词开头; W: 移动下一单词开头,但忽略一些标点; e: 前单词,光标停在下一单词末尾; E: 移动到下一单词末尾,如果词尾有标点,则移动到标点; b:...这在插入分割线时非常有用,30i+就插入了36+组成的分割线。...:[n]r filename在第n行插入另一个文件的内容。 :r !date 在光标处插入当前日期与时间。同理,:r !

2.5K10

WPF 程序如何移动焦点到其他控件

WPF 可以使用 UIElement.Focus() 将焦点设置到某个特定的控件,也可以使用 TraversalRequest 仅仅移动焦点。本文介绍如何在 WPF 程序控制控件的焦点。...1 2 3 var traversalRequest = new TraversalRequest(FocusNavigationDirection.Next); // view 是可视化树的一控件...比如默认情况下 WPF 每个 Window 就是一焦点范围,那么每个 Window 的当前焦点就是逻辑焦点。...而一旦这个 Window 激活,那么这个窗口中的逻辑焦点就会成为键盘焦点,另一个窗口当中的逻辑焦点保留,而键盘焦点则丢失。...跨窗口/跨进程切换焦点 参见我的另一篇博客: WPF 程序如何跨窗口/跨进程设置控件焦点 ---- 参考资料 winapi - Win32: C++: How do I re-focus on Parent

35930

WPF 渲染原理

本文是从一很高的地方来看渲染的过程,在本文之后会添加很多博客来告诉大家渲染的细节。...WindowsCodecs.dll 这时另一个底层的图片支持代码,用来支持 WPF 旋转、放大图片等,这是一使用本地代码编译的,提供了很多图片的加密解密,可以让 WPF 把图片画在屏幕 核心系统层...这一层就是系统的核心, User32、GDI、Device Drivers,显卡等,这些组合在程序里是最底层的接口 User32 提供内存和进程分割,这是一通用的 API 不止是 WPF 使用,...消息循环 在 WPF 也是使用消息循环,因为在之前的很多程序都是需要自己写消息循环才可以收到用户的交互,这里消息循环就是 Windows 会向 WPF 发送一些消息,而且 WPF 也可以给自己发消息,...,一WPF 把内容画到窗口,也就是上面说的自定义消息,还有另一个就是把窗口内容画在屏幕。

2.8K31

WPF 开启Pointer消息存在的坑

· dotnet/wpf 但预计不会在 WPF 修复,原因是这是 Windows 的 WM_Pointer 机制的坑,和 WPF 其实没有关系 另一个解决方法是在关闭系统全局触摸反馈点,关闭方法请看...在 Win10 提出的一新交互里面,允许未激活的窗口接收到鼠标滚轮消息。...表现是当前触摸被某个获取焦点的窗口捕获,此时触摸点到一后台的窗口,未激活的窗口上,那此窗口依然可以收到触摸消息,无论这个窗口是在哪个进程上,只需要此窗口所在的进程开启 Pointer 消息即可 而原先的交互是如果触摸被某个前台窗口捕获...,那么其他窗口将啥都收不到,包括 WM_Touch 消息或者实时触摸消息 滑动过程开启窗口触摸失效 在进行 Manipulation 过程,打开或者激活了窗口,将导致此窗口不接受触摸消息而触摸失效。...例如另一个进程的文本框获取焦点时,在滑动 ListView 列表时,打开了窗口或者激活现有的窗口到前台获取焦点,在此窗口内进行触摸,可能会收不到触摸事件 原因是在进行 Manipulation 将会设置一些特殊的内部字段参数

79230

【愚公系列】2023年10月 WPF控件专题 Frame控件详解

WPF控件可以分为两类:原生控件和自定义控件。原生控件是由Microsoft提供的内置控件,Button、TextBox、Label、ComboBox等。这些控件都是WPF中常见的标准用户界面元素。...一、Frame控件详解WPF的Frame控件是一容器控件,它可以用来显示其他WPF控件或页面。Frame控件可以嵌套在其他容器控件,例如Grid、StackPanel、DockPanel等。...Frame控件和一按钮的窗口。...2.常用场景Frame控件是WPF的一容器控件,可以用于在同一窗口中显示不同的页面内容。...常用场景包括:实现导航功能:在一页面可以通过点击链接或按钮切换到另一个页面,这个操作可以使用Frame控件实现。

50000

WindowsXamlHost:在 WPF 中使用 UWP 的控件(Windows Community Toolkit)

添加到你的 WPF 界面: 拖拽到界面设计器 拖拽到 XAML 代码行 直接在 XAML 代码写 ?...最终效果 当将程序跑起来之后,你就能看到 WPF 窗口中的 UWP 控件了。 ?...HwndSource,这相当于 UWP 的控件是通过子窗口的形式与 WPF 窗口放在一起的 于是,只能指定一矩形区域完全属于 UWP,在这个区域 WPF 控件无法与其获得交互或渲染叠加 关于...关于如何在 WPF 下开启 PerMonitorV2 级别的 DPI 感知可以参见: 支持 Windows 10 最新 PerMonitorV2 特性的 WPF 多屏高 DPI 应用开发 - walterlv...更复杂的 UWP 控件嵌入 如果希望将更多的 WPF 窗口内的 UI 部分交给 UWP 来做,那么就不能只是仅仅初始化一 Button 就完了。

4.5K20

Linux学习笔记之vim操作指令大全

如果是终端,则会打开netrw的文件浏览窗口; 如果是gvim,则会打开一图形界面的浏览窗口。 实际上:browse后可以跟任何编辑文档的命令,sp等。...h或退格: 左移一字符; l或空格: 右移一字符; j: 下移一行; k: 上一行; gj: 移动到一段内的下一行; gk: 移动到一段内的上一行; +或Enter: 把光标移至下一行第一非空白字符...w: 前单词,光标停在下一单词开头; W: 移动下一单词开头,但忽略一些标点; e: 前单词,光标停在下一单词末尾; E: 移动到下一单词末尾,如果词尾有标点,则移动到标点; b:...:tabs – 列出所有的标签页和它们包含的窗口。 :tabm[ove] [N] – 移动标签页,移动到第N标签页之后。  tabm 0 当前标签页,就会变成第一标签页。...:split filename – 水平分割窗口,并在新窗口中显示另一个文件。 :nsplit(:nsp) – 水平分割出一n行高的窗口

2.7K20

在 Linux 终端中使用命令移动文件

要在有图形界面的计算机上移动一文件,你要打开该文件当前所在的文件夹,然后打开另一个窗口导航到你想把文件移到的文件夹。最后,你把文件从一窗口拖到另一个窗口。...要在终端中移动文件,你可以使用 mv 命令将文件从一位置移动到另一个位置。... 文件夹。...与在一系列窗口中浏览你电脑上的所有文件夹以找到一文件,然后打开一窗口到你想让该文件去的地方,再拖动该文件相比,这可以大大节省时间。...默认情况下,mv 命令完全按照它被告知的那样做:它将一文件从一位置移动到另一个位置。如果在目标位置已经存在一同名的文件,它将被覆盖。

2.7K00

【愚公系列】2023年11月 WPF控件专题 WindowFormsHost控件详解

WindowFormsHost控件工作原理是将WinForms控件作为其子元素添加到WPF的逻辑树。在运行时,WinForms控件被呈现在WPF窗口中。...1.属性介绍WindowFormsHost是WPF的一控件,它可以用来在WPF应用程序嵌入一Windows Forms控件。...常见的场景有:在WPF应用程序中使用Windows Forms控件:有些Windows Forms控件具有WPF没有的功能或特性,PropertyGrid控件。...以下是一简单的案例,展示如何在WPF窗口中嵌入WinForms控件,以及在WinForms控件中使用WPF控件。在Visual Studio创建一WPF应用程序。...窗口 winFormsHost.Child = chart;}这个例子创建一Pie Chart图表,并将它嵌入到WPF窗口中。

58941

WPF 动画实战 点击时显示圆圈淡出效果

就是点击的时候,看命中到哪个元素,如果容器没有设置背景,那么这个容器就不能接收命中测试,也就是点击的时候不会判断点击到这个容器 在后台代码添加鼠标点击的代码 如何在 WPF 显示一圆圈?...在 WPF ,可以通过 GetPosition 方法拿到鼠标相对于某个元素的坐标,或者说鼠标点击到某个元素的坐标。...原因是不同的控件的坐标是不同的,鼠标点击的绝对坐标是屏幕,但是应用的控件一般都是相对于上一层容器,窗口等。...小伙伴都知道,如果是全透明,也就是看不见 在 Animation 类提供了两属性,一是 From 另一个是 To 分别表示让属性从哪里什么值开始修改到哪个值。...在 WPF 的单位不一定是像素,因为 WPF 和屏幕具体分辨率等有很复杂的关系,详细请看本文最后的参考文档 还记得刚才是如何修改元素的坐标?

2.4K20

WPF 已知问题 开启 WM_Pointer 消息之后 获取副屏触摸数据坐标偏移

本文记录 WPF 触摸的一已知问题,仅在开启 WM_Pointer 消息之后,将应用程序运行在包含多个屏幕的带触摸屏的设备上,如此时在非主屏幕的触摸屏上进行触摸,使用 GetStylusPoint 或...复现步骤: 创建一WPF 程序,按照 WPF dotnet core 如何开启 Pointer 消息的支持 博客提供的方法开启 WM_Pointer 消息 在 MainWindow 放入 InkCanvas...运行程序,将程序的主窗口动到副屏上,对应用程序进行触摸 此时你将会发现应用程序无法绘制出你所画出的笔迹。...如果你将整个窗口缩放很大,跨了你的两屏幕,你将会发现在副屏上所画的内容将会显示到主屏幕上去。...且所偏差的坐标差值刚好是整个屏幕距离,如果刚好你的两屏幕的虚拟尺寸(非物理尺寸)是一样大的,那这个偏差就更好看出来了,如下图 问题原因: 此问题是在 WPF 框架的 HwndPointerInputProvider.cs

25410

Windows快捷键速查

Ctrl + R(或 F5) 刷新活动窗口。 Ctrl + Y 恢复操作。 Ctrl + 向右键 将光标移动到下一字词的起始处。 Ctrl + 向左键 将光标移动到上一字词的起始处。...Ctrl + Shift + 箭头键 当磁贴的焦点放在“开始”菜单上时,将其移到另一个磁贴即可创建一文件夹。 Ctrl + 箭头键 打开“开始”菜单后调整其大小。...任务栏 快捷键 说明 Shift + 单击任务栏按钮 打开应用或快速打开另一个应用实例。 Ctrl + Shift + 单击任务栏按钮 以管理员身份打开应用。...Ctrl + End(标记模式) 将光标移动到缓冲区的结尾处。 Ctrl + 向上键 在输出历史记录中上一行。 Ctrl + 向下键 在输出历史记录中下移一行。...Ctrl + Tab 在选项卡向前移动。 Ctrl + Shift + Tab 在选项卡向后移动。 Ctrl + 数字(数字 1–9) 移动到第 n 选项卡。 Tab 在选项向前移动。

4.2K20

WPF空的 WPF 程序有多少窗口

好多小伙伴说 WPF 的程序有五窗口,但是我尝试使用了 EnumThreadWindows 去获取的时候居然拿到了 10 多个窗口WPF 内部的5窗口之 MediaContextNotificationWindow...听说有五窗口 可以通过 user32 的 EnumThreadWindows 找到一线程的窗口 delegate bool EnumThreadDelegate(IntPtr hWnd...EnumerateProcessWindowHandles(Process.GetCurrentProcess()); Debug.WriteLine(handleList.Count()); } 返回的是 14 窗口...,但是如果将代码移动到 WPF 的构造函数,会发现只有两窗口 public MainWindow() { var handleList = EnumerateProcessWindowHandles...内部的5窗口之 MediaContextNotificationWindow ---- 本文会经常更新,请阅读原文: https://lindexi.gitee.io/post/WPF

65820
领券