Захватите, какой шаг анимированного системного курсора отображается в Windows - PullRequest
3 голосов
/ 12 октября 2008

Я хочу записать в качестве растрового изображения системный курсор на ОС Windows как можно точнее. Предоставленный API для этого, насколько мне известно, GetCursorInfo, DrawIconEx.

Простая цепочка действий:

  • Получить курсор с помощью GetCursorInfo
  • Нарисуйте курсор в DC памяти с помощью DrawIconEx.

Вот как примерно выглядит код.

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
}

Теперь кто-нибудь знает, как я мог узнать, какой шаг анимированного курсора рисуется (мне нужно значение, которое затем можно передать параметру istepIfAniCur в DrawIconEx ...)? В настоящее время приведенный выше код, очевидно, всегда отображает только первый шаг анимированного курсора.

Я подозреваю, что это нелегко сделать, но все равно стоит спросить.

Ответы [ 2 ]

2 голосов
/ 01 мая 2009

К сожалению, я не думаю, что есть Windows API, который раскрывает текущий кадр анимации курсора. Я предполагаю, что это то, что вам нужно: взгляд курсора в момент, когда вы делаете снимок.

0 голосов
/ 13 октября 2008

Я подозреваю, что вы пропустили шаг.

Вам необходимо создать растровое изображение для выбора в контексте вашего устройства, в противном случае ваша растровая карта - это всего лишь один пиксель.

См. CreateCompatibleBitmap в документации MSDN:

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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...