Die Antwort der Windows Product Group liegt bereits vor und es handelt sich um einen Fehler im Windows 10 Creators Update.
Das DateTime Picker Control wird durch Code in der Betriebssystem DLL COMCTL32.dll implementiert. Die COMCTL32.dll liegt in zwei Hauptversionen vor:
5.x für legacy, non-Unicode Anwendungen. Diese Version existiert aus Kompatibilitätsgründen, damit ältere Anwendungen auf neuen Betriebssystemen funktionieren (sollten).
6.x, neuere, bessere, empfohlene Version für Unicode Anwendungen.
Anbei der Original Wortlaut der Rückmeldung der Windows 10 Produkt Gruppe zu diesem Fall:
“This only occurs in applications that use the Date Time Picker implemented on COMCTL32 V5.
Any application using the COMCTL32 V5 Date Time Picker on RS2 will encounter this problem, including MFC and Windows Forms applications.
Unfortunately, there is currently no workaround for the issue when using the COMCTL32 V5 Date Time Picker other than removing the RS2 update, if possible.
Affected applications could be updated to use COMCTL32 V6, but this is not a trivial change due to the differences in the control implementations between V5 and V6.”
D.h. die aktuell einzige Lösung wäre die MFC Anwendung (zumindest teilweise) auf UNICODE und damit auf die
COMCTL32 V6 umzustellen.
Die Verwendung der COMCTL32 V6 passiert über die Projekteinstellung UNICODE Characterset und dadurch über ein Manifest (RT_MANIFEST Resource), die dem Lader mitteilt, die neue Version 6 der COMCTL32.dll zu verwenden.
Egal, ob eine MFC Anwendung für UNICODE erzeugt wird, ist es möglich UNICODE und ANSI Strings zu verwenden (und auch UNICODE und nicht UNICODE Controls können innerhalb einer Anwendung, innerhalb eines Dialog Fensters verwendet werden)
Die Definition von _UNICODE bewirkt (lediglich), dass UNICODE zum Default Zeichenformat wird.
Unicode Programming Summary
https://msdn.microsoft.com/en-us/library/dybsewaf.aspx?f=255&MSPPError=-2147217396
Falls notwendig, können Sie das #define _UNICODE in Ihren C/C++ Sourcen durch ein #undef _UNICODE Rückgängig machen.
#undef Directive (C/C++)
https://msdn.microsoft.com/en-us/library/ts4w8783.aspx
Eventuell können Sie Ihren Code, der das DateTime Picker Control verwendet in eine eigene MFC Regular Unicode DLL auslagern, um so das Problem schnell mit minimalen Konvertierungsaufwand zu umgehen. Eine MFC Regular DLL kann / wird mit einer eigenen
MFC DLL verwendet, was dann Ihrem Fall die Unicode Version der MFC DLL ist.
Diese MFC UNICODE Regular DLL könnte dann in der Zukunft nach und nach weiteren GUI Code Ihrer Anwendung übernehmen und somit eine sukzessive Konvertierung ermöglichen.
UNICODE ist das native Zeichenformat für alle modernen, derzeit supporteten Microsoft Betriebssysteme. D.h. für die meisten Betriebssystem Funktionen, die Parameter vom Typ String haben, wird in der nicht UNICODE Variante der ANSI String Parameter
intern nach UNICODE konvertiert. Dasselbe gilt für Rückgabeparameter. D.h. die Verwendung von UNICODE bring in aller Regel (geringe) Performance Vorteile und vor allem eine Vereinfachung der Anpassungsmöglichkeit der Anwendung für andere Länder und Sprachen.
Nur für den unwahrscheinlichen Fall, dass Sie noch Windows 95 / 98 unterstützen müssen, macht eine nicht UNICODE MFC Anwendung heutzutage noch Sinn.
Die Windows 10 Produkt Gruppe versucht aktuell diesen Fehler zu beseitigen. Leider liegt noch keine Aussage vor wann und mit welchem Update dies geschehen wird.