2008-10-12 46 views
3

我想盡可能準確地將Windows系統上的系統光標捕獲爲位圖。 爲我提供的API是我所知的GetCursorInfo,DrawIconEx。捕獲動畫系統光標的哪一步正在Windows上顯示

的動作的簡單鏈是:

  • 通過使用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

不幸的是,我不認爲有這麼公開了動畫光標的當前幀的Windows API。我認爲這就是你所追求的:在製作快照時光標的外觀。

0

我懷疑你錯過了一個步驟。

你需要創建一個位圖來選擇你的設備上下文,否則你的位圖只是一個像素。

見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 
+0

嗨大衛, 我需要知道正在繪製動畫光標的哪一步,以便我可以將該值傳遞給DrawIconEx。有關創建DC的註釋將替換所有關於創建DC,位圖,選擇位圖的代碼。這不是問題。 – 2008-10-13 08:33:20

相關問題