WPF控件中的本机Win32窗口

10

我正在开发一个应用程序,需要承载本地的Win32窗口,但是我不知道如何做。

我需要创建一个WPF对话框窗口,在其上显示本地的Win32控件。这个对话框窗口也会有WPF控件,所以我正在寻找一种类似网格的东西,我可以从中取得HWND并将其发送给非托管C++控件,以便它可以在上面绘制。

这样可能吗?

我不需要知道表面内部发生了什么,只需要让C++ dll在其上绘制即可,而我所需要做的就是传递具有正确大小(我知道大小)的HWND。

我有点陌生WPF(之前经常做win32编程),有些迷茫(但我知道如何将其与C# .NET等接口)。

如果您能给我任何提示,那就太好了 :)

1个回答

13

您可以按照这里的说明/步骤开始:在WPF中托管Win32内容

从文章介绍中可以看到:

Win32在Windows Presentation Framework (HwndHost)中的演示

要在WPF应用程序中重用Win32内容,请使用HwndHost,它是一种控件,使HWNDs看起来像WPF内容。与HwndSource类似,HwndHost的使用方法很简单:从HwndHost派生并实现BuildWindowCore和DestroyWindowCore方法,然后实例化您的HwndHost派生类,并将其放置在您的WPF应用程序中。

如果您的Win32逻辑已经封装为一个控件,则您的BuildWindowCore实现只是调用CreateWindow的一个小部分。

如果您有具体问题,请在此处提出,人们会在特定问题上帮助您。


那正是我一直在寻找的 :) 我现在已经打开并运行了我的对话框窗口。非常感谢! - pablox
我能否在一个常规的Windows Forms应用程序中使用HwndHost来进行托管? - user586399
@Desolator,是的,因为WindowsFormsHost继承自HwndHost。 - Justin R.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接