MFC 应用程序中的 WPF System.Windows.Navigation.NavigationWindow

Posted

技术标签:

【中文标题】MFC 应用程序中的 WPF System.Windows.Navigation.NavigationWindow【英文标题】:WPF System.Windows.Navigation.NavigationWindow in MFC application 【发布时间】:2014-12-16 14:23:22 【问题描述】:

我需要在 MFC Win32 应用程序中使用带有 System.Windows.Navigation.NavigationWindow 的 WPF Lib,但我的 WPF Windows 不是黑屏。我在调试输出中没有错误消息。

我尝试过的所有其他 WPF 控件在 MFC 中都可以正常工作(按钮、网格、使用 C++ 的 D3D)。

有人知道如何调试或如何调查吗?

谢谢

编辑:问题也发生在 System.Windows::Window 上。如果我在 WPF 应用程序中使用我的 WPF,它就可以正常工作。

【问题讨论】:

您是否有小样本会产生您遇到的这个问题? 您可以获取 microsoft 示例并在 WPF 中添加 NavigationWindow:go.microsoft.com/fwlink/?LinkID=160004 DarkPixel,这看起来相似吗? ***.com/questions/19794765/… 也许是相关的。但它在 WPF 应用程序中工作正常,我的问题似乎特定于 MFC 我不完全确定我是否理解您:您是否尝试在 Win32 窗口中托管 WPF 窗口?那是不可能的。或者你只是打电话给(new System.Windows::Window()).Show(); 【参考方案1】:

我找不到可行的解决方案,但这是我目前的解决方法。

我用我的 WPF Lib 创建了一个单独的 WPF 应用程序。

在我的 MFC 应用程序中我这样做:

HWND wpfProcessMainWnd = CreateProcessWPF();

SetParent(wpfProcessMainWnd, hWnd);

DWORD style = GetWindowLong(wpfProcessMainWnd, GWL_STYLE);
style |= WS_CHILD;
style &= ~(WS_BORDER | WS_OVERLAPPEDWINDOW);

SetWindowLong(wpfProcessMainWnd, GWL_STYLE, style);

SetWindowPos(wpfProcessMainWnd, NULL, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOZORDER);

发件人:https://***.com/a/16641537/2849700

【讨论】:

以上是关于MFC 应用程序中的 WPF System.Windows.Navigation.NavigationWindow的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MFC 应用程序中托管 WPF 表单

MFC 和 WPF 之间的进程间通信

WPF App - MFC App 互操作

MFC中调用WPF教程

如何在 MFC 中使用的 WPF 控件中更改 DevExpress GridControl 默认主题

对界面编程来说c++的mfc,qt和c#的winform,wpf哪个应用多?学哪个好?