c++ - 在 GTK+ 2.24 中,创建具有淡出效果的临时对话框

标签 c++ timer dialog gtk fadeout

我正在使用 GTK+ v2.24 制作一个跨平台程序,在完成大量工作后,我遇到了一个问题。这就是我正在尝试做的:
1) 在 GtkEntry 中按下回车键,触发一个事件(通过“激活”信号完成);
2) 使一个对话框出现一个简单的消息,没有按钮;
3) 使对话框在 1 秒后以淡出效果消失。

注意:当对话框出现然后淡出时,主顶层窗口应该继续工作(因为我有一个视频源在其中运行)。

我在互联网上搜索过,但无济于事。我希望这里的天才可以帮助我解决这个问题。谢谢!

编辑:我已经找到了 this question ,但它是关于 GTK# 的,我无法将其转换为 GTK+。

最佳答案

我将尝试详细说明 the linked answer .一些基础知识:

  • gtk_widget_get_snapshot将实时小部件转换为包含小部件内容的图片。这张照片是您将要淡出的。

  • Cairo是实现各种绘图基元的图形 API,including transparency . Cairo 也用于所有 GTK 绘图,因此每个 GTK 应用程序都已经依赖于 cairo,并且 cairo 很容易挂接到 GTK。

淡出动画可以分为三个步骤:

  1. 使用 GTK_WINDOW_POPUP 弹出一个顶层窗口,将内容插入其中并旋转主循环以绘制它。使用 gtk_widget_get_snapshot 获取小部件的图像并将其存储在一旁。

  2. 删除显示对话框内容的小部件并将其替换为继承自 GtkDrawingArea 并显示您在侧面设置的图像的自定义小部件。

    <
  3. 安排一个超时函数,使用 cairo 一次一步逐渐淡出像素图,每次也将绘图区域标记为脏,以便重新绘制越来越褪色的像素图。返回主循环,让动画播放。

一秒过去后,销毁顶层窗口。

关于c++ - 在 GTK+ 2.24 中,创建具有淡出效果的临时对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16239129/

相关文章:

ios - NSTimer 不会失效

ios - 等待用户响应 iOS 中的地址簿访问请求?

android - 从 View 启动 Android 对话框

C++:自定义数据类型 - 类型转换和 union 问题

c++ - Boost lock free queue asserts 用于简单的赋值和析构函数

c++ - 在 Directx 中围绕特定半径的固定点旋转点?

c - 如何正确使用timerfd?

android - 当计时器在每一行内运行时如何提高列表性能

c++ - 重载小于 C++ 中的运算符出现错误

multithreading - 为什么在通过 OnClose 事件(在线程中)释放表单后不显示 MessageDlg