在WPF应用程序中托管win32 windows? 我有一个传统的C++ Win32应用程序,使用WPF窗口扩展它是有效的。

在WPF应用程序中托管win32 windows? 我有一个传统的C++ Win32应用程序,使用WPF窗口扩展它是有效的。,c++,wpf,interop,winapi,C++,Wpf,Interop,Winapi,但我想做的是有一个WPF窗口作为主窗口,而不仅仅是任何旧窗口,而是一个棱柱壳窗口 P>所以,对于我的遗留C++项目,我想添加引导程序、shell窗口、MEF加载器、所有的铃声和口哨。在这里,我想输入一些命令,在需要时打开传统的win32窗口 现在在win32应用程序中打开WPF窗口很简单,我只需要使用 System::Windows::Forms::Integration::ElementHost::EnableModelessKeyboardInterop(mywindow); 但是如何在

但我想做的是有一个WPF窗口作为主窗口,而不仅仅是任何旧窗口,而是一个棱柱壳窗口

<> P>所以,对于我的遗留C++项目,我想添加引导程序、shell窗口、MEF加载器、所有的铃声和口哨。在这里,我想输入一些命令,在需要时打开传统的win32窗口

现在在win32应用程序中打开WPF窗口很简单,我只需要使用

System::Windows::Forms::Integration::ElementHost::EnableModelessKeyboardInterop(mywindow);
但是如何在WPF应用程序中打开win32窗口?win32窗口将需要一个消息泵循环,但我应该把它放在哪里:

MSG  msg;
while (GetMessage(&msg, NULL, NULL, NULL))
{
  TranslateMessage(&msg);
  DispatchMessage(&msg);
}
我可以为循环创建任何新线程吗?或者是否也有一个互操作帮助程序

还是我的想法太疯狂了?

你看到了吗

我还建议阅读以下内容:

正如您将看到的,有一个主机窗口将包含该控件。宿主窗口还可以包含自绘制内容或任何您想要的内容

您必须从HwndHost重写WndProc。可能是有可能转发到您的本地处理程序从那个。我还没有这样做


正如@Tergiver指出的,不需要消息泵。

很酷,很好的东西-但这是为了在WPF窗口中托管win32控件,不是吗?我想打开一个相当独立的win32窗口,但我还不太明白如何应用它。但我现在有了一个起点,谢谢!还有一个解决方案可以在同一个页面上的win32 hwnd中托管wpf页面。这也不是我想要实现的:)但就我所了解的信息而言,我不需要担心消息泵,wpf可以管理它!?这不仅仅是为了控制。在WPF中托管HWND甚至比在WPF中托管win32控件更简单。我还建议阅读演练:在Win32中托管WPF内容。@Sam:Win32控件和Win32窗口之间的唯一区别是窗口样式:WS_CHILD。它们是一样的东西(都是窗口)。无论在哪个线程上创建窗口,都必须有一个消息泵,该窗口才能正常工作。WPF已经有了一个带有消息泵的UI线程(否则它将无法工作),所以是的,WPF可以管理它。也许是时候打开开关了。让WPF应用成为你的主要应用。