翻译《The Old New Thing》 - No, really, you need to pass all unhandled messages to DefWindowProc

No, really, you need to pass all unhandled messages to DefWindowProc - The Old New Thing (microsoft.com)icon-default.png?t=N7T8https://devblogs.microsoft.com/oldnewthing/20060425-16/?p=31413

Raymond Chen 2006年04月25日


不,实际上,您需要将所有未处理的消息传递给 DefWindowProc

        在之前的讨论中,我提到了在拒绝设备移除请求时,需要返回一个特定的值。这是因为有些程序错误地认为它们已经处理了所有的Windows消息,对于未处理的消息,它们只是简单地返回零。

        但实际上,随着时间的推移,Windows系统增加了许多新的消息类型,这些消息在默认窗口处理函数DefWindowProc中都有相应的处理逻辑。 然而,我经常发现有些程序仍然存在这样的误解,它们认为微软不会对窗口管理器进行改进,因此对于未处理的消息,这些程序还是简单地返回零。更糟糕的是,有些程序甚至没有处理所有已知的消息。

        例如,有一个程序的辅助窗口只处理少数几种消息,而对其他消息则一律返回零。这导致了一些严重的问题,比如你无法正常关闭计算机,因为返回零会阻止关机过程。

        此外,如果你的程序焦点在这个辅助窗口上,一些自定义的键盘快捷操作(比如音量控制)也会失效,因为它没有将相关的消息传递给DefWindowProc来处理。

        所以,我想再次强调:如果你的窗口程序中有消息没有被处理,请务必将其传递给DefWindowProc

        这样做可以确保你的程序能够正常响应所有可能的Windows消息,从而避免上述问题。你的用户会因为你的这一小小改进而感激你的。 对于那些可能误解我意思的人,我补充一点:如果你使用的是某个特定的编程框架,那么请遵循该框架的规则来处理未处理的消息。例如,在对话框程序中,你不需要将未处理的消息传递给DefWindowProc,你只需要返回FALSE,框架就会自动进行默认的处理。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

0x0007

可不可奖励我吃只毛嘴鸡 馋😋

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值