最近在公司做一个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. 在PC上使用串口向开发板传送文件

    之前一直使用的是NFS,即网络挂载文件系统,不愁文件的传输问题,但是不幸的是 前几天网络出现故障,使这种方式没法使用 变好的驱动程序一直没法下载到开发板里面,蛋疼欲裂啊. 于是乎折磨则么使用串口传输 ...

  2. 原生javascript难点总结(1)---面向对象分析以及带来的思考

    ------*本文默认读者已有面向对象语言(OOP)的基础*------ 我们都知道在面向对象语言有三个基本特征 :  封装 ,继承 ,多态.而js初学者一般会觉得js同其他类C语言一样,有类似于Cl ...

  3. poj 1321 棋盘问题【dfs】

    棋盘问题 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 28308   Accepted: 13996 Descriptio ...

  4. 不区分大小写的in_array实现 thinkphp框架

    // 不区分大小写的in_array实现 function in_array_case($value,$array) { return in_array(strtolower($value),arra ...

  5. 移动开发框架,第【一】弹:QuoJs 官方文档(汉化版)

    作者:一只猿 原文地址: http://www.92ez.com 转载请注明出处,谢谢 帮助说明 如果您认为QuoJS只是一个触摸事件管理器,那你就错了,它是一个功能丰富的类库,无需第三方JavaSc ...

  6. spring 自定义schema

    扩展schema,定义自己的bean属性..不错! 主要: 1,定义META-INF下.xsd文件,这里是people.xsd;定义spring.handlers;定义spring.schemas 2 ...

  7. 从注冊流程 分析怎样安全退出多个Activity 多种方式(附DEMO)

    前言 因为一个同学问到我怎样依照一个流程走好之后回到首页.我曾经看到过4个解决方式,后来发现有做个记录和总结的必要,就写了这篇博文. (之前看小强也写过一篇,这里通过自身的分析完整的总结一下下面6种方 ...

  8. highgui.h备查 分类: C/C++ OpenCV 2014-11-08 18:11 292人阅读 评论(0) 收藏

    /*M/////////////////////////////////////////////////////////////////////////////////////// // // IMP ...

  9. [Redux] Navigating with React Router <Link>

    We will learn how to change the address bar using a component from React Router. In Root.js: We need ...

  10. [Android 中级]Voip之CSipSimple类库的编绎

    CSipSimple是什么?是一款基于pjsip的Android客户端,相信想要研究VOIP通讯的朋友一定不会陌生,这里我就把如何编译CSipSimple写下来. 首先从CSipSimple官方网站上 ...