vc自定义消息处理函数与定时器

本文详细介绍了在Windows环境下自定义消息处理函数的步骤及如何使用定时器实现周期性任务。包括消息号定义、消息映射、消息处理函数编写、消息发送流程以及定时器的启动、关闭和响应函数的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 
自定消息处理函数5步走:

1.自定义消息号。在windows中系统是通过消息号区别不同的消息,再进行相应的处理。为了相不与系统预定义消息相冲突,自定义消息号应大于一个值,WM_USER,即WM_USER是系统的消息的最大号,只需加上一个整数就可以作为定义消息号了:

#define WM_NEW_MSG WM_USER+1   //放在头文件里,如demoDlg.h

 

2.在类的声明中添加消息处理函数的声明 afx_msg void xxxx(WPARAM wParam,LPARAM lParam);
3.在类的实现文件中消息映射部分添加消息映射  ON_MESSAGE(WM_xxx, xxxx);
4.自己编写消息处理函数。

5.在要发送此消息的函数中调用函数
BOOL PostMessage(
  HWND hWnd,      // handle of destination window
  UINT Msg,       // message to post
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
);
把消息送到消息队列中。

定时器使用方法

MFC里面的预定义的消息WM_TIMER,则只需启动和关闭定时器,并定义一个定时器处理函数

开启定时器 SetTimer(1,1000,NULL);//定时器号为1,每一秒钟产生一次(以毫秒为单位)

关闭定时器 KillTimer(1); //关闭ID的1的定时器

从"class wizard"里添加对wm_timer的响应函数,并区分不同的消息号即可。

UINT SetTimer(
       HWND hWnd,               // 接收定时器消息的窗口句柄
       UINT nIDEvent,           // 定时器的ID号
       UINT uElapse,            // 定时时间
       TIMERPROC lpTimerFunc        // 指向消息处理函数的指针
);

在mfc中,由于是在cwnd或其子类中调用的且cwnd类中也有SetTimer函数的封装,定在mfc里调用SetTimer时不用传递窗口句柄,也就是有另一种SetTimer形式:


UINT SetTimer( UINT nIDEvent, UINT nElapse,                   void(CALLBACKEXPORT*    lpfnTimer)(HWND, UINT, UINT, DWORD) );

关闭定时器也就对应有两种形式:

BOOL KillTimer(
     HWND hWnd,       // handle of window that installed timer
     UINT uIDEvent      // timer identifier
);

BOOL KillTimer( int nIDEvent );


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值