MFC 定时器的使用

MFC中定时器的使用有两种方法:

  1. 消息通知的方法;
  2. 回调函数的方法;
    消息通知的方法比较简单,只需要在控件界面生成一个OnTimer的消息映射函数就行。
    以在界面生成两个定时亮灭的红绿灯为例:
    首先用画图软件生成两个bmp格式位图,保存至工程的rec目录下,并加载;
    然后在界面上放置两个按键和两个picture control控件,如图所示:
    在这里插入图片描述
    注意:picture control控件的type属性要选择为bitmap,且image要选择相应的位图;
    采用消息通知方式的代码:
void CTimer1008Dlg::OnBnClickedBtnRed()
{
	// 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);
	}
}


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

采用回调函数方式的代码如下:

void CTimer1008Dlg::OnBnClickedBtnGreen()
{
	// TODO: 在此添加控件通知处理程序代码
	if (m_nGreenID == 0) {
		m_nGreenID = SetTimer(2, 1000, TimerProc);
	}
	else {
		KillTimer(m_nGreenID);
		m_nGreenID = 0;
		::ShowWindow(::GetDlgItem(m_hWnd, IDC_green), SW_HIDE);
	}
}
void CALLBACK TimerProc(HWND hWnd, UINT uMsg, UINT uID, DWORD dwTimer)
{
	HWND hGreen = ::GetDlgItem(hWnd, IDC_green);
	int nShow;
	if (::IsWindowVisible(hGreen)) {
		nShow = SW_HIDE;
	} else {
		nShow = SW_SHOW;
	}
	::ShowWindow(hGreen, nShow);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值