0

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

我正在研究一个我们有一些TDateTimePicker控制的领域。dtp 本身工作正常,但由于我目前正在处理的本地化问题,我希望删除选择器底部的“今天”按钮,该按钮允许用户单击它以自动选择今天的日期。

另一种方法是从底部删除格式化的日期字符串,使其显示“今天”而不是“今天 MM/DD/YYYY”。

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

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

4

1 回答 1

1

要删除“今天”文本,您必须MCS_NOTODAY在 DTP 的子月历上启用窗口样式。自 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);
于 2016-07-26T15:57:17.390 回答