鼠标指针渲染器

sif*_*dil 1 c++ windows api winapi

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

Dai*_*Dai 5

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

为了使延迟最小化,还必须对光标使用此特殊技巧。如果您编写了一个绘制到Windows表面的程序(例如,使用GDI或什至通过OpenGL或Direct3D),您会发现它落后于实际光标几毫秒,这对于用户来说非常容易注意到(这就是现代RTS的原因)游戏使用此硬件光标功能,而不是自己重新实现。

我知道无法扩展此功能-您将不得不反汇编修改Windows和图形驱动程序以实现绘制多个光标的功能。

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

我可能建议您看看Windows 7中引入的Windows多点触摸支持,它确实支持多个同时的“光标”,尽管它是针对手指而不是鼠标的。