我如何知道HCURSOR对象的大小

时间:2009-11-09 08:06:21

标签: winapi mouse-cursor

我想获得.cur文件的高度和宽度,而不考虑其格式。

我尝试使用LoadCursorFromFile()来获取HCURSOR,我想有一个API函数来获取HCURSOR信息,但我发现GetCursorInfo()根本不是我想要的。

有没有办法获得HCURSOR对象的高度和宽度?

3 个答案:

答案 0 :(得分:5)

Windows中的图标和光标之间的API存在一些重叠。您可以使用HCURSOR以及HICON呼叫GetIconInfoEx。您获得的结构将包含有关热点的信息。

我没有看到获得实际尺寸的方法。从技术上讲,所有光标图标都是固定大小,您可以通过询问SM_CXCURSORSM_CYCURSOR的系统(GetSystemMetrics)来获取。看起来较小的那些实际上就是那个尺寸,它们只有很多透明像素。如果您必须知道表观大小,则必须提取掩码并扫描位以找出边界矩形。

答案 1 :(得分:3)

Universal 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;
}

答案 2 :(得分:0)

来自MSDN

nWidth和nHeight参数必须指定当前显示驱动程序支持的宽度和高度,因为系统无法创建其他大小的游标。要确定显示驱动程序支持的宽度和高度,请使用GetSystemMetrics函数,指定SM_CXCURSOR或SM_CYCURSOR值。