高兴就好

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 );

posted on 2010-04-15 08:56  高兴就好  阅读(1477)  评论(0)    收藏  举报

导航