【问题标题】:Draw mouse pointer icon?绘制鼠标指针图标?
【发布时间】:2012-06-05 02:03:40
【问题描述】:

我正在编写有趣的小工具。我希望能够在与原始鼠标不同的位置绘制第二个(或更多)鼠标指针图标,但要根据原始鼠标的移动来移动它。

我知道如何跟踪鼠标的移动,但我不知道如何绘制/重绘鼠标指针;谁能帮忙?

【问题讨论】:

    标签: c++ windows mouse gdi


    【解决方案1】:

    您可以使用以下代码:

    CURSORINFO ci;
    ci.cbSize = sizeof(CURSORINFO);
    GetCursorInfo(&ci);
    

    接下来你可以通过调用来绘制光标:

    DrawIcon(ContextDC, YourXPosition, YourYPosition, ci.hCursor);
    

    如果您需要有关光标的其他信息,例如热点,请检查 ICONINFO 结构:

    ICONINFO ii;
    GetIconInfo(ci.hCursor, &ii);
    

    【讨论】:

    • 这就是我一直在寻找的答案,因为 DrawCursor() 不存在。 MSDN 说:DrawIcon() 函数:将图标或光标绘制到指定的设备上下文中。
    • 别忘了初始化CURSORINFO的大小,所以ci.cbSize = sizeof(ci);
    【解决方案2】:

    这可以这样做:

    1. 使用LoadCursor() 从您的应用程序中获取当前鼠标光标。只需指定 NULL 和您想要的游标。或者只是为光标加载位图。现在,你有一个位图。

    2. 下一步是获取桌面的设备上下文:GetWindowDC(NULL)。这将使您有机会在任何地方的桌面上绘图。

    3. 很有可能您需要将CreateCompatibleBitmap() 应用于#1 的图像,并在#2 获得DC。

    4. 现在,使用 BitBlt() 将位 OUT 从在 #2 获得的 DC 复制到您想要放置光标的位置的保存图像(您需要创建这些)。

    现在,把#3得到的图像放到#2得到的桌面DC上你想要的位置。

    当用户移动鼠标时,使用#4 保存的数据恢复桌面上的图像。释放所有你不需要的东西(是的,这是强制性的)。

    然后从 #1 重新开始。

    这两个链接可能会有所帮助:

    Bitmaps, Device Contexts and BitBlt

    Capturing an Image

    祝你好运!

    【讨论】:

    • 这永远不会以干净的方式工作。想象一个显示动态内容的窗口,就像显示动画的浏览器一样。您想在用户移动鼠标时复制回旧内容,然后您会得到很多工件。简单地忘记它。
    • 我只需加载光标位图,然后创建一个单独的透明窗口来显示它,然后根据需要移动该窗口。代码更简洁、更容易,而且根本不用在桌面上乱七八糟
    猜你喜欢
    • 1970-01-01
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-20
    • 1970-01-01
    • 2011-08-24
    • 2013-09-09
    相关资源
    最近更新 更多