2017-02-24 51 views
2

我在MFC中创建了一个对话框,并使用CDateTimeCtrl来显示/设置时间。直到Windows 10 Build 10240它显示正确的时间,但一旦你采取Windows的最新更新,CDateTimeCtrl显示空白值。CDateTimeCtrl在Windows 10 RS2(内部版本1703)上不显示时间

使用的字体是“MS Shell Dlg”。

我的问题是为什么CDateTimeCtrl在Windows 10 RS2(Build 1703)上显示空白值,尽管设置了时间。 Windows 10不支持字体“MS Shell Dlg”还是有其他原因?

以下是代码:

SYSTEMTIME systime; 
long lStyle; 
CFont Fontvar; 
CDateTimeCtrl m_DateTimeCtrl 

GetLocalTime(&systime); 

lStyle = ::GetWindowLong(m_DateTimeCtrl.m_hWnd, GWL_STYLE); 

lStyle |= DTS_TIMEFORMAT; 

::SetWindowLong(m_DateTimeCtrl.m_hWnd, GWL_STYLE, lStyle); 

Fontvar.CreatePointFont(10, _T("MS Shell Dlg")); 

m_DateTimeCtrl.SetFont(&Fontvar); 

m_DateTimeCtrl.SetFormat(_T("HH:mm:ss")); 

m_DateTimeCtrl.SetTime(&systime); 
+0

即使这看起来对你自己很明显,它不是对我来说的:你的问题是什么? – IInspectable

+0

我的问题是为什么CDateTimeCtr在Windows 10 RS2上显示空白值,即使设置了时间。 Windows 10不支持字体“MS Shell Dlg”还是有其他原因? – Mrunal

+0

@Mrunal **据我所知,支持MS Shell Dlg **。它实际上是一种字体映射到另一种字体。 Windows 10上的日期时间控制功能。您是否考虑过提供更多信息,如屏幕截图和适当的代码?想想你为了回答某人的问题可能需要什么。 :) –

回答

0

啊我看到这个在CodeProject,并因为它可能是因为我怀疑现在看到的代码。

CFont Fontvar;必须保持有效>>>终身< < <的CDateTimeCtrl m_DateTimeCtrl它是不清楚的代码是真实的。

CFont Fontvar;在创建m_DateTimeCtrl时有效,但我们不知道该代码是否在某个函数中,因此CFont Fontvar;在本地堆栈上即将消失。

删除该字体也是你的责任。

更新:好吧,我收回他们确实打破了MFC。你不能使用任何字体的CDateTimeCtrl上的setfont而不仅仅是那个。唯一的解决方案是绕过MFC并直接使用Windows API。

LOGFONT lf; 
// clear out structure 
memset(&lf, 0, sizeof(LOGFONT)); 
// request a 12-pixel-height font 
lf.lfHeight = 12; 
// request a face name "MS Shell Dlg" 
_tcsncpy_s(lf.lfFaceName, LF_FACESIZE, _T("MS Shell Dlg"), _tcslen(_T("MS Shell Dlg"))); 
// create the font 
HFONT hfont = ::CreateFontIndirect(&lf); 

// Send the WM_SETFONT message to the date time control 
m_dateTimeCtrl.SendMessage(WM_SETFONT, (WPARAM)hfont, 1); 
+0

看起来像KB4022725(2017年6月13日)解决了此问题 - https://support.microsoft.com/en-us/help/4022725/windows-10-update-kb4022725。 – evanjs

相关问题