How do I know the size of a HCURSOR object

喜夏-厌秋 提交于 2020-08-20 08:04:31

问题


I want to get the height and width of a .cur file without look into its format.

I try to use LoadCursorFromFile() to get a HCURSOR, I suppose there is a API function to obtain the HCURSOR infos, but I find that GetCursorInfo() is not I want at all.

Is there any way to get the height and width of a HCURSOR object?


回答1:


There is some overlap in the APIs between icons and cursors in Windows. You can call GetIconInfoEx with an HCURSOR as well as with an HICON. The structure you get back will have information about the hotspot.

I don't see a way to get the actual size. Technically, all cursor icons are a fixed size that you can get by asking the system (with GetSystemMetrics) for SM_CXCURSOR and SM_CYCURSOR. The ones that appear smaller are actually that size, they just have a lots of transparent pixels. If you must know the apparent size, you'll have to extract the mask and scan the bits to figure out the bounding rectangle.




回答2:


Universal C++ code, for any cursor:

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



回答3:


From MSDN:

The nWidth and nHeight parameters must specify a width and height that are supported by the current display driver, because the system cannot create cursors of other sizes. To determine the width and height supported by the display driver, use the GetSystemMetrics function, specifying the SM_CXCURSOR or SM_CYCURSOR value.



来源:https://stackoverflow.com/questions/1699666/how-do-i-know-the-size-of-a-hcursor-object

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!