VC++ ATL 中,将字符串时间赋值给时间控件(如 CDateTimeCtrl)
在 VC++ ATL 中,将字符串时间赋值给时间控件(如 CDateTimeCtrl)需要以下步骤: 1. 字符串解析为时间结构首先需要将字符串转换为 COleDateTime 或 SYSTEMTIME 结构。假设时间字符串格式为 "HH:mm:ss"(仅时间部分): - // 解析时间字符串(格式:"14:30:00")
- BOOL ParseTimeString(LPCTSTR lpszTime, SYSTEMTIME& st)
- {
- ZeroMemory(&st, sizeof(SYSTEMTIME));
- return swscanf_s(lpszTime, _T("%hu:%hu:%hu"),
- &st.wHour, &st.wMinute, &st.wSecond) == 3;
- }
复制代码 2. 设置时间控件值通过 CDateTimeCtrl::SetTime() 方法赋值
- // 假设 m_TimeCtrl 是绑定的 CDateTimeCtrl 成员变量
- CString strTime = _T("14:30:00"); // 示例时间字符串
- SYSTEMTIME st = {0};
- if(ParseTimeString(strTime, st)) {
- m_TimeCtrl.SetTime(&st); // 设置时间值:ml-citation{ref="1" data="citationList"}
- } else {
- ATLTRACE(_T("时间格式无效\n"));
- }
复制代码 3. 完整示例代码
TimeControlDemo.cpp
- // 对话框类声明
- class CTimeDialog : public CDialogImpl<CTimeDialog> {
- public:
- CDateTimeCtrl m_TimeCtrl;
-
- BEGIN_MSG_MAP(CTimeDialog)
- MSG_WM_INITDIALOG(OnInitDialog)
- COMMAND_ID_HANDLER(IDC_BUTTON_SET, OnSetTime)
- END_MSG_MAP()
- LRESULT OnInitDialog(...) {
- m_TimeCtrl.SubclassWindow(GetDlgItem(IDC_DATETIMEPICKER1));
- m_TimeCtrl.SetFormat(_T("HH':'mm':'ss")); // 设置仅显示时间^3^
- return TRUE;
- }
- LRESULT OnSetTime(...) {
- CString strTime;
- GetDlgItemText(IDC_EDIT_TIME, strTime);
-
- SYSTEMTIME st = {0};
- if(ParseTimeString(strTime, st)) {
- m_TimeCtrl.SetTime(&st);
- } else {
- MessageBox(_T("请输入HH:mm:ss格式的时间"));
- }
- return 0;
- }
- };
复制代码此代码演示了如何从编辑框获取时间字符串并设置到时间控件。 关键注意事项- 格式一致性:字符串必须与控件显示格式匹配(如24小时制需用HH而非hh)
- 错误处理:需验证字符串是否为有效时间(如小时≤23,分钟≤59等)
- 线程安全:时间控件操作必须在主线程执行
<noteList>扩展方案若需处理包含日期的时间字符串(如"2025-07-03 14:30:00"),可使用 COleDateTime: arseDateTime() 方法
- COleDateTime dt;
- if(dt.ParseDateTime(_T("2025-07-03 14:30:00"))) {
- m_DateTimeCtrl.SetTime(dt); // 同时设置日期和时间
- }
复制代码
|