|
VC++ ATL 项目中操作时间控件(如 DateTimePicker)
在 VC++ ATL 项目中操作时间控件(如 DateTimePicker),可以通过以下方法实现:
1. 使用 Win32 API 直接操作(纯 ATL 方案)
若项目未引入 MFC,可通过 Windows API 创建和操作时间控件:
// 创建时间控件
HWND hDT = CreateWindowEx(0, DATETIMEPICK_CLASS, L"",
WS_CHILD | WS_VISIBLE | DTS_SHORTDATEFORMAT,
10, 10, 200, 30, hParentWnd, (HMENU)IDC_DATETIMEPICKER,
_Module.GetModuleInstance(), NULL);
// 设置时间值
SYSTEMTIME st = {2025, 7, 0, 4, 15, 30, 0, 0}; // 2025-07-04 15:30:00
DateTime_SetSystemTime(hDT, GDT_VALID, &st);
此方法需包含头文件 <commctrl.h> 并链接 comctl32.lib 库。
<noteList>
2. 时间字符串解析与赋值
若需将字符串时间(如 "15:30:00")赋给控件:
BOOL ParseTimeToSysTime(LPCTSTR szTime, SYSTEMTIME& st) {
ZeroMemory(&st, sizeof(SYSTEMTIME));
#if defined(UNICODE)
return swscanf_s(szTime, L"%hu:%hu:%hu", &st.wHour, &st.wMinute, &st.wSecond) == 3;
#else
return sscanf_s(szTime, "%hu:%hu:%hu", &st.wHour, &st.wMinute, &st.wSecond) == 3;
#endif
}
// 使用示例
SYSTEMTIME st;
if (ParseTimeToSysTime(L"15:30:00", st)) {
DateTime_SetSystemTime(hDT, GDT_VALID, &st);
}
此代码兼容 ANSI/Unicode 环境,支持 HH:mm:ss 格式的时间字符串。
3. 扩展功能
格式设置:通过 DTM_SETFORMAT 消息自定义显示格式(如仅显示时间):
DateTime_SetFormat(hDT, L"HH':'mm':'ss");
时间范围限制:使用 DTM_SETRANGE 消息设置可选时间范围。
注意事项
线程安全:所有控件操作需在主 UI 线程执行
初始化:确保调用 InitCommonControls() 初始化通用控件库
错误处理:检查 DateTime_SetSystemTime 返回值确认操作是否成功
|
|