var w, h int //保存窗口的宽度和高度 //改变窗口大小时,触发"configure-event",然后手动刷新绘图区域,否则图片会重叠 window.Connect("configure-event", func() { window.QueueDraw() //刷新绘图区域 //获取窗口的宽度和高度 window.GetSize(&w, &h) fmt.Println(w, h) }) x := 0 //画笑脸起点 ...
2. 某些情况下,一些消息可以通用比如点击事件 "clicked"和"button_release_event", 但是要注意的是,这个回调函数的参数个数是不一样,一旦混淆,程序就会报错退出; 3. configure_event 和 expose_event是两个非常特殊的事件。当某个widget关联了configure_event信号,那么当它被show出来时,该事件就会被响应;后者的响应...
把事件类型GDK_CONFIGURE填加到这个函数中。事件类型GDK_CONFIGURE包含了所有的大小、位置和用于存储事件次序的栈结构。 g_signal_connect(G_OBJECT(window), "configure-event", G_CALLBACK(frame_callback), NULL); 从上面可以看出,信号“configure-event“被发射了 ,则所绑定构件的大小、位置与次序栈都被捕获了...
button_release_event按钮释放 motion_notify_event鼠标移动 delete_event使用窗口管理器关闭 destroy_event关闭 expose_event曝光 key_press_event按键按下 key_release_event按键释放 enter_notify_event鼠标指针进入组件 leave_notify_event鼠标指针离开组件 configure_event属性改变 focus_in_event获得聚焦 focus_out_event...
gboolean on_window_configure_event(GtkWidget * da, GdkEventConfigure * event, gpointer user_data){ static int oldw = 0; static int oldh = 0; //make our selves a properly sized pixmap if our window has been resized if (oldw != event->width || oldh != event->height){ ...
另外有一个问题就是画图一定要在gtk_widget_show_all(window);之后,在之前是画不出来的,具体原理还不是很清楚,猜想可能是configure_event事件需要在gtk_widget_show_all(window)之后触发,没有初始化是画不了图的。 cairo_surface_t*surface=NULL;staticgint draw_cb(GtkWidget*widget,cairo_t*cr,gpointer data)...
GdkEventConfigure *event) { GtkWindow *window = GTK_WINDOW (widget); gboolean expected_reply = window->configure_request_count > 0; if (window->configure_request_count > 0) { window->configure_request_count -= 1; gdk_window_thaw_toplevel_updates_libgtk_only (widget->window); } if (!
event_box.show() # 捕获所有事件 self.event_box.set_events(gtk.gdk.ALL_EVENTS_MASK) # 连接事件 self.event_box.connect ("map_event", self.Map) self.event_box.connect ("unmap_event", self.unMap) self.event_box.connect ("configure_event", self.Configure) self.event_box.connect ("...
实际上,当窗口初始化,被拉伸,最大化,最小化时,都会触发“configure_event”事件。也就是说,设置好“configure_event”的回调函数,可以很好地解决窗口大小改变的问题。 首先是注册: gtk_signal_connect(GTK_OBJECT(drawing_area),"configure_event", (GtkSignalFunc)configure_event,NULL); 回调函数: static...
}privateboolon_configure_event (Widget widget, Gdk.EventConfigureevent) {if(!glXMakeCurrent (xdisplay, x11_drawable_get_xid (widget.window), context))returnfalse; glViewport (0,0, (GLsizei) widget.allocation.width, (GLsizei) widget.allocation.height);returntrue; ...