1

我正在迁移现有的遗留项目。现在我们想使用 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);
...
}

这一定一件非常愚蠢的事情。

4

0 回答 0