【问题标题】:How to hide the "Today" button in TDateTimePicker?如何隐藏 TDateTimePicker 中的“今天”按钮?
【发布时间】:2016-11-30 07:10:35
【问题描述】:

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

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

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

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

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

【问题讨论】:

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


    【解决方案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);
    

    【讨论】:

    • 这在 XP 中有效吗?该链接列出了 Vista/2008 的最低要求。能举个例子吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    • 2012-02-07
    相关资源
    最近更新 更多