处理WM_CONTEXTMENU消息中需要注意的地方
在开始我们的IContextMenu系列文章之前,我想先开个小差,讲讲有关于WM_CONTEXTMENU这个消息的微妙之处。
首先,我们看看下面来自于头文件中关于HANDLE_WM_CONTEXTMENU宏的定义。
显然,在头文件中所定义的HANDLE_WM_CONTEXTMENU宏没有考虑多显示器支持。
第二个需要注意的地方是,WM_CONTEXTMENU消息不仅可以通过鼠标右键来触发,而且还可以通过键盘按键来触发。如果你的台式机有一台104按键的键盘,你可以观察下,键盘空格键的右边会有一个菜单按键。如果你的电脑是一台笔记本电脑,则情况可能有些不同,因为笔记本电脑的键盘很难被标准化,各个厂家都会有一些独特的定制按键。但不管怎么样,你都可以按下Shift + F10 来实现相同的效果。
当用户从键盘上按下菜单按键触发了上下文菜单时,x和y坐标都会变成-1。在这种情况下,你应该在当前选中的条目上(或者当前被多个选中的条目上)来显示上下文菜单,如果你不注意这个细节,则可能会对无效坐标(-1, -1)执行点击测试(Hit-Testing),而点击测试不会为你返回任何有意义的东西。
总结
好了,现在有关于WM_CONTEXTMENU消息的细节就介绍到这里,希望对你有所帮助。
后面,我们会重新回到游戏主线情节,即IContextMenu接口系列文章。
最后
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《Pitfalls in handling the WM_CONTEXTMENU message》
最近我写了个东西
正如你们所知道的,拓扑梅尔智慧办公平台(Topomel Box)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。
我想:你值得拥有。
相关文章
- redisTemplate处理/获取redis消息队列
- 消息积压---一般处理方法
- spring boot:rabbitmq用topic模式发送接收消息(spring boot 2.4.4)
- EQueue - 一个纯C#写的分布式消息队列介绍2
- ActiveMQ的queue以及topic两种消息处理机制分析
- 160. 如何根据 SAP Fiori UI 界面上的错误消息,找到后台 ABAP 对应的消息 ID
- 关于 SAP UI5 getSAPLogonLanguage is not a function 的错误消息以及 API 版本的讨论
- UI5应用如果出现白屏但是没有任何错误消息打印出来,应该如何处理
- 如何处理Eclipse错误消息 The declared package does not match the expected package
- 如何处理OData错误消息Property XX at offset XX is invalid
- Can't load AMD 64-bit .dll on a IA 32-bit platform错误消息的处理
- 如何处理Docker错误消息:please add——insecure-registry
- 如何处理SAP Fiori Launchpad错误消息:Could not start the app due to a configuration problem
- UI5 extension project clone到WebIDE里后报找不到.project.json错误消息的处理
- 如何处理在webIDE里使用git push推送修改到github网站的错误消息
- Fiori里创建task出现错误消息Contact your system administrator的处理
- 如何处理Fiori错误消息 - User Parameter is not maintained
- 使用node https module创建服务器遇到的mac verify failure错误消息
- Qt实现移动端Toast提示消息
- 【高并发】为何高并发系统中都要使用消息队列?这次彻底懂了!
- 为什么使用消息队列
- 【IPC进程间通信之四】数据复制消息WM_COPYDATA
- 窗口消息处理对象的传递
- 第二人生的源码分析(四十二)实现消息处理的线程类
- SIP消息
- MINA核心结构和处理消息的逻辑流程