2009-11-09 82 views
1

我想獲取.cur文件的高度和寬度,而無需查看其格式。我試圖使用LoadCursorFromFile()來獲得一個HCURSOR,我想有一個API函數來獲取HCURSOR的信息,但我發現GetCursorInfo()不是我想要的。如何知道HCURSOR對象的大小

有什麼辦法可以獲得HCURSOR對象的高度和寬度嗎?

回答

4

Windows中的圖標和光標之間的API存在一些重疊。您可以用HCURSOR和HICON撥打電話GetIconInfoEx。你回來的結構將有關於熱點的信息。

我沒有看到獲取實際大小的方法。從技術上講,所有光標圖標都是固定大小,您可以通過詢問系統(使用GetSystemMetrics)獲得SM_CXCURSORSM_CYCURSOR。那些看起來更小的實際上是那個尺寸,他們只是有很多透明像素。如果您必須知道表面大小,則必須提取掩碼並掃描這些位以找出邊界矩形。

+0

很多的幫助。 +1 – Gohan 2010-03-17 09:31:16

0

MSDN

的nWidth和nHeight參數參數必須指定的寬度和高度由當前顯示驅動程序支持,因爲系統不能創建其他尺寸的遊標。要確定顯示驅動程序支持的寬度和高度,請使用GetSystemMetrics函數,並指定SM_CXCURSOR或SM_CYCURSOR值。

3

通用的C++代碼,對任何光標:

SIZE GetSize(HCURSOR ico) 
{ 
    SIZE res = {0}; 
    if (ico) 
    { 
     ICONINFO info = {0}; 
     if (::GetIconInfo(ico, &info)!=0) 
     { 
      bool bBWCursor = (info.hbmColor==NULL); 
      BITMAP bmpinfo = {0}; 
      if (::GetObject(info.hbmMask, sizeof(BITMAP), &bmpinfo)!=0) 
      { 
       res.cx = bmpinfo.bmWidth; 
       res.cy = abs(bmpinfo.bmHeight)/(bBWCursor ? 2 : 1); 
      } 

      ::DeleteObject(info.hbmColor); 
      ::DeleteObject(info.hbmMask); 
     } 
    } 
    return res; 
} 
+0

使用SM_CXCURSOR或SM_CYCURSOR是不正確的。例如:切換到控制面板中的巨大光標大小後,SM_CXCURSOR和SM_CYCURSOR的值保持爲32x32。 – 23W 2012-11-08 18:30:52

相關問題