Per-Monitor DPI-Aware Direct2Dアプリケーションを作成したいと思います。 Microsoftの"First Direct2D Program"の例をWM_DPICHANGED
のように扱い、Kenny Kerr's MSDN articleで説明したように拡張しました。これは、両方のモニターが1つのビデオカードを使用しているときに動作しますが、ラップトップのNVIDIA Optimusセットアップを使用しているときに不具合が発生します。Per-monitor DPI-Aware:NVIDIA Optimusでの黒いウィンドウグリッチ
私はこれらのステップとPer-Monitor Aware WPF Sampleを実行することで、同じ不具合を再現することができます。各モニターに倍率
- 異なるDPI。
- Optimusが有効になっている(内蔵グラフィックスのラップトップディスプレイ、Quadroカードの外部モニタ)
- アプリケーションはプライマリディスプレイ(右の外部モニタ)から起動します。
- これを左にドラッグすると、DPIの変更が適切に処理されます。
- 右にドラッグします。 DPIの変更を処理すると、右側のモニタのウィンドウの一部が黒くなります。左の部分はまだ適切に描かれています。
(video of this bugを参照)
私は上記の例のアプリでこのバグを見ている、と私はシンプルな例にカーのWM_DPICHANGEDハンドラを追加しようとします。疑わしいことに、私はにがあります。他のアプリ(Chrome、Visual Studio自体)にも同様の黒いウィンドウが表示されますが、モニター間をドラッグしてすばやく最大化すれば、一時的にしか表示されません。
だから誰もこのグリッチに精通していますか?ディスプレイドライバのバグですか?あるいは、他のアプリがそれを修正するために何かしていますが、サンプルコードはそうではありませんか?
ドライバのバグに備えて、ディスプレイドライバのアップデートを試しましたか? –
はい、私はNvidiaのドライバ354.42と最新の368.39を試しました。しかし、(あなたの潜在的な将来の質問を予期する)私は、私が保存した最も古いバージョン、332.21を試して、驚き - 不具合はありません。 (その古いドライバはWindows 10よりもずっと前からそうだと率直に言って、それはまったくうまくいっていない)。 – Lack
NVIDIAは、「アプリケーションをドラッグすると、なぜ「アーティファクトや黒い画面が表示されるのですか」(https ://nvidia.custhelp.com/app/answers/detail/a_id/2757)。これは、「アプリケーションは、中断することなく移行するためにディスプレイアダプタの変更を適切に処理する必要があります」と述べています。私はもっと混乱しています。アプリが常に*明示的にアダプターを処理しなければならないのは簡単でしょうが、グリッドは特定のドライバーバージョンでのみ発生し、DPI変更のサイズを変更しようとするときにのみ発生します。 – Lack