MFC 定时器 SetTimer 如何使用回调函数

创建工程名TestCallBack

自定义回调函数   定义为全局函数

在TestCallBackDlg.h文件开头定义

#pragma once

void CALLBACK EXPORT TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime);

在TestCallBackDlg.cpp文件末尾实现函数

void CALLBACK EXPORT TimerProc(HWND hwnd,UINT message,UINT iTimerID,DWORD dwTime)
{

  //其中的参数我只知道hwnd和 iTimerID两个参数的作用,其他的不太清楚,message值得是消息但是是什么消息呢,dwTime也不知道

  //还望有大神指点一二
  SYSTEMTIME LocalTime;
  GetLocalTime(&LocalTime);
  TCHAR TimeBuffer[256];

  wsprintf(TimeBuffer,"%i年%i月%i日%i时%i分%i秒",LocalTime.wYear,LocalTime.wMonth
  ,LocalTime.wDay,LocalTime.wHour,LocalTime.wMinute,LocalTime.wSecond);

  if (iTimerID==1)
  {
    SetDlgItemText(hwnd,IDC_EDIT1,TimeBuffer);
  }
  else if (iTimerID==2)
  {
    SetDlgItemText(hwnd,IDC_EDIT2,TimeBuffer);
  }
}

添加Button1按钮,启动定时器

void TestCallBackDlg::OnBnClickedButton1()
{
  // TODO: 在此添加控件通知处理程序代码
  SetTimer(1,1000,TimerProc); //每间隔1s会调用一次TimerProc函数
  SetTimer(2,2000,TimerProc);
}

添加Button2按钮,关闭定时器

void CMFCApplication7Dlg::OnBnClickedButton2()
{
  // TODO: 在此添加控件通知处理程序代码
  KillTimer(1);
  KillTimer(2);
}

时间: 2024-10-14 02:03:22

MFC 定时器 SetTimer 如何使用回调函数的相关文章

MFC 定时器用法 SetTimer、KillTimer

什么时候我们需要用到SetTimer函数呢?当你需要每个一段时间执行一件事的的时候就需要使用SetTimer函数了. 使用定时器的方法比较简单,通常告诉WINDOWS一个时间间隔,然后WINDOWS以此时间间隔周期性触发程序.通常有两种方法来实现:发送WM_TIMER消息和调用应用程序定义的回调函数. 1.1 用WM_TIMER来设置定时器 先请看SetTimer这个API函数的原型 UINT_PTR SetTimer(  HWND hWnd,              // 窗口句柄  UIN

Settimer及回调函数的用法

在网上看了settimer的一些用法发现能用的真没有,,,,可能是我没找对地方,大部分都是无脑复制粘贴,浪费了很多时间,如果你是一个对这种定时器一无所知的小白,那么请你看进来一定不会让你失望的! 实用settimer的第一步引入头文件:#include <Windows.h> 然后我们来看一下settimer及其回调函数的使用: 首先我们来看settimer的原型:(如下所示)(这个仅仅是窗口的一个定时器函数,我们现在是想把它用到控制台程序的而一般没有窗口的线程系统是不会给他指定消息队列的)

使用类的成员函数作为API定时器的回调函数

有时候,我们在使用API定时器时,需要使用类的成员函数作为其回调函数,但是,编译器为了保护成员函数,编译是不能通过的.那么我们怎么才能使用类的成员函数作为API定时器的回调函数呢?我们可以嵌入一段汇编代码来绕过编译器的检查.举个例子: 假设我们一个类的成员函数定义为void CALLBACK EXPORT CTestDlg::TimerProc,那么我们在使用API定时器时如果直接这么写是编译通不过的: ::SetTimer(m_hWnd,1,1000,TimerProc); 使用嵌入一段汇编代

MFC的回调函数

MFC中应该有两类回调函数:一类是源自C的传统回调函数,此类回调函数若非定义为全局函数,而定义在类中的话,要添加static约束,常见的有EnumXXX():一类是消息响应函数,通过成员函数指针实现回调. 设想一种情况,基类A触发某事件E后,回调某定义好的函数F进行事件处理(MFC中表现为消息响应函数).继承于类A的子类B和C,可能对于E有不同的处理方式,于是需要对基类A的函数F进行改写.自然而然的,我们想到将F定义为以virtual修饰的虚函数. -----------------------

前端(十三)—— JavaScript高级:回调函数、闭包、循环绑定、面向对象、定时器

回调函数.闭包.循环绑定.面向对象.定时器 一.函数高级 1.函数回调 // 回调函数 function callback(data) {} // 逻辑函数 function func(callback) { // 函数回调,判断回调函数是否存在 if (callback) callback(data); } func(callback); // 函数回调的本质:在一个函数中(调用函数),当满足一定条件,调用参数函数(回调函数) // 回调函数作为调用函数的参数传入,满足一定的条件,调用回调函数

STM32 HAL库的定时器中断回调函数跟串口中断回调函数

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { //添加回调后的程序逻辑 if (htim->Instance == htim2.Instance) //判断是否定时器2 { } } void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { //添加回调后的程序逻辑 if(huart->Instance == USART1) //判断是否串口1 { } } 中断

思考5 定时器和callback回调函数

定时器 频率:freq 占空比:duty 输出脉冲中断信号(定时器中断):callback(回调函数) 回调函数;回调函数就是按照一定的形式由你定义并编写实现内容,当发生某种事件时(如中断发生),而由系统或其它函数来调用的函数. 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数. 回调函数是不是就可以理解为,中断发生时,调用函数的指针,执行我预先想要处理的内容(中断处理函数) 原文地址:http

MFC定时器

在程序中我们经常要使用定时刷新的功能,典型的应用是在信息管理系统中表单要跟着数据库中的数据变动.MFC提供了定时器来完成这个功能. ========================================================================= 在MFC中和定时器相关的有三个函数: UINT SetTimer( UINT nIDEvent, UINT nElapse, void (CALLBACK EXPORT* lpfnTimer)( HWND, UINT,

使用定时器SetTimer

//创建定时器函数的声明:SetTimer( hWnd: HWND; {与定时器相关联的窗口句柄} nIDEvent: UINT; {指定一个非 0 的定时器标识符} uElapse: UINT; {指定间隔时间, 单位是毫秒} lpTimerFunc: TFNTimerProc {每到时间后, 要调用的函数的指针}): UINT; {返回定时器标识符; 失败返回 0} //移除定时器函数的声明:KillTimer( hWnd: HWND; {与定时器相关联的窗口句柄} uIDEvent: UI