none
CreatorsUpdate後、MFCアプリのDateTimePicker表示が崩れる。

    質問

  • CreatorsUpdate適用後のWin10上にて、MFC(C++)で作成した既存アプリケーションのDateTimePickerコントロール部分の表示が以下のように崩れます。以下では正しくは「2017/04/13」と表示されます。


    既存アプリを作成したVSバージョンは2010と2005で、どちらででも再現します。

    この現象について、原因や回避、解消方法など何らか情報をいただければと思います。
    なお、回避、解消方法については、既存アプリケーションにも適用したいため、プログラム修正での対応はできません。

    また、以下の手順にて、再現アプリケーションを作成できました。

     - VS2010にて「MFC アプリケーション」のプロジェクトを作成する。下記以外はデフォルトの設定。
     - 「アプリケーションの種類」は「ダイアログベース」に。
     - 「Unicodeライブラリを使用する」は「OFF」に。
     -  ダイアログ上に「Date Time Picker」を配置しビルドし実行。

    なお、VS2015でも文字セットを「マルチバイト~」にして新規作成したアプリでも再現しました。

    また、構成プロパティ→全般→文字セットが「Unicode~」の場合は正常に表示されました。

    ■環境など

    実行環境のOSバージョンは 1703(OSビルド 15063.138)です。

    また、VS2010のバージョンは、10.0.40219.1 SP1Rel, Microsoft .NET Framework Version 4.7.02046 SP1Rel です。

    ■補足

    以下のとおり、海外でも同様の現象が確認できているようです。

    Date Time Picker mit dem Windows 10 Creators Update (NOT UNICODE)



    • 編集済み tid-cs 2017年4月14日 1:36 誤字の修正
    2017年4月13日 9:52

回答

  • 既に指摘のあることですが、元の問題は古い CommonControl の不具合ですね。Unicode でもそのマニフェストを切ると再現するので。

    なお、.NET の案件は別物と考えた方がよいですよ。このスレッドで問題提起された日付選択コントロールの不具合は起きないためです。

    (別実装と考えた方がよいですし、件のスレッドでは DPI 関連のマニフェストを変えても影響しなかったように読めるため)

    回避策待ちするのではなく、直ちに MS サポートに投げた方がよいと思います。XP ビジュアルスタイルが適用できていない古いアプリケーションは少なくなってきているので情報も集まりづらいと思われることと、リクエストしてから実際に修正されるまで時間がかかるためです。


    2017年4月14日 3:38
    モデレータ

すべての返信

  • なお、回避、解消方法については、既存アプリケーションにも適用したいため、プログラム修正での対応はできません。

    そうであれば、有償サポートに問い合わせて修正プログラムをリクエストするのが一番かと思います。

    (長期的には MBCS をやめて、Unicode に移行しないと今後も食らう可能性はあるかと思います)
    2017年4月13日 13:07
    モデレータ
  • Azulean様、回答ありがとうございます。

    現時点での回避策を探しておりますが、回避策がないようであれば

    最終的にはマイクロソフト 技術サポートへの問い合わせも検討したいと思います。


    • 編集済み tid-cs 2017年4月14日 2:12 宛先を追記
    2017年4月14日 1:24
  • リリース前のInsider Previewの段階で同様の評価を行っていれば簡単に見つけられた問題で、その場合、Microsoft社へ報告していればリリースまでには修正されていたかもしれない、とは思います…。

    なお、MFCについてはMBCS版の維持継続が表明されています。ただし、今回はMFCではなくWindows ControlsのDate and Time Picker側の問題のようですので、MFCのサポート状況はあまり関係ないかもしれません。

    # 手元のVS2017でも再現しました。

    2017年4月14日 2:01
  • 佐祐理 様、回答ありがとうございます。

    リリース前のInsider Previewの段階で同様の評価を行っていれば簡単に見つけられた問題で、その場合、Microsoft社へ報告していればリリースまでには修正されていたかもしれない、とは思います…。

    おっしゃるとおりです。Preview時点で見落としていました。。。

    なお、以下のように.NETアプリケーションでも再現するようです。

    .Net 4.6 Winforms DateTimePicker garbled after Windows 10 Creators Update

    佐祐理様の指摘通り、MFCというよりコモンコントロール自体に原因がありそうですし、MBCSもあまり関係ないかもしれません。

    また、詳細は読めていませんが、上記の回答にて、以下のブログに示すHigh-DPI動作の変更が影響している可能性が記されています。

    High-DPI Scaling Improvements for Desktop Applications in the Windows 10 Creators Update

    よって、High-DPI設定の方向でも引き続き調査したいと思います。


    • 編集済み tid-cs 2017年4月14日 2:23 コントロールについて追記
    2017年4月14日 2:20
  • 既に指摘のあることですが、元の問題は古い CommonControl の不具合ですね。Unicode でもそのマニフェストを切ると再現するので。

    なお、.NET の案件は別物と考えた方がよいですよ。このスレッドで問題提起された日付選択コントロールの不具合は起きないためです。

    (別実装と考えた方がよいですし、件のスレッドでは DPI 関連のマニフェストを変えても影響しなかったように読めるため)

    回避策待ちするのではなく、直ちに MS サポートに投げた方がよいと思います。XP ビジュアルスタイルが適用できていない古いアプリケーションは少なくなってきているので情報も集まりづらいと思われることと、リクエストしてから実際に修正されるまで時間がかかるためです。


    2017年4月14日 3:38
    モデレータ
  • (別実装と考えた方がよいですし、件のスレッドでは DPI 関連のマニフェストを変えても影響しなかったように読めるため)

    exe動作に加え、提示情報の内容確認までありがとうございます。 たしかに最後のコメントでそのように書かれていますね。

    こちらでも再現exeのプロパティにて「互換モード」や「設定」にて高DPI動作を変更してみましたが、改善しませんでした。(むしろ「互換モード」を7以下にするとさらに崩れる)

    以上より、.NETでの現象(高DPI)については、本件との関連性は低いと考えました。

    また、Unicode/MBCSビルドの違いにより、ロードされるコモンコントロールのバージョンが 6.0/5.82 と異なる点が確認できました。

    そこで、今後リリースするソフトだけでも少ないプログラム修正で対応できないかと考え、XPでビジュアルスタイルが適応されないを参考にMBCS+コモンコントロール6.0でexe作成したところ、表示崩れはなくなりました。

    しかし上記のスレッドで指摘されているように、結論としてはMBCS+6.0ビルドの対応はとれません(他の部分で正常に動作しない可能性が高い)。

    以上より、Azulean様のアドバイスに従い、早めにサポートに問い合わせする方向で進めたいと思います。

    回答いただいた佐祐理様、Azulean様、ありがとうございました。

    2017年4月14日 6:35
  • 一つ訂正です。

    .NET の Windows Forms も Application.EnableVisualStyles を呼び出さない形でサンプルを作った際に再現することを確認しました。
    ただ、x86/x64 で症状の出方が違いましたが…。
    (ShowUpDown プロパティが True/False と x86/x64 の組み合わせによる。x64 の場合はどちらであってもダメ…)

    どちらにせよ、DPI によらず起きる問題からコモンコントロールの実装が何らかの事情で悪化してしまったのだと思います。
    プログラムを修正せずに何とかするとなると、コモンコントロールが修正されることだと思います。

    なお、今はどうか検証していませんが、過去に MBCS で XP ビジュアルスタイルを組みわせた場合、IME の再変換でバグっていた経験もあることと、MBCS ではデフォルト無効になるプロジェクトテンプレートが生成されることから、MBCS で XP ビジュアルスタイルを組みわせることは、あまりよくない選択なのでは?と思っています。

    2017年4月15日 4:01
    モデレータ
  • こちらのVS2015 C#(Windows Forms)でもEnableVisualStyleコメントアウトにて同様に再現できました。

    こちらの環境でも、常に同じ崩れ方をするのではないようです(なんだかメモリ状態によるような印象)

    C++での文字セットに関係なく、古いコモンコントロール5.8x(といってもCommon Control Versions見る限りサポート内ですが)に問題があるような感じがします。

    いずれにせよMSサポートに問い合わせない限り、原因ははっきり分かりませんが。

    追試ありがとうございました。

    2017年4月17日 5:13