我正在考虑用C++针对Windows 7(使用Windows api)创建一个允许在同一台PC上使用第二个鼠标指针的软件,所以我的问题是Windows的女巫部分是处理鼠标的渲染指针? 我相信,理解它的实际工作方式将允许我模仿它以呈现第二个鼠标指针。 谢谢。鼠标指针渲染器
Q
鼠标指针渲染器
0
A
回答
4
Windows的窗口系统只支持一个“true”光标:它是2D图形芯片组的低级功能(这就是为什么光标不显示在屏幕截图中)。 Windows将保留光标位图的独立视频内存区域设置为独立区域:具有AND/XOR通道(用于索引的不透明度和颜色反转)的DDB(设备相关位图),或用于透明度为alpha的32bpp RGBA表面游标(这是如何实现“显示光标阴影”功能)。我的理解是,光标被应用于实际的输出图像,因为它由输出设备“扫描”(例如DAC用于VGA输出或任何DVI和HDMI使用),所以它在帧缓冲区中从不存在 - 这就是光标在我们合成窗口管理器之前的几天就工作过了,并且无需让应用程序在光标所在的位置重绘自己。
对于光标使用这个特殊的技巧也是必要的,以保持延迟最小。如果你编写一个绘制到窗口表面的程序(例如使用GDI甚至通过OpenGL或Direct3D),你会发现它比真实光标滞后几毫秒,这对用户来说很容易知道(这就是为什么现代RTS游戏使用这个硬件游标功能而不是自己重新实现)。
我没有办法扩展这个功能,我知道 - 你将不得不成为反汇编之神来修改Windows和图形驱动程序来实现绘制多个游标的能力。
这就是事物的表现方面。对多个游标的实际应用程序级支持也很棘手 - 请记住,光标移动对应于各种与鼠标相关的窗口消息发送给hWnds。两个游标的问题是这些消息会冲突,尽管理论上它应该工作,只要它们被正确地序列化到一个队列中即可。应用程序会出现问题,很多人会假设,例如,只有一个控件可以一次处于Hover状态,如果您有多个游标,那么应用程序只会尊重最新的游标消息。
我可能会建议您看看Windows 7中引入的多点触控支持,它支持多个同时“游标”,虽然它只针对手指而不是鼠标。
相关问题
- 1. 渲染鼠标悬停
- 2. WebRTC鼠标指针
- 3. 油污2D:渲染空指针异常
- 4. 隐藏鼠标指针
- 5. 鼠标指针插入
- 6. 移动鼠标指针
- 7. UWP MapControl鼠标/指针在
- 8. 多个鼠标指针?
- 9. 使鼠标指针图像
- 10. Collada模型渲染鼠标移动
- 11. linux:双鼠标 - 有多个鼠标指针的多个鼠标?
- 12. Android openGL渲染器返回空指针异常
- 13. 使用鼠标指针标记边缘
- 14. 如何将鼠标指针更改为手指指针?
- 15. “服务器端渲染”是指双方渲染?
- 16. 指向多个渲染目标
- 17. 画布:基于指针的视口/包含鼠标指针
- 18. XNA使用鼠标旋转播放器而不移动鼠标指针
- 19. Javascript/Onclick - 鼠标移动时鼠标指针
- 20. 获取鼠标指针下的DIV列表(鼠标事件)
- 21. 如何更改鼠标指针上的鼠标悬停分手?
- 22. 没有鼠标指针CentOs7与协同
- 23. 在鼠标指针下获取文字
- 24. Java Swing中的鼠标指针问题
- 25. QT QML鼠标指针旋转
- 26. QTextEdit:在鼠标指针下得到字
- 27. 获取鼠标指针下的文本
- 28. 动画/交互式鼠标指针
- 29. Gtk +鼠标指针离开事件
- 30. 将鼠标指针改为R(Shiny
谢谢您的评论和建议。我不认为这很复杂。 – sifadil 2013-04-24 00:56:20
顺便说一下,屏幕录制软件实际上能够记录鼠标光标,所以他们只是在视频上放置假的光标形状? – sifadil 2013-04-24 01:08:52
@Dai:应用程序可以通过使用[原始输入](http://msdn.microsoft.com/en-us/library/windows/desktop/ms645536.aspx)API来支持多个鼠标而不用担心碰撞。这是因为你必须注册你感兴趣的特定设备,然后通知消息告诉你哪个设备正在发送通知。 MSDN甚至提到了这种可能性:“即使应用程序来自同一类型的设备,应用程序也可以区分输入源**例如,两个鼠标设备**” – 2013-04-24 01:14:58