鼠标指针渲染器
Mouse pointer renderer
我正在考虑用c++创建一个针对Windows 7的软件(使用Windows api),允许在同一台PC上的第二个鼠标指针,所以我的问题是Windows的哪个部分是处理鼠标指针的渲染?我相信理解它的实际工作原理将允许我模仿它,以便渲染第二个鼠标指针。谢谢你。
Windows的窗口系统只支持一个"true"游标:它是2D图形芯片组的一个低级功能(这就是为什么游标不会出现在屏幕截图中)。Windows留出了一个单独的视频内存区域来保存光标的位图:带有AND/XOR通道的DDB(设备相关位图)(用于索引不透明度和颜色反转),或用于alpha透明光标的32bpp RGBA表面(这就是"显示光标阴影"功能的实现方式)。我的理解是,光标被应用于实际输出图像,因为它被输出设备"扫描"(例如VGA-out的DAC或任何DVI和HDMI使用),所以它从不存在于帧缓冲区中-这就是光标在我们合成窗口管理器之前的工作方式,而不必要求应用程序重新绘制光标所在的位置。
对游标使用这种特殊技巧对于将延迟降至最低也是必要的。如果你编写了一个绘制到窗口表面的程序(例如,使用GDI或甚至通过OpenGL或Direct3D),你会发现它比真正的光标滞后几毫秒,这很容易被用户注意到(这就是为什么现代RTS游戏使用这种硬件光标功能,而不是自己重新实现它)。
据我所知,没有办法扩展这个功能——你必须是一个拆卸之神,才能修改Windows和图形驱动程序来实现绘制多个光标的能力。
这是展示的一面。对多个游标的实际应用级支持也很棘手——记住,游标移动对应于发送给hWnds的各种与鼠标相关的窗口消息。使用两个游标的问题是,这些消息会发生冲突,尽管理论上,如果它们被正确地序列化到单个队列中,应该可以工作。应用程序会出现问题,许多人会假设,例如,一次只有一个控件可以处于悬停状态,如果你有多个光标,那么应用程序只会尊重最近的光标消息。
我可能会建议看看Windows的多点触摸支持,在Windows 7中引入,它确实支持多个同时的"光标",尽管它是针对手指的,而不是鼠标。
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 如何在启动时在Qt应用程序中隐藏鼠标指针
- Wince 6.0如何在操作系统靴子后移动鼠标指针
- QTEXTEDIT:在鼠标指针下获取单词
- 如何在启动时隐藏鼠标指针
- OpenGL - 旋转玩家位置以面对鼠标指针
- 使用 OpenCV 将鼠标指针悬停在图像上时在图像上打印像素坐标
- 在 MFC 中捕获鼠标指针形状更改事件
- 如何将光标(鼠标指针对象)转换为bmp图像的自动序列
- 使用QStyledItemDelegate将鼠标悬停在文本上时,如何更改鼠标指针
- 将原始鼠标/指针数据转换为有意义的内容
- 如何恢复我的鼠标指针时,它不可见的QWSSERVER::SetCursorVisible(false)
- 鼠标指针渲染器
- 有一个Quad跟随鼠标指针(没有Glut)
- 用指针和引用混淆自己,c++(从WinAPI获取鼠标坐标)