最近在公司做一个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 的使用的更多相关文章

  1. Using Timers in MFC Applications

    Timer Events in MFC Applications Event timers are always handy to have around and useful in nearly e ...

  2. MFC的定时器OnTimer

    本文总结来源出自鸡啄米,感谢鸡啄米.来源:http://www.jizhuomi.com/software/232.html 定时器简介 定时器,可以帮助开发者或者用户定时完成某项任务.在使用定时器时 ...

  3. VC++ 6.0使用定时器SetTimer;

    背景: windows中使用VC++6.0制作了个交互界面向下位机定时发送数据及显示下位机上传的数据.定时发送则需要使用定时器. 本文只做记录如何调用,原理以后再深究. 正文: 首先,我生成的窗体类名 ...

  4. SetTimer函数的用法

    什么时候我们需要用到SetTimer函数呢?当你需要每个一段时间执行一件事的的时候就需要使用SetTimer函数 了.使用定时器的方法比较简单,通常告诉WINDOWS一个时间间隔,然后WINDOWS以 ...

  5. 怎样使用SetTimer MFC 够具体

    转自:http://blog.csdn.net/ellor/article/details/1714741 Timer事件,即定时器事件,是在游戏编程中,常常使用的一个事件.借助它能够产生定时运行动作 ...

  6. 求助:对话框下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 ...

  7. 有关SetTimer函数的用法

    1 )用WM_TIMER来设置定时器 先请看SetTimer这个API函数的原型 UINT_PTR SetTimer( HWND hWnd, // 窗口句柄 UINT_PTR nIDEvent, // ...

  8. 如何使用SetTimer MFC 不够具体

    转会:http://blog.csdn.net/ellor/article/details/1714741 Timer事件,即定时器事件,是在游戏编程中.常常使用的一个事件.借助它能够产生定时运行动作 ...

  9. VS2005 添加onTimer定时器

    SetTimer(1,300,NULL); void CchangeDisplayDlg::OnTimer(UINT_PTR nIDEvent) { // TODO: 在此添加消息处理程序代码和/或调 ...

随机推荐

  1. WordPress HMS Testimonials 多个跨站脚本漏洞和跨站请求伪造漏洞

    漏洞名称: WordPress HMS Testimonials 多个跨站脚本漏洞和跨站请求伪造漏洞 CNNVD编号: CNNVD-201308-199 发布时间: 2013-08-22 更新时间: ...

  2. windows 7 下 BCGControlBar 的安装破解

    一定要以管理员权限启动,否则没有注册码输入框,不能破解,折腾我好几遍 谨记

  3. (转)ASP.NET MVC路由配置

    一.命名参数规范+匿名对象 1 routes.MapRoute(name: "Default", 2 url: "{controller}/{action}/{id}&q ...

  4. android日历控件(一)

    自定义日历并且具备设置今天以前的时间不可点选,以前的颜色和当前的颜色不同,以及获取两次点击日期之间间隔的天数所以说细节比较多 个人习惯,先上图 靠,笔记本不知道怎么回事,禁用到触摸板之后 再次唤醒屏幕 ...

  5. 数据结构(并查集||树链剖分):HEOI 2016 tree

    [注意事项] 为了体现增强版,题目限制和数据范围有所增强: 时间限制:1.5s 内存限制:128MB 对于15% 的数据,1<=N,Q<=1000. 对于35% 的数据,1<=N,Q ...

  6. NGU-学习笔记(1)-动态添加删除图集

    现在 正在做unity的方向 不得不说我选的是UI方向 Unity中很有名的就是NGUI插件了.今天做了个ngui的简单背包系统.非常简陋..初学着 自己mark下 (1)预览 主要就是个 simpl ...

  7. 【原】centos6.5下hadoop cdh4.6 安装

    1.架构准备:      namenode 10.0.0.2      secondnamenode 10.0.0.3      datanode1 10.0.0.4      datanode2 1 ...

  8. 突破LVS瓶颈,LVS Cluster部署(OSPF + LVS) - lxcong的运维技术 - 开源中国社区

    突破LVS瓶颈,LVS Cluster部署(OSPF + LVS) - lxcong的运维技术 - 开源中国社区 突破LVS瓶颈,LVS Cluster部署(OSPF + LVS)

  9. db2 alter table 语法

    DB2 alter:add/delete/reset   column 1.添加字段 alter table [table_name] add [column_name] [column_type] ...

  10. jQuery选择器总结 转

    jQuery选择器总结 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 3 ...