我找到了一种解决方法 - 传递给 istepIfAniCur 参数绘制图标Ex http://msdn.microsoft.com/en-us/library/ms648065%28v=vs.85%29.aspx函数的最大值UINT http://msdn.microsoft.com/en-us/library/aa383751%28v=vs.85%29.aspx#UINT。不可能有人会创建 4,294,967,295 帧的动画光标(可能对于某些光标电影来说是可能的:)
有了这个事实,您可以将此值传递给绘制图标Ex http://msdn.microsoft.com/en-us/library/ms648065%28v=vs.85%29.aspx如果光标处于动画状态(因为超出帧范围),该函数将返回 False;如果是静态光标,则返回 True,因为它忽略 istepIfAniCur 参数。您应该将 0 传递给 diFlags 参数,因为不需要绘制任何内容。
这是德尔福的例子:
if not DrawIconEx(Canvas.Handle, 0, 0, hCursor, 0, 0, High(Cardinal), 0, 0) then
Caption := 'Cursor is animated ...'
else
Caption := 'Cursor is not animated ...';
因为我答应了 C++ 标签,所以这是我的翻译尝试
if (!DrawIconEx(this->Canvas->Handle, 0, 0, hCursor, 0, 0, UINT_MAX, NULL, 0))
this->Caption = "Cursor is animated ...";
else
this->Caption = "Cursor is not animated ...";
超出帧范围也会由操作系统错误指示错误_无效_参数 http://msdn.microsoft.com/en-us/library/ms681382%28v=vs.85%29.aspx你可以使用什么来检查获取最后一个错误 http://msdn.microsoft.com/en-us/library/ms679360%28v=vs.85%29.aspx函数时绘制图标Ex http://msdn.microsoft.com/en-us/library/ms648065%28v=vs.85%29.aspx fails.