捕获动画系统光标的哪一步正在Windows上显示

时间:2008-10-12 18:50:57

标签: c++ winapi

我想尽可能准确地在Windows操作系统上捕获系统光标作为位图。 据我所知,提供的API是GetCursorInfo,DrawIconEx。

简单的行动链是:

  • 使用GetCursorInfo
  • 获取光标
  • 使用DrawIconEx将光标绘制在内存DC中。

以下是代码的粗略表示。

CURSORINFO  CursorInfo;

(VOID)memset(&CursorInfo, 0, sizeof(CursorInfo));
CursorInfo.cbSize = sizeof(CursorInfo);

if (GetCursorInfo(&CursorInfo) &&
    CursorInfo.hCursor)
{
    // ... create here the memory DC, memory bitmap

    boError |= !DrawIconEx(hCursorDC,   // device context
        0,              // xLeft
        0,              // yTop
        CursorInfo.hCursor,     // cursor handle
        0,              // width, use system default
        0,              // height, use system default
        0,              // step of animated cursor !!!!!!!!!
        NULL,               // flicker free brush, don't use it now
        DI_MASK | DI_DEFAULTSIZE);  // flags

    // ... do whatever we want with the cursor in our memory DC
}

现在,任何人都知道如何绘制动画光标的哪一步(我需要将值传递给DrawIconEx的istepIfAniCur参数...)?目前,上面的代码显然总是只呈现动画光标的第一步。

我怀疑这不容易做到,但无论如何都值得问。

2 个答案:

答案 0 :(得分:2)

不幸的是,我不认为有一个Windows API会公开游标动画的当前帧。我假设你正在追求的是:你制作快照的瞬间光标的外观。

答案 1 :(得分:0)

我怀疑你错过了一步。

您需要创建一个位图来选择您的设备上下文,否则您的位图只是一个像素。

请参阅MSDN文档中的CreateCompatibleBitmap:

HBITMAP CreateCompatibleBitmap(
  HDC hdc,        // handle to DC
  int nWidth,     // width of bitmap, in pixels
  int nHeight     // height of bitmap, in pixels
);

使用DrawIconEx,UINT istepIfAniCur参数允许您选择绘制哪个帧(如果它是动画光标)。

它在你的评论中说:

0,  // step of animated cursor