mfc创建timer工程

  很久没弄过mfc了,今天弄了个timer,好多都忘了,重新在网上搜索了下,还算弄出来了。!


用的是vs2010。。   首先创建一个mfc工程,选择基于对话框选项。


在timerDlg.h 头文件里面加入宏定义:

#define IDT_TIMER_0		WM_USER + 200
#define TimerInterval	1000					// 1000 mSec

在对话框上添加2个按钮,并加入按钮响应代码。


初始化并开启timer按钮功能:

void CtimerDlg::OnBnClickedButton1()
{
	// TODO: 在此添加控件通知处理程序代码
	//if (IconTimer != NULL)
	//	StopTimer (IconTimer);

	IconTimer = NULL;

	IconTimer = SetTimer (IDT_TIMER_0, TimerInterval, NULL);

	if(IconTimer == 0)
	{
		/// 在一个win32窗口程序中,如果第一个参数为NULL,弹出提示消息框,其它菜单仍可以被点
		///,而如果指定了hwnd,则不能再点其它,就好像模态对话框一样。
		::MessageBox(NULL,"Unable to obtain timer","IDT_TIMER_0",MB_OK|MB_APPLMODAL);
	}
}


    然后还要在mfc中添加 WM_TIMER 消息的处理函数,方法是,在VS2010工程的Class View类视图中找到要添加定时器的类,点击右键,选择Properties,显示其属性页,


然后在属性页工具栏上点击Messages按钮,下面列表就列出了所有消息,找到WM_TIMER消息,添加消息处理函数。添加后,cpp文件中会出现类似如下内容:

BEGIN_MESSAGE_MAP(CtimerDlg, CDialogEx)
	....
	ON_WM_TIMER()
END_MESSAGE_MAP()

void CtimerDlg::OnTimer(UINT_PTR nIDEvent)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值

	CDialogEx::OnTimer(nIDEvent);
}

完整的OnTimer内容如下:

void CtimerDlg::OnTimer(UINT_PTR nIDEvent)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	/// 注意这里的第一个参数hWnd 要为NULL,
	/// 不然后面的停止 timer 按钮无法按下。
	::MessageBox (NULL,"timer ","IDT_TIMER_0",MB_OK);

	CDialogEx::OnTimer(nIDEvent);
}

另外一个按钮功能是 kill timer使用

void CtimerDlg::OnBnClickedButton2()
{
	// TODO: 在此添加控件通知处理程序代码
	if (IconTimer != NULL)
		StopTimer (IconTimer);
}

StopTimer可以通过右击类名字的方式添加函数,参数名字  TimerVal,类型 int。是当初SetTimer 的返回值:

int CtimerDlg::StopTimer(int TimerVal)
{
	if (!KillTimer(TimerVal))
	{
		CString Message;
		Message.Format("Unable to kill timer: %u", TimerVal);
		MessageBox (Message, "StopTimer", MB_OK|MB_SYSTEMMODAL);

		return FALSE;
	}
	return TRUE;
}

运行效果:



点击以下stop就可以 KillTimer了。


  需要说明的是,即便在任务管理器把timer进程关闭掉timer依然会定时的调用。除非是kill才能真正的把这个定时器移除~~~!!




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值