QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1297|回复: 6

GTK_WINDOW_POPUP有expose event吗

[复制链接]
发表于 2004-4-12 18:15:28 | 显示全部楼层 |阅读模式
在网上看到下面这样一段话:
A GTK_WINDOW_POPUP is not window managed and it typically saves the
state of the window underneath it (so the window underneath doesn't
get an expose event, but X server memory usage is increased).


GTK_WINDOW_POPUP是不是没有expose event啊?
发表于 2004-4-12 20:20:45 | 显示全部楼层
它的意思是popup窗口下面的窗口没有曝光事件
回复

使用道具 举报

 楼主| 发表于 2004-4-13 10:50:31 | 显示全部楼层
popup窗口下面有什么窗口啊?
我认为他的意思是说GTK_WINDOW_POPUP对象所对应的那个窗口。
我也写过一段程序测试:
main()
{
  ...
  GtkWidget popup_window = gtk_window_new(GTK_WINDOW_POPUP);
  g_signal_connect(popup_window, "expose_event",
                   G_CALLBACK(func_expose_event),
                   NULL);               
  ...
  gtk_widget_show(popup_window);
}

void func_expose_event()
{
  FILE * fp = fopen("/tmp/expose_test.txt", "a");
  fprintf(fp, "expose event of popup window");
  fclose(fp);
}

运行之后,popup_window可以显示,而且当它被别的窗口覆盖,然后再暴露出来之后仍然能够正常显示。但是/tmp目录下却一直没有expose_test.txt文件产生,可见popup_window的expose_event没有被触发。
但是,这就有点不明白了,如果popup_window的expose_event没有被触发,那么是如何实现它被其它窗口挡住再暴露后的重绘工作的?
回复

使用道具 举报

 楼主| 发表于 2004-4-15 10:36:28 | 显示全部楼层
诸位大侠!没人回答一下吗  :neutral:  
回复

使用道具 举报

发表于 2004-4-16 11:38:03 | 显示全部楼层
你在窗口上放控件没有,如果放了,应该是控件的曝光事件,而不是窗口
回复

使用道具 举报

 楼主| 发表于 2004-4-16 13:26:00 | 显示全部楼层
窗口上没放任何控件
回复

使用道具 举报

发表于 2004-4-16 16:10:59 | 显示全部楼层
GtkWidget *window1;

  window1 = gtk_window_new (GTK_WINDOW_POPUP);
  gtk_widget_set_size_request (window1, 300, 200);
  gtk_window_set_title (GTK_WINDOW (window1), _("window1"));
  
  g_signal_connect ((gpointer) window1, "expose_event",
                    G_CALLBACK (on_window1_expose_event),
                    NULL);
  
  /* Store pointers to all widgets, for use by lookup_widget(). */
  GLADE_HOOKUP_OBJECT_NO_REF (window1, window1, "window1");


//callback
gboolean
on_window1_expose_event                (GtkWidget       *widget,
                                        GdkEventExpose  *event,
                                        gpointer         user_data)
{
printf("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n");
  return FALSE;
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-8 13:44 , Processed in 0.051131 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表