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

365bet体育在线网站 📅 2025-07-12 20:47:39 ✍️ admin 👁️ 1851 ❤️ 452
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);

}

相关推荐

1瓦等于多少度(1瓦等于多少度电1个回答)
bt365体育网址

1瓦等于多少度(1瓦等于多少度电1个回答)

📅 07-01 👁️ 5457
中国游戏花钱排行榜TOP10:最烧钱游戏盘点,2025榜单揭晓
日语入门:ウ的右上角加了两点是什么假名?
bt365体育网址

日语入门:ウ的右上角加了两点是什么假名?

📅 07-11 👁️ 7202