本次设计中将会使电脑的系统时间显示到窗口,主要是用于FTP中与定时上传时间做对比。使用者设置上传时间,当本地时间到达时间时,触发函数,将文件进行上传。
显示时间之前需要了解消息响应。在MFC中可以自己设定消息,当触发时自动处理。本次设计中用到了定时器,SetTimer,该函数是CWnd类中的定时器,参数有三个,比如SetTimer(1,1000,NULL);前面的1代表的是定时器的标号,可以同时定义好几个定时器,不同的定时器就对应不同的标号。第二个参数是说每1000毫秒触发一次消息,向消息响应函数发送消息让其处理,这时就涉及到另一个函数,消息响应函数,OnTimer,它是重载的CWnd中的函数,跟SetTimer相对应,每当定时器触发一次,它就会执行一次,这个函数不能自己定义,需要在类向导中的消息中找到WM_TIMER消息,对其添加消息处理,这样就建立了一个消息映射机制,包括消息申明,消息映射,和消息实现,咱么前两个在对WM_TIMER添加消息处理函数后,就已经被设置好。这个函数的形参就对应着上面定时器的标号,在OnTime函数中用一个switch语句就可以对不同的定时器进行操作处理。然后就是对响应函数处理,用到的类是MFC的CTime类,它里面有关于时间的一些处理,可以在MSDN中查看,本例用的显示年月日时分秒,每1s刷新一次,使用的控件是Static那种静态的,然后将其ID改为ID_TIMER,在显示的时候将其与时间变来那个绑定即可显示。获取时间是使用的CTime类中的GetCurrentTime()函数,他是windows中获取时间函数GetTickCount()的预定义,其实是同一个函数,第一次见到这个函数是在编程之美的第一章,获取规定使用百分比的CPU。这个函数获取的是系统开始启动到调用这个函数时经过的毫秒数,其返回值类型为DWORD,调用这个函数两次并相减,就可以获取任何一段程序执行的毫秒数,当然时间只能精确到毫秒单位。
用GetCurrentTime()获取时间后需要将其转化为想要的显示格式,用Format进行显示处理,
CTime t=CTime::GetCurrentTime();