发布和发送消息(Posting and Sending Messages)

发布和发送消息(Posting and Sending Messages)
       任何应用程序都可以发布和发送消息。像系统一样,应用程序通过复制消息到消息队列来发布消息,通过把消息作为参数传递给窗口过程来发送消息。应用程序可以利用PostMessage函数来发布消息。应用程序也可以通过调用SendMessage,BroadcastSystemMessage,SendMessageCallback,SendMessageTimeout,SendNotifyMessage和SendDlgItemMessage函数来发送消息。
        发布消息(Posting Messages)
        应用程序通过发布消息来通知窗口过程执行一个任务。PostMessage函数为消息创建一个MSG结构,并把消息复制到消息队列。应用程序的消息循环最终会获取这个消息,然后把这个消息分配给一个合适的窗口过程。
        应用程序可以发布一个不指定任何窗口的消息。当调用PostMessage函数时,如果应用程序提供一个空的窗口句柄,消息会被发布到与当前线程相关联的消息队列。因为没有指定窗口句柄,应用程序必须在消息循环中处理消息。这是一种创建应用于整个应用程序,而不是指定窗口的消息的方式。
        有时,你可能会为系统中的高级别窗口发布消息。应用程序通过调用PostMessage函数并指定hwnd的参数HWND_TOPMOST,可以为所有的高级别窗口发布消息。 
         一个普遍的程序错误是,假定PostMessage函数总是可以发布消息。当时当消息队列满时,这个假定是不正确的。应用程序应该检查PostMessage函数的返回值来确定消息是否被发布,如果没有的话,可以重新发布。
        发送消息(Sending Messages)
        应用程序通过发送消息来通知窗口过程立即执行一个任务。SendMessage函数发送消息到响应给定窗口的窗口过程。这个函数会等到窗口过程结束处理,然后返回消息结果。父窗口和子窗口经常会通过发送消息给对方来进行通信。例如,一个拥有编辑框作为子窗口的父窗口可以通过发送消息来设定文本控制。通过把消息发送回父窗口,控制可以通知父窗口用户输入文本的改变。
        SendMessageCallback函数也会发送消息到响应给定窗口的窗口过程。然而这个函数会立即返回。当窗口过程处理完消息后,系统会调用指定的回调函数。
        有时,你可能想发送消息给系统中的高级别窗口。例如,如果应用程序改变了系统时间,那么它必须把这个改变通过发送WM_TIMECHANGE消息告知所有的高级别窗口。应用程序可以通过调用SendMessage函数,指定hwnd参数值HWND_TOPMOST,发送消息给高级别窗口。你也可以通过调用BroadcastSystemMessage函数,指定lpdwRecipients参数值BSM_APPLICATIONS,把消息广播给所有的应用程序。
        利用InSendMessage或InSendMessageEx函数,窗口过程可以决定是否处理一个被另外的线程发送的消息。当消息处理依赖于消息起点时,这个能力是有用的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值