c - 动画窗口图标

标签 c animation icons gtk

我见过极少数带有动画窗口图标的程序。 从远处看,这可能相当有益,不是吗..

我在发明一个函数的过程中掌握了方向 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/

相关文章:

c - offsetof 以 char 作为第二个参数。是否可以?

ios - 动画状态栏 iOS 7

c# - gridview 行上的 Ajax 动画

java - 如何移动图像(动画)?

c - 带间隙的随机数

c - 指针数组的结构地址

c - 在嵌入式系统上获取文本?

Java - 如何更改文件夹的图标

html - Font Awesome 图标溢出其容器

android - Android 手机图标的开源版本