我见过极少数带有动画窗口图标的程序。 从远处看,这可能相当有益,不是吗..
我在发明一个函数的过程中掌握了方向 Helm 。
它会执行您可能想到的操作,并使用 Sleep()
来模拟每个“帧”之后的间隔。
我不必说在主要程序中使用 WinAPI 是一个坏主意,而且程序将卡住直到函数终止。
回到正轨。我正在寻找避免这种行为的可能性。 这是可以理解的,因此没有人想要一个非功能性但带有动画图标的程序。
最佳答案
您可能正在从 Main Event Loop 调用您的函数。这是处理所有类型的 GUI 事件的线程,包括鼠标单击和按键。如果您从此线程内调用 Sleep
,所有这些处理任务都将挂起,并且您的程序将卡住。
要避免此行为,请使用 g_timeout_add 。该函数将从主事件循环中定期调用函数(因此无需您自己执行)。您需要定义一个这样的函数:
// define this function somewhere
gboolean animate(gpointer user_data) {
// cast user_data to appropriate type
// supposing you have a AnimationParameters class with everything you need...
AnimationParameters* animParams = (AnimationParameters*)user_data;
// update animation
// ...
return TRUE; // return TRUE to call function again, FALSE to stop
}
在代码的其他位置启动动画:
AnimationParameters* animationParameters = new AnimationParameters(...);
g_timeout_add (30, // call every 30 milliseconds
animate,
animationParameters);
希望有帮助。
关于c - 动画窗口图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27221389/