SourceChord

C#とXAML好きなプログラマの備忘録。最近はWPF系の話題が中心です。

Windows10 1903 insider previewでアクリル化のAPIがおかしい・・・

ちょっと前に、以下のようなIssueをもらったので、見ていました。

近々リリースされる予定のWindows10 1903環境で、FluentWPFのAcrylicWindowの動作がおかしいとのこと。
ウィンドウをドラッグすると、UIの応答が非常に悪くなり、ウィンドウの移動がマウス操作に追従しなくなるようです。

Hyper-V環境で試してみても、報告されてる現象はどうにもうまく再現しなかったので、
自分のサブPCをWin10 1903 Release Previewに更新して試してみたところ、Issueに書かれてた現象が再現できました。

以下のようなウィンドウドラッグ操作時にUI描画が非常に遅くなります。

f:id:minami_SC:20190517235308g:plain

  • マウスカーソルがウィンドウに追従してるんでGifアニメでは問題なく感じるかもしれませんが、実際は手元のマウス操作からワンテンポずれて移動してます
  • このドラッグ操作中、UI描画全体が遅くなっている感じで、Gifアニメ用の動画キャプチャもフレームが飛び飛びになりました・・・

Hyper-V環境のような、半透明効果が正しく適用されない環境では再現しない不具合だったようです。

原因?

FluentWPFでは、ウィンドウにアクリルな半透明化処理を加えるために、SetWindowCompositionAttributeというWin32の非公開APIを使用しています。
このAPIが、Windows10 1903ではどうやらうまく動いていないようです。
また、OS標準の絵文字ツールバーですが、こちらも同様にウィンドウをドラッグで移動すると、極端に応答が悪くなる現象が発生しています。
f:id:minami_SC:20190517235334g:plain

で、色々調べてみると、以下のリポジトリでも同様の問題が報告されてました。
Lag when moving window (draging window with mouse) in Windows10 1903 · Issue #2 · riverar/sample-win32-acrylicblur · GitHub

FeedbackHubにも、この現象の報告が上がってました。

https://aka.ms/AA4pzyf
https://aka.ms/AA4fmz7

現状はここに賛成票を送っておいて、修正されることを祈るしかないかなぁ。
ちょっと、どうしたもんか。。。

ちなみにSetWindowCompositionAttributeAPIで、AccentState.ACCENT_ENABLE_ACRYLICBLURBEHINDを使用すると前述のような不具合が出るのですが、ACCENT_ENABLE_BLURBEHINDを使うと今のところスムーズに表示されるっぽい。
このまま修正されずにWin10 1903がローンチされてしまったら、当面は1903環境ではACCENT_ENABLE_BLURBEHIND指定でのUI表示をするように対処するしかないかな。