MFC中如何使用定时器(SetTimer)

定时器是指在软件运行的过程中,在特定的而时间段之后动作。使其产生消息或者回调函数工作,从而实现有一定的功能。
定时器有两种工作方式,一种是通过发送消息,使其WM_TIMER消息动作。另一种是通过回调函数来动作。

主要使用的函数:

  • SetTimer()函数是用来创建定时器的
  • KillTimer()函数是用来结束定时器的

以下是一个例程:
在这里插入图片描述

通过发送消息

1、首先创建定时器,在此例子中定时器是在按钮的点击事件中创建的


void CSetTimerDlg::OnBnClickedButton1()
{
	// TODO:  在此添加控件通知处理程序代码
	if (m_nRedID == 0)//判断定时器有没有启动
	{
		m_nRedID = SetTimer(1, 500, NULL);//启动定时器
	}
	else
	{
		KillTimer(m_nRedID);//关闭定时器
		m_nRedID = 0;
		::ShowWindow(::GetDlgItem(m_hWnd,IDC_RED),SW_HIDE);
	}
}

2、当定时器启动之后,每隔500毫秒就会发送一次WN_TIMER 消息,使其对应的消息映射函数响应。

void CSetTimerDlg::OnTimer(UINT_PTR nIDEvent)
{
	// TODO:  在此添加消息处理程序代码和/或调用默认值
	if (nIDEvent == m_nRedID)
	{
		HWND hRed = ::GetDlgItem(m_hWnd,IDC_RED);
		int nShow;
		if (::IsWindowVisible(hRed))
		{
			nShow = SW_HIDE;
		}
		else
		{
			nShow = SW_SHOW;
		}
		::ShowWindow(hRed,nShow);
	}
	CDialogEx::OnTimer(nIDEvent);
}

通过回调函数

1、同样的,先是启动定时器,在SetTimer()函数的第三个参数上写入回调函数的函数名。

void CSetTimerDlg::OnBnClickedButton2()
{
	// TODO:  在此添加控件通知处理程序代码
	// TODO:  在此添加控件通知处理程序代码
	if (m_nGreenID == 0)
	{
		m_nGreenID = SetTimer(2, 500, TimerProc);
	}
	else
	{
		KillTimer(m_nGreenID);
		m_nGreenID = 0;
		::ShowWindow(::GetDlgItem(m_hWnd, IDC_BLUE), SW_HIDE);
	}
}

2、实现回调函数,在类的.CPP 中创建全局的回调函数。

VOID CALLBACK TimerProc(HWND hWnd, UINT uMsg, UINT uID, DWORD dwTimew)
{
	HWND hRed = ::GetDlgItem(hWnd, IDC_BLUE);
	int nShow;
	if (::IsWindowVisible(hRed))
	{
		nShow = SW_HIDE;
	}
	else
	{
		nShow = SW_SHOW;
	}
	::ShowWindow(hRed, nShow);
}

  • 3
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值