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: 在此添加消息处理程序代码和/或调 ...
随机推荐
- ZOJ- 3640 Help Me Escape
Help Me Escape Time Limit: 2 Seconds Memory Limit: 32768 KB Background If thou doest well, ...
- HDOJ 1081(ZOJ 1074) To The Max(动态规划)
Problem Description Given a two-dimensional array of positive and negative integers, a sub-rectangle ...
- HDU 4722 Good Numbers 2013年四川省赛题
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4722 题目大意:给定一个区间,求区间中有多少个满足每位上的数的和是10的倍数. 解题思路:先打表暴力求 ...
- vijosP1285 佳佳的魔法药水
vijosP1285 佳佳的魔法药水 链接:https://vijos.org/p/1285 [思路] 图论思想. 很巧妙. 如A+B=C,将AB之间连边,边权为C,用以找相连物品与合成物. 用Dij ...
- 苹果Think Different广告
电视广告版: Here’s to the crazy ones. The misfits. The rebels. The troublemakers. The round pegs in the s ...
- GPG error: the public key is not available
GPG error: The following signatures couldn't be verified because the public key is not available I h ...
- SQL-LINQ-Lambda语法对照
SQL LINQ Lambda SELECT *FROM HumanResources.Employee from e in Employees select e Employees .Select ...
- HTTP协议的特点
HTTP协议的主要特点可概括如下: 1.支持客户/服务器模式.2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径.请求方法常用的有GET.HEAD.POST.每种方法规定了客户与服务器联系的 ...
- CMake 简单介绍 图
http://tech.uc.cn/?p=914 CMake特点 CMake需要用户用CMake规范的语法编写CMake脚本,该语法简单易用,入门极其顺手 原生支持 C/C++/Fortran ...
- java EE 学习
http://blog.csdn.net/liushuijinger/article/category/1342030/1