当前位置:首页 >百科 >请将所有未处理的消息传递给 DefWindowProc 对于其他的消息消息

请将所有未处理的消息传递给 DefWindowProc 对于其他的消息消息

2024-06-28 06:58:30 [百科] 来源:避面尹邢网

请将所有未处理的未处消息传递给 DefWindowProc

作者:漫漫开发路 开发 前端 自定义键盘按钮(如音量控制按钮)也不起作用(如果焦点在此帮助程序窗口上),因为它忽略了将 WM_APPCOMMAND 消息传递给 DefWindowProc 函数。消息

在之前的传递一篇文章中,我曾提到:如果你希望拒绝一次设备移除查询请求,未处则需要返回一个特殊的消息 BROADCAST_QUERY_DENY 值,因为太多的传递程序开发者认为,他们已经覆盖了所有 Windows 消息的未处处理了,对于其他的消息消息,直接返回 0 就可以了。传递

从那时候开始,未处操作系统引入了很多新的消息消息,这些消息中的传递很大一部分都是在 DefWindowProc 中进行了默认的处理。
时不时的未处,我会碰到一些应用程序会这样假设:微软应该从来不会优化窗口管理器组件吧?对于那些我不需要处理的消息消息,我直接返回 0 就可以了,传递问题不大。

请将所有未处理的消息传递给 DefWindowProc 对于其他的消息消息

其实,这些应用程序甚至都没有处理所有现有的旧消息!

请将所有未处理的消息传递给 DefWindowProc 对于其他的消息消息

我们看一个例子,在一个应用程序中,它有一个帮助窗口,这个窗口会处理一些它感兴趣的消息,然后对于所有其他消息,它直接返回了 0。结果就是:用户连关机都关不了,因为应用程序对系统发出的广播消息 WM_QUERYENDSESSION 返回了一个 0,这意味着,应用程序对操作系统说:”等等,请不要关机”。

请将所有未处理的消息传递给 DefWindowProc 对于其他的消息消息

我猜这个应用程序的开发者会意味用户会在关机前先手动关闭他的应用程序吧。

另外,自定义键盘按钮(如音量控制按钮)也不起作用(如果焦点在此帮助程序窗口上),因为它忽略了将 WM_APPCOMMAND 消息传递给 DefWindowProc 函数。

因此,我再次恳求你:如果你不处理窗口过程中的消息,请将其传递给 DefWindowProc 函数。你的用户真的会谢。

另外有个小细节需要注意:如果你使用的是框架窗口,请遵循该框架的协议来指示你希望进行默认消息处理。例如,对话框过程不会将未经处理的消息传递给 DefWindowProc 函数。它们仅返回 FALSE 以指示应进行默认处理。

总结

我想这里作者的原则很简单:对于你不想处理的消息,不要处理并简单返回 0,而是交给系统默认处理函数 DefWindowProc。

否则,各种意外会发生。

责任编辑:武晓燕 来源: 今日头条 消息自定义函数

(责任编辑:知识)

    推荐文章
    热点阅读