DO大木 2024-09-24 15:33 采纳率: 0%
浏览 53

MFC date time picker控件通过代码设定其显示时间

可行的方法:
一种是添加CTime类型变量m_datetime_begin_ctime
给变量赋值 然后更新数据到控件
还有通过控件变量m_datetimepicker_begin的SetTime方法
SetTime有几个重载 参数是COleDateTime的重载可行

    //CTime类型变量
        m_datetime_begin_ctime = CTime(2024, 8, 28, 18, 0, 0);
    UpdateData(false);
        //SetTime
    COleDateTime oledtime;
    oledtime.ParseDateTime(_T("2024-08-28 17:18:44"));
    m_datetimepicker_begin.SetTime(oledtime);

问题:
为什么SetTime的另外一个参数是CTime的重载没有效果
还有SetWindowText也不行

  • 写回答

1条回答 默认 最新

  • 檀越@新空间 2024-09-24 15:34
    关注

    下午好🌅🌅🌅
    本答案参考ChatGPT-3.5

    您的代码中,SetTime方法中的重载参数是COleDateTime。由于CTime类型的字符串是不能直接被解析为日期和时间的,所以这个重载没有效果。

    要解决这个问题,您需要创建一个自定义的CTime类型,例如:

    class CustomTime {
    public:
        struct CDate {
            int year;
            int month;
            int day;
            int hour;
            int minute;
            int second;
        };
    
        CustomTime(int year, int month, int day, int hour, int minute, int second) : year(year), month(month), day(day), hour(hour), minute(minute), second(second) {}
    
        bool operator==(const CustomTime& other) const {
            return year == other.year && month == other.month && day == other.day &&
                   hour == other.hour && minute == other.minute && second == other.second;
        }
    
    private:
        int year;
        int month;
        int day;
        int hour;
        int minute;
        int second;
    };
    

    然后,您可以使用这个自定义的时间类型来替换oletime.ParseDateTime(_T("2024-08-28 17:18:44"));。以下是一个可能的实现:

    m_datetimepickerBegin.SetTime(CustomTime(2024, 8, 28, 18, 0, 0));
    

    这将使用自定义的时间类型来进行日期和时间的计算,并将其设置为控件的初始值。请注意,这仅适用于满足条件的情况。如果要在所有情况下都使用自定义的时间类型,请确保在程序的开始时正确地初始化它。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月24日