如何在TDateTimePicker中隐藏“今天”按钮?

时间:2016-07-26 14:51:34

标签: c++ windows-xp datetimepicker legacy c++builder-5

我目前正在研究用C ++ Builder 5构建的遗留程序。

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

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

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

编辑:我在VM中使用Windows XP进行此项目。

1 个答案:

答案 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);