6 c++ delphi winapi animated mouse-cursor
有没有办法如何确定当前鼠标光标是否动画?
我正在寻找一种如何在前一段时间保存当前光标的方法.我发现DrawIconEx功能非常适合我的目的.不幸的是,我不知道如何确定当前光标是否已设置动画.我希望如果我在静态游标的情况下将istepIfAniCur参数设置为1,则DrawIconEx返回False,但它实际上忽略了该参数并返回True,不允许我在循环中使用它来获取静态游标以及来自的所有帧动画片.如果是动画,则按预期工作,因此当您使用istepIfAniCur超出范围时,它将返回False.
那我怎么知道HICON(HCURSOR)是动画光标呢?DrawIconEx如何确定光标是动画的?
非常感谢
小智 7
我找到了一个解决方法 - 传递给UINT的DrawIconEx函数最大值的istepIfAniCur参数.有人会用4,294,967,295帧创建动画光标是不可能的(可能是某些光标电影:)
有了这个事实,您可以将此值传递给DrawIconEx函数,该函数将在光标动画处理时(因为超出帧范围)将返回False,而在静态情况下则返回True,因为它忽略了istepIfAniCur参数.你应该将0传递给diFlags参数,因为不需要绘制任何东西.
这是Delphi的例子:
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 ...';
Run Code Online (Sandbox Code Playgroud)
因为我承诺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 ...";
Run Code Online (Sandbox Code Playgroud)
超出帧范围也由操作系统错误ERROR_INVALID_PARAMETER指示,当DrawIconEx失败时,您可以使用GetLastError函数检查该错误.