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

自定消息处理函数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 );

转载于:https://www.cnblogs.com/happytogether/archive/2010/04/15/1712310.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值