用户自定义消息

WINDOWS自定义消息:WM_USER和WM_APP

WM_USER常量是Windows帮助应用程序定义私有窗口类里的私有消息,通常使用(WM_USER + 一个整数值),但总值不能超过0x7FFF

#defineWM_USER       0x0400                 -->1024

WM_APP常量是Windows帮助应用程序定义私有消息,通常使用(WM_APP+一个整数值),但总值不能超过0xBFFF

#defineWM_APP       0x8000                   -->32768

这两个都定义在WinUser.h中。


范围                                 表示

0~WM_USER–1               操作系统保留的消息。

WM_USER ~ 0x7FFF        私有窗口类用的整数型消息。 

WM_APP ~0xBFFF           应用程序用的消息。

0xC000~0xFFFF             应用程序用的字符串消息。

0xFFFF~                         操作系统保留的消息。

http://jingyan.baidu.com/article/d5c4b52bc79d00da560dc59b.html

 

MFC自定义消息:

1.  在头文件stdafx.h中增加一个自定义消息宏  

           #define  WM_USER_THREADEND  WM_USER + 1
2.  在于增加新消息的窗口或对话框类的头文件中增加一个回调函数声明,注意要声明为public
           afx_msg LRESULT  OnUserThreadend(WPARAM wParam, LPARAM lParam);

3.在窗口/对话框cpp文件的BEGIN_MESSAGE_MAP,END_MESSAGE_MAP中增加: 

   BEGIN_MESSAGE_MAP(CTestDlg,CDialog)

         ...

          ON_MESSAGE(WM_USER_THREADEND,OnUserThreadend) 

          END_MESSAGE_MAP()    

4. 在窗口或对话框的cpp文件中增加回调函数的实现,如:
  LRESULT ThreadDialog::OnUserThreadend(WPARAM wParam, LPARAMlParam) 
         {
                TRACE("WM_USER_THREADENDmessage /n");  return 0;
         }      
5.  自定义消息的触发
         ::PostMessage(GetSafeHwnd(),WM_USER_THREADEND, 0, 0);
         其中GetSafeHwnd()得到了一个当前窗口的句柄,此消息将发给当前窗口,如果想发送消息给其它窗口只需改变这个句柄,前提是目的窗口也实现了此消息的处理函数

 

队列消息和非队列消息:

Windows把消息分为两种:一种是需要立即处理的消息,另一种是不需要立即处理的消息
         对于需要立即处理的消息,Windows直接把它送给窗口的消息处理函数进行处理,这类消息我们叫做非队列消息;而对于不需要立即处理的消息,Windows会把它发送给应用程序的消息队列进行排队,由应用程序逐个进行处理,我们把这类消息叫做队列消息。

 

PostMessage是寄送消息,函数执行后立即返回。寄送的消息是队列消息,放在程序的消息队列中排队处理。一般来说,新寄送的消息排在消息队列的末尾,这样可以保证窗口以先进先出的顺序处理消息。
SendMessage是发送消息,它发出的消息是非队列消息,直接调用窗口过程函数处理。SendMessage函数一直等消息处理完成后才返回。

Windows消息编程 http://www.cnblogs.com/findumars/p/5810941.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值