问题标签 [wpf-interop]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1359 浏览

c# - 为什么我的 WPF 托管 WinForm 为空白?

我使用了这个博客中的代码,如下所示,但有删节,我在主窗口中看到了 WinForm,但我在标签上放置的示例文本不可见。

和:

0 投票
2 回答
312 浏览

c# - 如何与托管在 WPF 用户控件中的 Delphi 窗口进行通信?

好吧,实际上我知道我可以通过它的消息泵与窗口本身、平面 GUI 进行通信,但是假设我想在生成和维护该窗口的 Delphi DLL 中调用一个 COM 公开函数?我首先必须以某种方式确定拥有该窗口的模块。

与 Delphi 端的通信很少:您现在是托管的,您的主机 ID 是x,您可以关闭,您必须关闭等。其余时间我将把我的主机公开为一个 COM 对象,Delphi 代码可以更轻松地交谈至。

0 投票
0 回答
152 浏览

wpf - 当我在 WPF 控件中托管 Win32 窗口时,我必须处理哪些 Windows 消息?

到目前为止,我只知道我必须监听 WM_CLOSE,这是一个关闭请求,以及 WM_DESTROY,这是关闭后窗口实际销毁的时间。我需要处理这些,因为我需要避免使用关闭的 Win32 窗口出现无用的 Win32 主机视图。

还有其他终止类型的消息吗?我不介意知道托管窗口的模块是否由于某种原因不稳定,这也将迫使我关闭我的主机视图。

0 投票
1 回答
964 浏览

wpf - WPF 中的托管窗口不会收到鼠标消息

比在我的 WPF 应用程序中托管 WinForms 用户控件更进一步,我实际上托管的是 Delphi 表单,即顶级窗口。我通过博客文章How To Host Top-Level HWNDs In WPF中的巫术来做到这一点。

几乎所有东西都能完美运行。我发送了一个在 Delphi 中构建的 COM 服务器,一个菜单路径字符串,它发送回一个窗口句柄,我将它传递给博客中描述的主机控件。Delphi 窗口几乎可以正确接收所有事件(更确切地说是 Windows 消息),而无需我进行任何干预。

唯一的问题是按钮。他们很好地收到了点击事件/消息,并且可以正常工作,但是现在 Delphi 的家伙已经为按钮添加了新图标,并且每个按钮都有一个活动图标、一个悬停图标和一个点击图标。他们没有收到任何应该更改这些图标的消息。为什么除了这些之外几乎所有消息都有效?我可以阅读和/或做些什么来尝试纠正这个问题?

0 投票
1 回答
695 浏览

c# - 当 .Net Framework 从 3.5 更改为 4.5 时,WPF 互操作控件呈现黑色

我有一个关于将 WinForms 控件嵌入 WPF 应用程序以及 .Net 框架版本之间的差异的互操作问题。

以下应在 WebBrowser 控件上显示一个透明的 wpf 控件(红色框),并在使用 .Net 3.5 时按预期工作:

在此处输入图像描述

...但在使用 .Net 4.5 编译后会发生以下情况。

在此处输入图像描述

切换回 .Net 3.5 后一切正常

以下代码适用于使用 .Net 3.0 到 .Net 3.5 但不适用于 .Net 4.0/4.5 的 Win32 的 WPF:

Win32HostRenderer.xaml:

Win32HostRenderer.xaml.cs:

位图缓冲区.cs:

InteropForm 只是派生的 System.Windows.Forms.Form 并没有什么特别的魔力。

集成到 WPF-Page 很简单:

在窗口加载事件之后:

(来自 Jeremiah Morrill 的代码部分,请参阅此博客了解更多信息)

0 投票
0 回答
213 浏览

wpf - WPF Winforms 互操作吃击键

我创建了一个带有 4 个文本框和一个按钮的单个表单的 winform 项目。

单击按钮时,我执行以下操作:

其中窗口 1 是 Wpf 窗口。Window1 上有一个按钮,当单击该按钮时,会发生以下情况:

当您运行应用程序时,会弹出 WinForm 表单。如果你点击选项卡,它会在 4 个文本框之间循环,没问题。然后单击按钮打开 WPF 窗口。单击该按钮并弹出消息框。让它们保持打开状态,然后返回 WinForm 表单,您不能再通过选项卡浏览这些字段,但您可以键入其他字符。看起来好像文本框得到了击键,但表单没有得到它们。我还收到系统提示音,好像模型正在敲击键盘一样。

编辑 2014 年 9 月 9 日下午 3:44

汉斯在评论中回应并且是正确的。我尝试描述一个更简单的案例,让其他人更容易重现使用相同的症状。我们的实际问题是我们创建了一个窗口基类,它支持模态到父功能。这是我们BaseWindow的相关代码

我确定这段代码取自某种博客/论坛帖子,但我无法在代码中找到对它的任何引用。我们希望将模式保留为父模式,但有些方法可以解决奇怪的按键问题。要重现此问题,请替换 Window1 中的 button_click 以在将其用作基类的窗口上调用 ShowModalToParent。

0 投票
2 回答
1315 浏览

wpf - ElementHost 在调整大小时闪烁黑色边框

免责声明:这不是重复的帖子。我用谷歌搜索了这个问题。另请阅读SO 问题。我尝试了其中一些东西,但似乎没有任何帮助。

考虑以下简单的示例代码。它只是 WinForm 中的一个空ElementHost(内部没有 WPF 控件):

调整表单大小时,可以在表单边框处看到两条黑边: 在此处输入图像描述

请,¿有人可以通过我的示例给出一个可行的解决方案来解决这个问题吗?

0 投票
1 回答
2060 浏览

c# - 如何“从”我直接创建的 HwndSource 获取 WPF 窗口?

如果我直接创建一个,那么我是否还创建了一个现在可以从代码访问HwndSource的 WPF ?Window如果是这样,我该如何访问它?

或者我现在需要以某种方式“添加”一个 WPFWindowHwndSource?如果是这样,我该怎么做?

我已经HwndSource彻底研究了文档,这部分根本没有解释清楚。我知道我可以HwndSource从现有的 WPF 窗口中获取,但这对我没有帮助。我需要拦截 的创建Window,所以我可以强制它设置WS_CHILD样式并直接设置它的父级;并且文档说如果要强制其父级,则必须直接创建 HwndSource 。

编辑:我一直在研究我能找到的每一个问题HwndSource;看起来您通过将对象的属性设置为要显示的 WPF 对象,将WPF对象“添加”到对象;或者也许通过调用方法?接下来将检查那些。希望这对其他提问者有用。HwndSourceRootVisualHwndSourceHwndSource AddSource

0 投票
2 回答
1411 浏览

wpf - 是否可以将 QT 应用程序托管到 WPF 应用程序中?

我正在尝试创建 WPF GUI 应用程序来托管已经存在的 QT GUI 应用程序作为主 UI 的一部分。

QT 应用程序不需要处理鼠标/键盘输入。

我已经尝试过这个SO Post中提到的方法。似乎所有这些方法都不适用于 QT 应用程序。

在此处输入图像描述

0 投票
0 回答
276 浏览

c# - Wpf Monogame Interop 不会在 Designer 中加载

嗨,我从这个位置使用 WpfInterop NuGet 插件https://gitlab.com/MarcStan/MonoGame.Framework.WpfInterop/ 我按照自述文件中的方式完成了所有操作,但它不会加载到我的设计器中。

它总是说“无法创建“Game1”的实例(从德语翻译)并且也不会编译。

我已经尝试了一个新项目,但结果仍然相同。使用其他窗口也不起作用,即使生成新的 Game 类也无济于事。

我的 XAML 文件:

编辑:我的 Game1 类