消息与消息队列二(译自MSDN的About Message and Message Queue)

本文介绍了窗口过程的概念及其如何处理消息的基本原理。包括窗口过程如何处理消息、消息过滤的使用方法、以及如何投掷和发送消息等内容。
  1. /*
  2.     窗口过程
  3.        窗口过程是一个函数,它会处理所有发送至与其关联的窗口的消息,每个窗口类都有一个
  4.        窗口过程,同一窗口类的所有窗口共用一个窗口过程。
  5.        
  6.        系统以参数的方式将消息发送到窗口过程,然后窗口过程会根据消息采取合适的操作,它会
  7.        检查消息的标识符,处理时会参考消息里的附加信息。
  8.        
  9.        窗口过程并不会处理其接收到的每一个消息,如果它处理不了接收到的消息,它会将些消息
  10.        返回给系统以寻求默认的处理,完成默认处理的函数是DefWindowProc,处理完成之后会
  11.        返回默认的处理结果,接收消息的窗口过程会将此结果看作自己处理后的结果并返回之。
  12.        多数的窗口过程只处理少数的消息,大部分的消息都由默认的窗口过程来处理。
  13.        
  14.        因为一个窗口过程可以处理一个窗口类的所有窗口,所以为了明确窗口类的哪个窗口会受到
  15.        消息的影响,就需要窗口句柄的帮助。
  16.     消息过滤
  17.         通过函数GetMessage和PeekMessage可以有选择性的从消息队列中提取消息,过滤
  18.         器是一个区间内的消息标识符或者窗口句柄,或者二者都指定。当消息延迟到达消息
  19.         队列后,程序可以通过这种方式检查消息的存在性。同样如果程序想优先处理硬件
  20.         消息时,这一点也很有用。
  21.         WM_KEYFIRST和WM_KEYLAST可以作为提取所有键盘消息的过滤器。WM_MOUSEFIRST
  22.         WM_MOUSELAST同样可以作为提取所有光标消息的过滤器。
  23.         使用消息过滤最需要注意的一点是要确保要提取的消息类型有机会被投掷到消息队列
  24.         中,如果要过滤的消息不能被投掷到消息队列中时,有时会影响整个程序的性能。
  25.         比如GetMessage是取到消息之后才返回,而如果要提取的消息一直不存在,则会出现
  26.         死循环的现象。
  27.     投掷和发送消息
  28.         每一个应用程序都可以投掷或发送消息,投掷消息是将消息复制到消息队列中,而
  29.         发送消息则是将消息直接作为参数发送给窗口过程。PostMessage可以实现投掷
  30.         消息的功能,SendMessage,BroadcastSystemMessage,SendMessageCallback,
  31.         SendMessageTimeOut,SendNotifyMessage,SendDlgItemMessage可以实现发送
  32.         消息的功能。
  33.         投掷消息
  34.             投掷消息通常用于通知一个窗口去完成指定的任务。PostMessage会构造一个
  35.             MSG结构然后将其复制到消息队列中。然后程序的消息循环最终会取得这个消息
  36.             然后将其发送给指定的窗口去处理。
  37.             投掷消息时,程序可以不用指定窗口句柄,如果投掷时指定窗口句柄为空,则
  38.             消息会被投掷到当前线程的消息队列中,因为没有指定窗口句柄,所以程序的
  39.             消息循环必须处理这个消息,通过这种方式可以实现创建一个消息而应用于整个
  40.             程序而不是特定的窗口。
  41.             另外如果想向系统里所有的顶级窗口发送,可以将窗口句柄设置为HWND_TOPMOST。
  42.             编程过程中一个常见的错误认识是认为PostMessage总能成功地投掷出一个消息,
  43.             这是不对的,比如当消息队列满的时候。所以在使用这个函数的时间要检查
  44.             这的返回值,如果返回值说投掷失败,我们就需要再进行投掷操作。
  45.         发送消息
  46.             发送消息通常用于通知窗口过程立即去执行一个任务。SendMessage将消息发送
  47.             到相关的窗口过程,此函数会等到消息被处理之后再返回,子窗口与父窗口通常
  48.             以就发送消息的方式进行通信,
  49.             SendMessageCallback区别于SendMessage的地方在于它发送完消息之后会立即
  50.             返回,消息被处理完之后,系统会调用相应的回调函数。   
  51.             通过函数InSendMessage和InSendMessageEx,窗口过程可以检查它处理的消息
  52.             是否来自另外一个线程,消息源会决定消息是否处理的时候,这两个函数就有了
  53.             用场。
  54. */
下载方式:https://pan.quark.cn/s/b4d8292ba69a 在构建食品品牌的市场整合营销推广方案时,我们必须首先深入探究品牌的由来、顾客的感知以及市场环境。 此案例聚焦于一款名为“某饼干产品”的食品,该产品自1998年进入河南市场以来,经历了销售业绩的波动。 1999至2000年期间,其销售额取得了明显的上升,然而到了2001年则出现了下滑。 在先前的宣传活动中,品牌主要借助大型互动活动如ROAD SHOW来吸引顾客,但收效甚微,这揭示了宣传信息顾客实际认同感之间的偏差。 通过市场环境剖析,我们了解到消费者对“3+2”苏打夹心饼干的印象是美味、时尚且充满活力,但同时亦存在口感腻、价位偏高、饼身坚硬等负面评价。 实际上,该产品可以塑造为兼具美味、深度创新性的休闲食品,适宜在多种情境下分享。 这暗示着品牌需更精确地传递产品特性,同时消解消费者的顾虑。 在策略制定上,我们可考虑将新产品原有的3+2苏打夹心进行协同推广。 这种策略的长处在于能够借助既有产品的声誉和市场占有率,同时通过新产品的加入,刷新品牌形象,吸引更多元化的消费群体。 然而,这也可能引发一些难题,例如如何合理分配新旧产品间的资源,以及如何保障新产品的独特性和吸引力不被既有产品所掩盖。 为了提升推广成效,品牌可以实施以下举措:1. **定位修正**:基于消费者反馈,重新确立产品定位,突出其美味、创新共享的特性,减少消费者感知的缺陷。 2. **创新宣传**:宣传信息应消费者的实际体验相契合,运用更具魅力的创意手段,例如叙事式营销,让消费者体会到产品带来的愉悦和情感共鸣。 3. **渠道选择**:在目标消费者常去的场所开展活动,例如商业中心、影院或在线平台,以提高知名度和参度。 4. **媒体联...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值