如何隐藏TDateTimePicker中的"Today"按钮?

How to hide the "Today" button in TDateTimePicker?

我目前正在开发一个用 C++Builder 5 构建的遗留程序。

我正在处理我们有几个 TDateTimePicker 控件的区域。 dtp 本身工作正常,但由于我目前正在处理的本地化问题,我希望删除选择器底部的 "Today" 按钮,让用户点击它自动 select今天的日期。

另一种方法是从底部删除格式化的日期字符串,这样它就显示 "Today" 而不是 "Today MM/DD/YYYY"。

我找到了一些允许使用其他语言格式化 Today 文本的解决方案,但 none 适用于 C++。我曾尝试使用一些内置函数,例如高度和文本,但都没有成功。我通常不是使用此代码的人,所以我可能希望遗漏一些简单的东西。

编辑:我在这个项目的 VM 中使用 Windows XP。

要删除 "Today" 文本,您必须在 DTP 的子月日历上启用 MCS_NOTODAY window 样式。该样式从 Internet Explorer 3 开始可用。

TDateTimePicker::OnDropDown事件中,可以使用DateTime_GetMonthCal() to get the HWND of the month calendar and then use 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);