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

System.InvalidOperationException:“寄宿 HWND 必须是子窗口。”

当试图 WPF 窗口中嵌套显示 Win32窗口时候,你有可能出现错误:“System.InvalidOperationException:“寄宿 HWND 必须是子窗口。””。...这是很典型 Win32 错误,本文介绍如何修复此错误。 ---- 一个最简嵌入其他窗口例子 我们 MainWindow 嵌入一个其他窗口承载 WPF 控件。...WPF 可以使用 HwndSource 来包装一个 WPF 控件Win32 窗口,使用自定义继承自 HwndHost 类可以把 Win32 窗口包装成 WPF 控件。...由于窗口句柄是可以跨越进程边界传递,所以这样方式可以完成跨进程 WPF 控件显示。 下面是最简单一个例子,为了简单,没有跨进程传递 Win32 窗口句柄,而是直接创建出来。...ChildPage 是一个继承自 UseControl WPF 控件,你可以自己创建自己 WPF 控件

25120

System.InvalidOperationException:“寄宿 HWND 必须是指定父级窗口。”

当试图 WPF 窗口中嵌套显示 Win32窗口时候,你有可能出现错误:“寄宿 HWND 必须是指定父级窗口。”。 这是很典型 Win32 错误,本文介绍如何修复此错误。...---- 我们 MainWindow 嵌入一个其他窗口承载 WPF 控件。...一般情况下我们当然不会这么去做,但是如果我们要跨越进程边界来完成 WPF 渲染内容融合时候,就需要嵌入一个新窗口了。...WPF 可以使用 HwndSource 来包装一个 WPF 控件Win32 窗口,使用自定义继承自 HwndHost 类可以把 Win32 窗口包装成 WPF 控件。...由于窗口句柄是可以跨越进程边界传递,所以这样方式可以完成跨进程 WPF 控件显示。

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

System.InvalidOperationException:“BuildWindowCore 无法返回寄宿窗口句柄。”

当试图 WPF 窗口中嵌套显示 Win32窗口时候,你有可能出现错误:“BuildWindowCore 无法返回寄宿窗口句柄。”。...这是很典型 Win32 错误,本文介绍如何修复此错误。 ---- 我们 MainWindow 嵌入一个其他窗口承载 WPF 控件。...一般情况下我们当然不会这么去做,但是如果我们要跨越进程边界来完成 WPF 渲染内容融合时候,就需要嵌入一个新窗口了。...WPF 可以使用 HwndSource 来包装一个 WPF 控件Win32 窗口,使用自定义继承自 HwndHost 类可以把 Win32 窗口包装成 WPF 控件。...由于窗口句柄是可以跨越进程边界传递,所以这样方式可以完成跨进程 WPF 控件显示。

23640

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

更新于 2018-07-12 11:44 WPF UI 逻辑只同一个线程,这是学习 WPF 开发中大家几乎都会学习到经验。...后者使用Win32 方式,实际效果非常类似 WindowsFormsHost,新线程 UI 原来所有 WPF 控件上面遮挡。另外,后者不止可以是跨线程,还可以跨进程。...呃……就是 Windows 自诞生以来那种传统。传统 Win32 应用程序,每一个控件都有自己窗口句柄,它们之间通过 SetParent 进行连接;可以说一个 Button 就是一个窗口。...而我们现在使用 SetParent 其实就是使用传统 Win32 程序控件机制。 MoveWindow 用于指定窗口相对于其父级位置,我们使用这个函数来决定新嵌入窗口原来界面位置。...这是 WPF 窗口刚刚获得 Windows 窗口句柄时机,在此事件,我们可以最早地拿到窗口句柄以便进行 Win32 函数调用。

3.9K10

ASP.NET MVC如何应用多个相同类型ValidationAttribute?

[源代码从这里下载] 一、一个自定义ValidationAttribute:RangeIfAttribute 为了演示相同目标元素(类、属性或者字段)应用多个同类ValidationAttribute...具体验证逻辑定义重写IsValid方法。...HttpPostIndex操作,如果验证成功我们将“验证成功”字样作为ModelError添加到ModelState。...默认情况下,AttributeTypeId返回是自身类型,所以导致应用到相同目标元素同类ValidationAttribute只能有一个。...幸好AttributeTypeId属性是可以被重写,县我们RangeIfAttribute按照如下方式对这个属性进行重写: 1: [AttributeUsage( AttributeTargets.Field

2K60

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

WPF 可以使用 UIElement.Focus() 将焦点设置到某个特定控件,也可以使用 TraversalRequest 仅仅移动焦点。本文介绍如何在 WPF 程序控制控件焦点。...而 WPF多个焦点范围(Focus Scope),按下 Tab 键切换焦点时候只会在当前焦点范围切焦点,不会跨范围。那么一旦跨范围切焦点时候,焦点会去哪里呢?答案是逻辑焦点。...比如默认情况下 WPF 每个 Window 就是一个焦点范围,那么每个 Window 的当前焦点就是逻辑焦点。...而一旦这个 Window 激活,那么这个窗口逻辑焦点就会成为键盘焦点,另一个窗口当中逻辑焦点保留,而键盘焦点则丢失。...跨窗口/跨进程切换焦点 参见我另一篇博客: WPF 程序如何跨窗口/跨进程设置控件焦点 ---- 参考资料 winapi - Win32: C++: How do I re-focus on Parent

33030

一站式WPF--Window(一)

独立 WPF 应用程序使用 Window 类来提供它们自己窗口。   这段是MSDN上对Window描述,虽然翻译不是那么地道,也可以看出Window两大功能:一,承载可视化数据。...CreateWindow返回值就是窗口句柄,从这个意义上来讲,Win32世界,万物皆Window,只是表现形式不同,那么WPFWindow对应什么呢?...WPFWindow   WPFWindow继承于ContentControl,内部可以承载一个Content,当然,借助于ItemsControl或Panel,Content也可以向下添加多个对象...这些对象都是WPF对象,也就是要承载可视化数据。那么用户与可视化数据间交互是怎么完成呢?   ...用一个草图来表示Window消息处理过程: 系统将消息发给隐藏Win32-Window,DispatcherGetMessage并分发到对应窗口过程处理函数WndProc。

18930

浅谈window桌面GUI技术及图像渲染性能测试实践

Win32程序 使用 Win32 API 来创建程序成为Win32程序。 提供 Win32 APIdll被加载到应用程序进程,应用程序通过这些API来创建线程、窗口控件。...Win32程序,所有窗口控件都是一个窗口实例,都拥有一个窗口句柄,窗口对象属于内核对象,由Windows子系统来维护。...Windows子系统为标准控件定义了窗口类,并使用GDI来绘制这些标准控件Win32程序采用消息循环机制: ?...WPF程序 WPF控件不再是通过Win32 API来创建窗口,使用Win32 API并不能查找和操作WPF控件 WPF所有控件和动画都是使用DirectX 绘制 WPF控件不直接支持MSAA,而是通过...,渲染过程快速截图,实时比较两幅图片是否完全相等,如果相等并结束计时并写入响应时间。

3.4K30

WPF消息机制(二)- WPF内部5个窗口之隐藏消息窗口

用于UI窗口绘制可见窗口 WPF消息机制(三)-WPF输入事件来源 WPF消息机制(四)-WPFUI更新 WPF内部5个窗口 对于Windows系统来说,它是一个消息系统,消息系统核心就是窗口...另外,前面提到“消息循环”,“消息队列”等都是Win32应用程序概念,我们知道,提起这些概念,必然会跟Win32窗口”,“Handle”,“WndProc”之类概念离不开,那么WPF里面究竟有没有...通常情况下,一个WPF应用程序在运行起来时候,后台会创建5个Win32窗口,帮助WPF系统来处理操作系统以及应用程序内部消息。...接下来我会来介绍究竟这5个Win32窗口如何帮助WPF处理消息,我会根据每个窗口创建顺序来介绍。...第四步,系统根据获取消息Handle,发现跟Window1#Handle相同,那么这个消息派发到Window1#窗口过程,让其处理。

1.8K50

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

▲ 自定义 DPI 设置 自 Windows 8.1 开始,操作系统开始可以设置不同屏幕 DPI 值了: ▲ Windows 10 多个屏幕选择 ▲ Windows 10 针对每个屏幕...(Non-client Area) 系统通用控件位图(comctl32V6) 对话框(CreateDialog) Windows 10 19H1 ,可以直接在任务管理器查看到进程 DPI...而 Per-Monitor V1 和 Per-Monitor V2 支持操作系统级别是兼容,所以只需要修改 WPF 应用程序清单即可兼容第二代屏幕级 DPI 感知。...以下实验,我组成了一个 96 DPI 主屏和 144 DPI 副屏,先在 96 DPI 屏幕上截一张图,再将窗口移动到 144 DPI 屏幕再截一张图。...- Per Monitor DPI - WPF Preview.docx at master · Microsoft/WPF-Samples Windows 10 修复显示模糊应用 - Windows

65650

WPF消息机制(一)- 让应用程序动起来

Post到特定窗口所在线程消息队列,应用程序消息循环再不断从消息队列当中获取消息,然后再派发给特定窗口窗口过程来处理,在窗口过程完成一次用户交互。...(3)用于UI窗口绘制可见窗口 (4)用于用户交互可见窗口 WPF消息机制(三)-WPF输入事件来源 WPF消息机制(四)-WPFUI更新 让应用程序动起来 谈到WPF消息,首先应该知道...DispactherObject以及DispatcherWPF系统作用。...那么一个Application启动之后,按照以前对Win32消息机制理解,当应用程序启动后,必须进入消息循环,对于WPF,也是一样。那么WPF应用程序是什么地方进入消息循环呢?...下面的一篇我会介绍WPF当中Win32窗口,正是这些窗口,处理着来自系统,或者来自应用程序内部消息。 敬请期待~

1.3K90

关于WPF空域问题

(严格来说,如果有一个以上WPF高速公路,将会有一个以上WPF空域,但是为了解释这个概念,假设在本主题给出例子只有一个)。...空域概念意味着,应用程序生命周期内,所有试图该像素之上进行渲染图层或其他窗口都必须属于同一互操作技术。...试图Win32上呈现WPF像素会导致不希望结果,并且通过互操作API尽可能不被允许(这段话是抄啦)这里有介绍,简单来说就是不同渲染技术导致了空域产生,最常见现象,wpf 上放一个winform...window 作为一个usercontrol嵌入到wpf,查阅官方文档发现一个HwndHost 类,查阅官方文档这个类描述为将 Win32 window 托管为 Windows Presentation...Foundation (WPF) 内容一个元素。

1.4K60

WPF 同一窗口多线程 UI(VisualTarget)

2018-09-05 05:47 WPF UI 逻辑只同一个线程,这是学习 WPF 开发中大家几乎都会学习到经验。...如果希望做不同线程 UI,大家也会想到使用另一个窗口来实现,让每个窗口拥有自己 UI 线程。然而,就不能让同一个窗口内部使用多个 UI 线程吗?...---- WPF 同一个窗口中跨线程访问 UI 有多种方法: 使用 VisualTarget (本文) 使用 SetParent 嵌入另一个窗口 前者使用WPF 原生方式,做出来跨线程 UI 可以和原来...后者使用Win32 方式,实际效果非常类似 WindowsFormsHost,新线程 UI 原来所有 WPF 控件上面遮挡。另外,后者不止可以是跨线程,还可以跨进程。...注释说 VisualTarget 就是用来连接可视化树(VisualTree),而且可以跨线程边界。也就是说,这是一个专门用来使同一个窗口内部包含多个不同 UI 线程类型。

2.5K20

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

因为我们不是原生 UWP,而是 Host WPF UWP 控件,所以会没有 Application。这在 UWP 控件初始化内部已经 catch 了,所以你可以忽略。...最终效果 当将程序跑起来之后,你就能看到 WPF 窗口 UWP 控件了。 ?...控件是一个新 HwndSource,这相当于 UWP 控件是通过子窗口形式与 WPF 窗口放在一起 于是,只能指定一个矩形区域完全属于 UWP,在这个区域 WPF 控件无法与其获得交互或渲染叠加...关于 DPI 适配 为了让 UWP 控件能够 WPF 窗口中获得正确 Per-Monitor DPI 适配效果,你需要设置为 PerMonitorV2 DPI 感知级别。...阅读以下文章了解更多: WindowsXamlHost: WPF 中使用 UWP 控件控件 - walterlv ---- 参考资料 WindowsXAMLHost control - Windows

4.5K20

WPF初体验

Win32/MFC/WinForms只要了解了消息循环机制, 理解起来就比较容易, 可WPF冒似没这套东西. 而且, HWND已经不存在于控件上了, 这是一个令人很不习惯地方....这样好处就是可以跟WPF排版/Alpha融合什么无缝结合, 但是, 由于中间多了一个拷贝, 会影响一部分效率. 再者, D3D9XP和Vista上处理方式不一样....WPF显示Win32控件, 可以使用HwndHost, 而对于WinForms, 可以使用WindowsFormsHost....BuildWindowCore里创建一个Win32窗口, 并把这个窗口HWND做为DX初始化参数. 如果需要改变大小, 还需要实现OnRenderSizeChanged....最完美的方式就是找到WPF主循环, 问题是WPF有这东西么? 有待研究. WPF优势是什么? 控件多样性不如WinForms, 与C++交互便利性不如MFC, 为什么还要使用它呢?

84830

WPF 弹出 popup 里面的 TextBox 无法输入汉字 修复 Popup 输入法不跟随 WinForms 弹出 WPF TextBox 无法输入问题

因为 Popup 句柄具有 WS_EX_NOACTIVATE 特性,所以 Popup 是无法获得焦点。微软系统,所有的窗口控件都是有句柄,句柄就是一个指针,获得他才知道是哪个控件。...解决方法是让输入法知道控件句柄,这需要一个 win32 dll ,传说中 User32.dll ,这个dll有SetFocus这个方法,请通过下面的代码Popup打开时调用。...,微软已经修复 修复 Popup 输入法不跟随 Popup 里 TextBox 输入可能出现输入法未跟随编辑框,这时需要调用 Win32 方法 [DllImport("User32.dll"...问了我一个问题,为什么 WinForms 弹出 WPF 文本框无法输入数字,但是可以输入其他内容 一开始我认为是绑定问题,如果一个控件绑定了另一个控件,或者有后台代码绑定,有另一个控件绑定了输入框都有方法让用户输入数字不显示...禁用TextBox触摸后自动弹出虚拟键盘 - 唐宋元明清2188 - 博客园 解决Winform中弹出WPF窗体不能在文本框输入问题 - 飞鹰专栏 - CSDN博客 Windows 窗体和 WPF

2.3K20

Windows 10 应用创建模糊背景窗口三种方法

-08-31 23:59 现代操作系统创建一张图片高斯模糊效果非常容易,不过如果要在窗口中获得模糊支持就需要操作系统原生支持了。...三种创建模糊背景窗口方法 Windows 10 上创建带模糊背景窗口有三种不同方法,不过每一种都是既有好处又有坏处: 调用 Win32 API —— SetWindowCompositionAttribute...这种方式你想获得多大模糊半径就能获得多大模糊半径,不过带来就是更高性能损耗。同时,还得考虑移动窗口时候动态地去更新背景图片并再次模糊。 ?...WPF BlurEffect WPF UIElement 都有 Effect 属性,将其设置为 BlurEffect 即可获得控件高斯模糊效果。...如果你窗口是一个异形窗口,例如是具有圆角矩形,那么你需要额外为控件设置 RectangleGeometry 来裁剪控件。 ?

2.7K30

达观金克:RPA界面元素智能自适应定位与操控技术

02 图像匹配定位图像匹配,待匹配图像寻找与目标图像相似性高单个或多个目标,并获取目标的坐标位置。...相较Win32 API支持了部分自定义控件。前提是开发人员实现自定义控件同时实现了 IAccessible 接口。缺点:功能不全。...例如WPF和Silverlight窗口控件并不是传统HWND,所以Win32 API和MSAA无能为力,而UIA可以直接支持这两种程序。兼容传统Win32和MSAA模式。...对于一个UI窗口,里面可能有几十个子控件或者子窗口。在编写测试代码时候, 如果对这些子元素获取,操作不能简化, 势必导致代码冗繁,难以维护。...RPA流程开发过程不需要区分自动化技术,同一流程可以不同操作系统中直接运行,能大幅降低开发成本。

1.2K10
领券