检测 GTK 窗口何时完成由用户移动/调整大小

2023-12-19

我想检测用户何时完成调整 GTK 窗口大小或移动 GTK 窗口。基本上相当于WM_EXITSIZEMOVE http://msdn.microsoft.com/en-us/library/windows/desktop/ms632623%28v=vs.85%29.aspx在窗户中。

我看过GTK 检测用户调整窗口大小 https://stackoverflow.com/questions/1060039/gtk-detecting-window-resize-from-the-user并能够使用配置事件检测大小/位置变化;然而,由于我的其他代码是架构师,我想知道调整大小何时完成。几乎就像 ValueChanged 而不是 ValueChanging 事件。

我在想是否可以找出鼠标按钮是否被释放,然后尝试检测这是否是我收到的最后一个事件。但对于窗口对象也找不到这样做的方法。


您可以使用超时函数,调整大小完成后就会调用该函数。超时以毫秒为单位,您可能需要使用该值来在调用 resize_done 的延迟和在调整大小真正完成之前触发它之间取得平衡。

#define TIMEOUT 250

gboolean resize_done (gpointer data)
{
  guint *id = data;
  *id = 0;
  /* call your existing code here */
  return FALSE;
}

gboolean on_configure_event (GtkWidget *window, GdkEvent *event, gpointer data)
{
  static guint id = 0;
  if (id)
    g_source_remove (id);
  id = g_timeout_add (TIMEOUT, resize_done, &id);
  return FALSE;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检测 GTK 窗口何时完成由用户移动/调整大小 的相关文章

随机推荐