4 Stimmen

Erfassen, welcher Schritt eines animierten Systemcursors unter Windows angezeigt wird

Ich möchte den Systemcursor auf Windows-Betriebssystemen so genau wie möglich als Bitmap erfassen. Die dafür vorgesehene API ist meines Wissens GetCursorInfo, DrawIconEx.

Die einfache Handlungskette lautet:

  • Cursor abrufen mit GetCursorInfo
  • Malen Sie den Cursor in einem Speicher-DC mit DrawIconEx.

So sieht der Code in etwa aus.

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
}

Weiß jemand, wie ich herausfinden kann, welcher Schritt des animierten Cursors gezeichnet wird (ich benötige den Wert, der dann an den istepIfAniCur-Parameter von DrawIconEx übergeben werden kann...)? Der obige Code rendert derzeit offensichtlich immer nur den ersten Schritt eines animierten Cursors.

Ich vermute, dass dies nicht einfach zu bewerkstelligen ist, aber es lohnt sich trotzdem, danach zu fragen.

2voto

Adrian McCarthy Punkte 42872

Leider glaube ich nicht, dass es eine Windows-API gibt, die das aktuelle Bild der Cursor-Animation preisgibt. Ich nehme an, das ist es, was Sie suchen: das Aussehen des Cursors in dem Moment, in dem Sie den Schnappschuss machen.

0voto

David L Morris Punkte 1431

Ich vermute, dass Sie einen Schritt übersehen haben.

Sie müssen eine Bitmap erstellen, die Sie in Ihrem Gerätekontext auswählen können, da Ihre Bitmap sonst nur aus einem einzigen Pixel besteht.

Siehe CreateCompatibleBitmap in der MSDN-Dokumentation:

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

Bei DrawIconEx können Sie mit dem UINT-Parameter istepIfAniCur festlegen, welches Bild gezeichnet werden soll, wenn es sich um einen animierten Cursor handelt.

So steht es in Ihren Kommentaren:

0,  // step of animated cursor

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X