1

我正在考虑创建一个针对 Windows 7 的 c++ 软件(使用 Windows api),它允许在同一台 PC 上使用第二个鼠标指针,所以我的问题是 Windows 的一部分正在处理鼠标指针的渲染?我相信了解它的实际工作原理将使我能够模仿它以呈现第二个鼠标指针。谢谢你。

4

1 回答 1

7

Windows 的窗口系统只支持一个“真正的”光标:它是 2D 图形芯片组的低级功能(这就是光标不会出现在屏幕截图中的原因)。Windows 留出一个单独的视频内存区域来保存光标的位图:具有 AND/XOR 通道(用于索引不透明度和颜色反转)的 DDB(设备相关位图)或用于 alpha 透明的 32bpp RGBA 表面光标(这是“显示光标阴影”功能的实现方式)。我的理解是光标应用于实际输出图像,因为它被输出设备“扫描”(例如用于 VGA 输出的 DAC 或任何 DVI 和 HDMI 使用),

对光标使用这个特殊技巧也是必要的,以将延迟保持在最低限度。如果您编写一个绘制到窗口表面的程序(例如,使用 GDI 甚至通过 OpenGL 或 Direct3D),您会看到它落后于真实光标几毫秒,这对用户来说很容易注意到(这就是现代 RTS 的原因游戏使用此硬件光标功能而不是自己重新实现它)。

据我所知,没有办法扩展此功能 - 您必须成为反汇编之神才能修改 Windows 和图形驱动程序以实现绘制多个光标的能力。

这就是事物的呈现方面。对多个光标的实际应用程序级支持也很棘手 - 请记住,光标移动对应于发送到 hWnds 的各种与鼠标相关的窗口消息。两个游标的问题是这些消息会发生冲突,尽管理论上它应该可以工作,前提是它们被正确地序列化到单个队列中。应用程序会出现问题,许多人会假设,例如,一次只能有一个控件处于 Hover 状态,如果您有多个游标,那么应用程序只会尊重最近的游标消息。

我可能会建议查看在 Windows 7 中引入的 Windows 的多点触控支持,它确实支持多个同时的“光标”,尽管它是为手指而不是鼠标设计的。

于 2013-04-24T00:44:47.733 回答