我想获得.cur文件的高度和宽度,而不考虑其格式。
我尝试使用LoadCursorFromFile()来获取HCURSOR,我想有一个API函数来获取HCURSOR信息,但我发现GetCursorInfo()根本不是我想要的。
有没有办法获得HCURSOR对象的高度和宽度?
答案 0 :(得分:5)
Windows中的图标和光标之间的API存在一些重叠。您可以使用HCURSOR以及HICON呼叫GetIconInfoEx
。您获得的结构将包含有关热点的信息。
我没有看到获得实际尺寸的方法。从技术上讲,所有光标图标都是固定大小,您可以通过询问SM_CXCURSOR
和SM_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值。