如何用WIn32 API同步系统时间

bill_chuang 2010-10-08 11:12:51
我想设计一个计时器,使它能够与系统时间同步,Charles Petzold那本书上介绍计时器那章时使用定时器来实现,最后提到了用WM_TIMECHANGE会更好,但是我的程序根本就捕获不到WM_TIMECHANGE消息,我的本来理解是系统时钟每过一秒应该会发送一个WM_TIMECHANGE消息的,网上说是要系统时间设置改变时才会发送该消息,我不太明白,我的代码如下:

case WM_TIMECHANGE:
{
SYSTEMTIME stime;
GetLocalTime(&stime);
wsprintf(szBuffer,"%4d年%2d月%2d日\n%2d:%2d:%2d,星期%3d",
stime.wYear,stime.wMonth,stime.wDay,
stime.wHour,stime.wMinute,stime.wSecond,
stime.wDayOfWeek);
hdc = GetDC(hWnd);
TextOut(hdc,0,0,szBuffer,lstrlen(szBuffer));
ReleaseDC(hWnd,hdc);
SendMessage(hWnd,WM_PAINT,wParam,lParam);
}

所以请教高手指点如何解决该时间同步问题
...全文
262 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wltg2001 2010-10-09
  • 打赏
  • 举报
回复
就你的目的而言,你可以用定时器来处理,WM_TIMECHANGE消息当然也要处理,因为当系统时间变化时,你的程序不致于出现问题。
wltg2001 2010-10-09
  • 打赏
  • 举报
回复
我的本来理解是系统时钟每过一秒应该会发送一个WM_TIMECHANGE消息的,网上说是要系统时间设置改变时才会发送该消息,我不太明白,我的代码如下:
=================
理解出错,WM_TIMECHANGE是当修改系统时间时才会触发的,并不是每过一秒就会触发。如果系统时间不被修改,这个消息不会触发的。
visualwind 2010-10-09
  • 打赏
  • 举报
回复
"网上说是要系统时间设置改变时才会发送该消息" 就是说比如设置时间的时候会发送这个消息。可以在这个消息响应里面校正系统时间,使其不被错误修改。
zgl7903 2010-10-09
  • 打赏
  • 举报
回复
使用定时器即可,SetTimer定短一点 保证每秒钟有个5到10次刷新,人眼就感觉不出来快慢了

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧