2009-11-09 86 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

相关问题