我想制作Per-Monitor DPI-Aware Direct2D应用程序。我已按照"First Direct2D Program"中的说明扩展了Microsoft Kenny Kerr's MSDN article示例来处理WM_DPICHANGED
。当两台显示器都使用一块显卡时,这种情况很有效,但在使用我的笔记本电脑的NVIDIA Optimus设置时会出现故障。
我可以通过以下步骤运行Per-Monitor Aware WPF Sample来重现同样的故障:
我在上面的示例应用程序中只看到了这个错误,当我尝试将Kerr的WM_DPICHANGED处理程序添加到一个更简单的示例时。可疑的是,我已经看到其他应用程序(Chrome,Visual Studio本身)显示类似的黑色窗口,但只是暂时的,如果我在显示器之间拖动并且非常快速地最大化它们。
那么 - 是否有人熟悉这个故障?是我的显示驱动程序中的一些错误?或者是否有其他应用程序要做的事情来纠正它,示例代码没有?
答案 0 :(得分:3)
你说NVIDIA Optimus?那些司机是犯罪的错误。尝试使用D2D1_PRESENT_OPTIONS_RETAIN_CONTENTS
标志初始化渲染目标。
在2014年我完成Paint.NET 4.0时,这让我永远想起了,我仍然在代码中发表评论警告我永远不要把它关掉:
private PresentOptions hwndPresentOptions =
PresentOptions.Immediately |
PresentOptions.RetainContents; // If we don't use RetainContents, then we get awful
// black flickering and mouse trails on some hardware
// (e.g. NVIDIA Optimus)