【发布时间】:2013-12-26 17:03:48
【问题描述】:
我有我的 Direct3D 引擎渲染的 WPF 窗口。 WPF 窗口 我从我在 C++/CLI 上开发的引擎开始。 我有 2 个显示器,当我在它们之间移动窗口时,窗口的一部分变成白色并且不会更新,直到我不停止拖动它(如屏幕截图)。 有人知道如何解决这个问题吗?
由于代码很多,这里很难发布代码,但我会尝试:
我在一个项目中使用托管 C++ 和非托管 C++: 因此,我添加了 .Net dll 以访问 WPF 窗口:
Window^ wnd = gcnew Window();
wnd->Width = 1280;
wnd->Height = 720;
wnd->Show();
WindowInteropHelper^ helper = gcnew WindowInteropHelper(wnd);
HWND WPFHwnd = (HWND)helper->Handle.ToPointer();
HINSTANCE hinstance = (HINSTANCE)Marshal::GetHINSTANCE(this->GetType()->Module).ToPointer();
engine->SetHisnstanceHWND(WPFHwnd, hinstance);
engine->InitializeSystem(wnd->ActualWidth, wnd->ActualHeight);
engine - 这是一个非托管类,它封装了所有渲染工作。 此外,它是一个标准的 d3d 渲染循环。没什么特别的。 它渲染正常,但是当我调整窗口大小或移动窗口时,它会像这样绘制它的一部分(白色)。当我停止调整大小或移动时 - 一切正常。
我的问题是:是否有可能摆脱这种影响?
更新:
如果 WPF 窗口,我挂钩了 wndProc,并在大小更改时尝试使用 UpdateLayout(),但这没有效果。似乎窗口对任何干预都没有反应。
【问题讨论】:
-
发布一些相关代码,看看您是否在小型测试项目中重现错误。您的项目结构似乎并不清晰:您的 D3D 引擎渲染器是什么? WPF 与此有何关系,等等。
标签: wpf