我目前正在研究用C ++ Builder 5构建的遗留程序。
我正在开发一个我们有一些TDateTimePicker
控件的区域。 dtp本身工作正常,但由于我目前正在处理的本地化问题,我希望删除选择器底部的“今天”按钮,让用户点击它以自动选择今天的日期。
另一种方法是从底部删除格式化的日期字符串,使其显示“今天”而不是“今日MM / DD / YYYY”。
我找到了一些解决方案,允许在其他语言中格式化Today文本,但是C ++没有。我尝试过使用一些内置函数,比如高度和文本,但都没有成功。我通常不是那个在这段代码中工作的人,所以我可能希望错过一些简单的东西。
编辑:我在VM中使用Windows XP进行此项目。
答案 0 :(得分:1)
要删除“今天”文本,您必须在DTP的子月历上启用MCS_NOTODAY
窗口样式。自Internet Explorer 3以来,该样式已经可用。
在TDateTimePicker::OnDropDown
事件中,您可以使用DateTime_GetMonthCal()
获取月份日历的HWND
,然后使用SetWindowLong/Ptr(GWL_STYLE)
启用MCS_NOTODAY
样式。
#include <commctrl.h>
void __fastcall TMyForm::DateTimePicker1DropDown(TObject *Sender)
{
HWND hCalendar = DateTime_GetMonthCal(DateTimePicker1->Handle);
LONG_PTR style = GetWindowLongPtr(hCalendar, GWL_STYLE);
SetWindowLongPtr(hCalendar, GWL_STYLE, style | MCS_NOTODAY);
}
在Vista及更高版本中,您也可以使用DateTime_SetMonthCalStyle()
启用MCS_NOTODAY
样式。
DWORD style = DateTime_GetMonthCalStyle(DateTimePicker1->Handle);
DateTime_SetMonthCalStyle(DateTimePicker1->Handle, style | MCS_NOTODAY);