我正在迁移现有的遗留项目。现在我们想使用 C++/CLI 作为业务逻辑(原生 C++)和接口(WPF)之间的桥梁。我以这篇关于如何在 Win32 窗口中托管 WPF 内容的MSDN 文章作为起点。但是,我无法解决这个问题:每当我调整主机窗口大小时......
- 有严重的延误,窗户正在慢慢重新粉刷。
- 它会导致桌面窗口管理器 (dwm.exe) 显着增加内存使用量(在几秒钟内调整大小 2 GB)
我将代码精简到最低限度。一个简单的红色 WPF 页面和一个普通的 Win32 项目,几乎没有什么变化:
namespace ManagedCode {
using namespace System;
using namespace System::Windows::Interop;
void Create(HWND parent) {
HwndSource^ container = gcnew HwndSource(NULL, WS_CHILD | WS_VISIBLE, NULL,
0, 0, 100, 100, "WPFCONTENT", IntPtr(parent));
Managed::WpfPage^ page = gcnew Managed::WpfPage();
container->RootVisual = page;
}
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
...
case WM_CREATE:
ManagedCode::Create(hWnd);
...
}
这一定是一件非常愚蠢的事情。