【发布时间】:2012-06-05 02:03:40
【问题描述】:
我正在编写有趣的小工具。我希望能够在与原始鼠标不同的位置绘制第二个(或更多)鼠标指针图标,但要根据原始鼠标的移动来移动它。
我知道如何跟踪鼠标的移动,但我不知道如何绘制/重绘鼠标指针;谁能帮忙?
【问题讨论】:
我正在编写有趣的小工具。我希望能够在与原始鼠标不同的位置绘制第二个(或更多)鼠标指针图标,但要根据原始鼠标的移动来移动它。
我知道如何跟踪鼠标的移动,但我不知道如何绘制/重绘鼠标指针;谁能帮忙?
【问题讨论】:
您可以使用以下代码:
CURSORINFO ci;
ci.cbSize = sizeof(CURSORINFO);
GetCursorInfo(&ci);
接下来你可以通过调用来绘制光标:
DrawIcon(ContextDC, YourXPosition, YourYPosition, ci.hCursor);
如果您需要有关光标的其他信息,例如热点,请检查 ICONINFO 结构:
ICONINFO ii;
GetIconInfo(ci.hCursor, &ii);
【讨论】:
CURSORINFO的大小,所以ci.cbSize = sizeof(ci);
这可以这样做:
使用LoadCursor() 从您的应用程序中获取当前鼠标光标。只需指定 NULL 和您想要的游标。或者只是为光标加载位图。现在,你有一个位图。
下一步是获取桌面的设备上下文:GetWindowDC(NULL)。这将使您有机会在任何地方的桌面上绘图。
很有可能您需要将CreateCompatibleBitmap() 应用于#1 的图像,并在#2 获得DC。
现在,使用 BitBlt() 将位 OUT 从在 #2 获得的 DC 复制到您想要放置光标的位置的保存图像(您需要创建这些)。
现在,把#3得到的图像放到#2得到的桌面DC上你想要的位置。
当用户移动鼠标时,使用#4 保存的数据恢复桌面上的图像。释放所有你不需要的东西(是的,这是强制性的)。
然后从 #1 重新开始。
这两个链接可能会有所帮助:
Bitmaps, Device Contexts and BitBlt
祝你好运!
【讨论】: