MFC之“数字时钟制作”笔记(一)
来源:互联网 发布:ubuntu登录界面root 编辑:程序博客网 时间:2024/05/16 15:58
替换原始图标:
左键Icon ——引入,图标属性——该类型——选对应图像
VC6.0中MFC遇到:Cannot open precompiled header file:" ... .pch":No such file or directory.
解决办法:工程——设置——C/C++——分类:预编译的头文件——自动使用预补偿页眉。
如果遇到很多无法查找的未知错误,如:点击错误时进入与所编代码无关的文件时可以尝试删除Debug中的文件重新编译。
SetTimer的用法:
在MFC程序中SetTimer被封装在CWnd类中,调用就不用指定窗口句柄了。
SetTimer函数的原型为:
UINT SetTimer(
UINT nIDEvent,
UINT nElapse,
void(CALLBACK EXPORT *lpfnTimer)(HWND,UINT ,YINT ,DWORD)
)
当使用SetTimer函数的时候,就会生成一个计时器。函数中nIDEvent指的是计时器的标识 ,也就是名字。nElapse指的是时间间隔 ,也就是每隔多长时间触发一次事件。第三个参数是一个回调函数 ,在这个函数里,放入你想要做的事情的代码,你可以将它设定为NULL,也就是使用系统默认的回调函数,系统默认认的是OnTimer函数。
这个函数怎么生成的呢?你需要在需要计时器的类中生成OnTimer函数:在ClassWizard里,选择需要计时器的类,添加WM_TIMER消息映射,就自动生成OnTimer函数了 。然后在函数里添加代码,让代码实现功能。每隔一段时间就会自动执行一次。
例:
SetTimer(1,1000,NULL);
1:计时器的标识;
1000:时间间隔,单位是毫秒;
NULL:使用OnTimer函数。
当不需要计时器的时候调用KillTimer(nIDEvent);
例如:KillTimer(1);
1.2 调用回调函数
此方法首先写一个如下格式的回调函数(在SetTimer函数表示回调函数TIMERPROC不为空时,需要调用自定义的回调函数)
void CALLBACK TimerProc(
HWND hWnd,
UINT uMsg,
UINT idEvent,
DWORD dwTime
);
然后再用SetTimer(1,100,TimerProc)函数来建一个定时器,第三个参数就是回调函数地址。
如果要加入两个或者两个以上的timer怎么办?
继续用SetTimer函数吧,上次的timer的ID是1,这次可以是2,3,4。。。。
SetTimer(2,1000,NULL);
SetTimer(3,500,NULL);
WINDOWS会协调他们的。当然onTimer函数体也要发生变化,要在函数体内添加每一个timer的处理代码:
OnTimer(nIDEvent)
{
switch(nIDEvent)
{
case 1:..;
break;
case 2:..;
break;
case 3:..;
break;
}
}
在使用定时器时注意SetTimer中表示定义时标识的nIDEvent参数,以及OnTimer或自定义的回调函数中nIDEvent参数,还有KillTimer中的这个参数,如果要用它们对特定的定时器进行操作时,注意保持它们的一致。
获取系统时间
CTime time = CTime::GetCurrentTime();
int m_nYear = time.GetYear();
int m_nMonth = time.GetMonth();
int m_nDay = time.GetDay();
int m_nHour = time.GetHour();
int m_nMinute = time.GetMinute();
int m_nSecond = time.GetSecond();
我们还可以用CTime::Format函数将CTime对象转换为字符串对象
例如: CString m_strTime = time.Format("%Y-%m-%d %H:%M:%S");
运行结果:m_strTime为 2001-8-1 12:11:05
一、使用MFC的CTime类来得到时间:
二、使用MFC的COleDateTime来得到时间:
针对上面两种MFC的调用方法,MFC帮他们封装好了显示格式的函数,并且能够直接返回CString的格式。同样,也可以自己指定显示格式,具体的显示情况如下%a:显示星期英文的前面几个字母
%A:显示星期的全部英文名称
%b:显示月份英文的前面几个字母
%B:显示月份的全部英文名称
%c:以百分号的形式显示日期时间如:06/02/25/ 01:13:57
%d:显示月份的序号(01 – 31)
%H:显示时间24小时制(00 – 23)
%I:显示时间12小时制(01 – 12)
%j:显示当前是一年中的第几天(001 – 366)
%m:显示月份序号(01 – 12)
%M:显示分钟(00 – 59)
%p:显示当前时间是上午还是下午 A.M./P.M.
%S:显示秒钟(00 – 59)
%U:显示当前是一年中的第几周(00 – 53)
%w:显示星期的序号(0 – 6; 星期日为 0)
%W:显示当前是一年中的第几周(00 – 53)
%x:以百分号的形式显示日期 如:06/02/25/
%X:以冒号的形式显示时间 如:01:12:45
%y:两位显示年号(00 – 99)
%Y:四位显示年号
%#c:显示时间 如:Tuesday, March 14, 1995, 12:41:29
%#x:显示时间 如:Tuesday, March 14, 1995
具体的其他参考请查看MSDN上面的说明;
- 1.获取系统当前日期
CTime t = CTime::GetCurrentTime(); //获取系统日期
//创建CTime类变量t,并将调用函数GetCurrentTime()的返回值赋给变量t.
2.获得当前日期和时间,并可以转化为 CString
CTime tm=CTime::GetCurrentTime(); CString str=tm.Format("%Y-%m-%d");//显示年月日
或者:CTime tm=CTime::GetCurrentTime().Format("%Y-%m-%d");//显示年月日
小结:MFC数字时钟的关键在于创建一个计数器
BOOL CMFCDlg::OnInitDialog() //初始化函数
{
SetTimer(1,1000,NULL);//在这里设置计数器
}
void CMFCDlg::OnTimer(UINT nIDEvent)
{
CTime time = CTime::GetCurrentTime();
CString str;
str=time.Format("%H:%M:%S(%Y-%m-%d)");
SetDlgItemText(IDC_curtime,str);//在名为IDC_curtime的控件里显示字符串str
CDialog::OnTimer(nIDEvent);
}
void CMFCDlg::Onexitbit()
{
CDialog::OnCancel();//退出对话框
KillTimer(1);//在退出软件时要删掉这个计数器
}
在Release模式下编译链接成的文件时经过优化的,是正式发布产品;而Debug下的只是调试程序。在工程目录下即可找到这两个文件夹。
- MFC之“数字时钟制作”笔记(一)
- MFC数字时钟在VS2013的简易制作
- MFC数字时钟
- 使用DS3231SN制作数字时钟
- 简易数字时钟软件详细制作过程
- MFC中数字时钟的实现分析
- 制作WPF时钟之2
- 《Windows程序设计》之数字时钟
- 《Windows程序设计》之数字时钟
- 计时器(2)之数字时钟
- js之图片数字时钟
- 自学QT之数字时钟
- MFC学习笔记之简单绘图一
- MFC学习笔记之简单绘图一
- MFC之“图种生成器制作”笔记(二)
- js笔记(9)之定时器&&数字时钟&&延时提示框
- Silverlight控件使用(三)制作数字时钟
- 如何用jQuery和CSS3制作数字时钟
- Android开发常用工具
- Zend Framework 2检查登录跳转到登录页
- abercrombie homme but she was stuffed into his mouth down to eat." Wang told reporter. Speaking of
- 解决js下跳转无referer的方法
- s3c2440裸机开发调试环境(MDK4.6,Jlink v8,mini2440)
- MFC之“数字时钟制作”笔记(一)
- leetcode Merge k Sorted Lists
- 多线程开发 - GCD的使用
- 关于BIEE不能正常启动
- Zend Framework 2多域名多模块部署
- 关于getchar函数的理解
- ORA-16179: incremental changes to "log_archive_dest_1" not allowed with SPFILE
- xcode6 使用MJRefresh时报错解决方法
- c中exit和return的区别