CDateTimeCtrl 在 Windows 10 RS2(内部版本 1703)上不显示时间
Posted
技术标签:
【中文标题】CDateTimeCtrl 在 Windows 10 RS2(内部版本 1703)上不显示时间【英文标题】:CDateTimeCtrl does not display time on Windows 10 RS2 (Build 1703) 【发布时间】:2017-02-24 06:39:38 【问题描述】:我在 MFC 中创建了一个对话框,并使用CDateTimeCtrl
显示/设置时间。直到 Windows 10 Build 10240 显示正确的时间,但是一旦您进行了 Windows 的最新更新,CDateTimeCtrl
将显示空白值。
使用的字体是“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);
【问题讨论】:
即使这对你自己来说是显而易见的,但对我来说却不是:你的问题是什么? 我的问题是为什么 CDateTimeCtr 在 Windows 10 RS2 上显示空白值,即使时间已设置。 Windows 10 不支持字体“MS Shell Dlg”还是有其他原因? 据我所知,支持 @Mrunal MS Shell Dlg 。它实际上是一种字体映射到另一种字体。 Windows 10 上的日期时间控制功能。您是否考虑过提供更多信息,例如屏幕截图和相应的代码?想想你可能需要什么来回答某人的问题。 :) 在上述代码中,如果字体未设置为 CDateTimeCtrl,则时间会正确显示在控件中,但如果设置了字体,则 CDateTimeCtrl 不会显示任何内容。有办法解决这个问题吗? 【参考方案1】:啊,我在 CodeProject 看到了这个,我现在看到的代码可能是我怀疑的那样。
CFont 字体变量;必须在 CDateTimeCtrl m_DateTimeCtrl 的生命周期 >> 从代码中并不清楚这是真的。
CFont 字体变量;在您创建 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);
【讨论】:
KB4022725(2017 年 6 月 13 日)似乎解决了这个问题 -- support.microsoft.com/en-us/help/4022725/…。以上是关于CDateTimeCtrl 在 Windows 10 RS2(内部版本 1703)上不显示时间的主要内容,如果未能解决你的问题,请参考以下文章
MFC 把CString格式的时间添加到时间控件(CDateTimeCtrl)中去
MFC:你能在 CDateTimeCtrl 中改变旋转的加速度吗?