SetTimer 和 OnTimer 的使用
最近在公司做一个MFC项目,因为是MFC新手,所以在这里记录一些最近用到和学到的东西留着以后查阅。
今天遇到的一个问题是要在窗口刚刚初始化完成时自动检测一个配置文件是否存在(实际上就是检测是不是首次登陆,首次登陆时创建这个配置文件),如果不存在就弹出MessageBox提醒用户完成配置。检测配置文件是否存在非常容易实现,直接使用CFileFind类的FindFile函数确定文件是否存在。困难的是如何在窗口初始化完成时自动弹出提示框。我首先想到的是将弹出提示框的功能加在主窗口的OnInitDialog函数中,但结果是提示框确实自动弹出了,但主窗口并没有显示,只有在提示框关闭后才显示主窗口,这并不是我想要的结果。在网上问了问后发现可以使用SetTimer和OnTimer实现我想要的效果。
SetTimer函数简单说就是一个定时器函数,可以创建一个定时器并指定间隔时长TLen和回调函数,回调函数默认就是OnTimer函数。实现的效果是每隔TLen时间就产生一个消息调用一次OnTimer函数。在网上有很多关于SetTimer的使用方法的介绍,我照着他们介绍的方法完成代码后发现并没有按照预期调用OnTimer函数,之后又找了很多资料,有一个提到之所以没有实现调用OnTimer的功能是因为没有加上时间ON_WM_TIMER()消息。加上之后就正确了。下面是我代码
BEGIN_MESSAGE_MAP(Server_Info, CDialog)
ON_WM_TIMER()
END_MESSAGE_MAP() BOOL Server_Info::OnInitDialog()
{
CDialog::OnInitDialog(); SetTimer(,,NULL);//500ms定时消息,调用OnTimer。完成首次登陆路径设置的通知任务 return TRUE;
} // Server_Info 消息处理程序 void Server_Info::OnTimer(UINT_PTR nIDEvent)
{
KillTimer();
if(TRUE != isFirstLogin)
{
MessageBox(TEXT("首次登陆需要选择测试报告路径!"), TEXT("通知"), MB_ICONINFORMATION);
}
CDialog::OnTimer(nIDEvent);
}
另外就是关于KillTimer函数的使用。在用SetTimer创建一个定时器后,如果不再需要这个定时器,可以直接使用KillTimer函数将他关闭。KillTimer函数只有一个参数对应于要关闭定时器的ID,也就是在使用SetTimer函数创建定时器时的第一个参数。因为我的需求是只需要在登陆后提醒一次就可以,所以在调用OnTimer函数后直接将这个定时器关掉,实现提醒一次的功能。
SetTimer 和 OnTimer 的使用的更多相关文章
- Using Timers in MFC Applications
Timer Events in MFC Applications Event timers are always handy to have around and useful in nearly e ...
- MFC的定时器OnTimer
本文总结来源出自鸡啄米,感谢鸡啄米.来源:http://www.jizhuomi.com/software/232.html 定时器简介 定时器,可以帮助开发者或者用户定时完成某项任务.在使用定时器时 ...
- VC++ 6.0使用定时器SetTimer;
背景: windows中使用VC++6.0制作了个交互界面向下位机定时发送数据及显示下位机上传的数据.定时发送则需要使用定时器. 本文只做记录如何调用,原理以后再深究. 正文: 首先,我生成的窗体类名 ...
- SetTimer函数的用法
什么时候我们需要用到SetTimer函数呢?当你需要每个一段时间执行一件事的的时候就需要使用SetTimer函数 了.使用定时器的方法比较简单,通常告诉WINDOWS一个时间间隔,然后WINDOWS以 ...
- 怎样使用SetTimer MFC 够具体
转自:http://blog.csdn.net/ellor/article/details/1714741 Timer事件,即定时器事件,是在游戏编程中,常常使用的一个事件.借助它能够产生定时运行动作 ...
- 求助:对话框下OnInitDialog中使用SetTimer无效
原文地址:http://www.w3c.com.cn/%E6%B1%82%E5%8A%A9%EF%BC%9A%E5%AF%B9%E8%AF%9D%E6%A1%86%E4%B8%8Boninitdial ...
- 有关SetTimer函数的用法
1 )用WM_TIMER来设置定时器 先请看SetTimer这个API函数的原型 UINT_PTR SetTimer( HWND hWnd, // 窗口句柄 UINT_PTR nIDEvent, // ...
- 如何使用SetTimer MFC 不够具体
转会:http://blog.csdn.net/ellor/article/details/1714741 Timer事件,即定时器事件,是在游戏编程中.常常使用的一个事件.借助它能够产生定时运行动作 ...
- VS2005 添加onTimer定时器
SetTimer(1,300,NULL); void CchangeDisplayDlg::OnTimer(UINT_PTR nIDEvent) { // TODO: 在此添加消息处理程序代码和/或调 ...
随机推荐
- 我要爱死这个markdown 了
今天上班依旧看wpdang的文章,最后作者说,文章使用markdown写的,好奇心促使我搜了一把什么是markdown.然后看到了这篇文章,一瞬间就开始兴奋了.顿时觉得,这个东西太好用 了,简直又激起 ...
- ♫【模式】Curry化
/** * 当发现正在调用同一个函数,并且传递的参数绝大多数都是相同的, * 那么该函数可能是用于Curry化的一个很好的候选参数 */ ;(function() { function add(x, ...
- 15个值得开发人员关注的jQuery开发技巧和心得
在这篇文章中,我们将介绍15个让你的jQuery更加有效的技巧,大部分关于性能提升的,希望大家能够喜欢! 1. 尽量使用最新版本的jQuery类库 jQuery项目中使用了大量的创新.最好的方法来提高 ...
- shell 执行jar 的命令
#!/bin/sh ############## #判断是否程序已启动 jappname='Test' mainclasspath="com.company.commontest.test& ...
- Distinct Subsequences——Leetcode
Given a string S and a string T, count the number of distinct subsequences of T in S. A subsequence ...
- COM初体验
以前在我学校里培训过一段时间C++,我敬爱的吴老师略有提及.那个时候觉得COM遥不可及,觉得,哇塞好神圣.我觉得自己啥都没学好,我不应该这么早去涉及这片过于光荣的领地.既没有觉悟也没有动力去迎接这样一 ...
- redis ins 调试
Redis简介: Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发工 ...
- 南京Uber优步司机奖励政策(1月25日~1月31日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- JS方法在iframe父子窗口间的调用
本文向大家简单介绍一下iframe父子窗口间JS方法调用,JavaScript 被数百万计的网页用来改进设计.验证表单.检测浏览器.创建cookies,以及更多的应用,希望本文介绍对你有所帮助. if ...
- 阿里云 centos 部署javaweb 应用
今天在阿里云上部署了个javaweb应用,在此记录下步骤,以供下次使用. 服务器版本: 1.root登陆服务器 2.服务器安装FTP服务,或者直接使用winscp上传文件(简单),本文介绍安装FTP服 ...