#include<gtk/gtk.h>
# include <math.h>
gboolean redraw (GtkWidget*w, gpointer user_data);
gboolean draw (GtkWidget*w, gpointer user_data);
int main (int argc, char**argv)
{
GtkWidget*win, *l1, *l2, *l3, *l4, *vbox, *hbox, *b1, *b2;
gtk_init(&argc,&argv);
/* make a window*/
win=gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(win, "destroy", gtk_main_quit, NULL);
/* make a label, make a drawing area*/
l1 = gtk_label_new("New");
l2 = gtk_drawing_area_new();
l3 =gtk_label_new("Redraw");
l4 = gtk_label_new("EXIT");
/*make a button*/
b1=gtk_button_new();
b2=gtk_button_new();
/* make a vbox*/
vbox=gtk_vbox_new(FALSE,0);
gtk_container_add(GTK_CONTAINER(win), vbox);
gtk_box_pack_start(GTK_BOX(vbox), l1, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(vbox), l2, TRUE, TRUE, 0);
g_signal_connect(l2, "expose_event", G_CALLBACK(draw), NULL);
gtk_widget_set_size_request(l2,400,200);
/* make a hbox*/
hbox=gtk_hbox_new(TRUE,0);
gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(hbox), b2, TRUE, TRUE, 0);
g_signal_connect(b2, "clicked", G_CALLBACK(redraw), NULL);
gtk_container_add(GTK_CONTAINER(b2),l3);
gtk_box_pack_start(GTK_BOX(hbox), b1, TRUE, TRUE, 0);
g_signal_connect(b1, "clicked", gtk_main_quit, NULL);
gtk_container_add(GTK_CONTAINER(b1),l4);
gtk_widget_show_all(win);
gtk_main();
return 0;
}
gboolean redraw (GtkWidget*w, gpointer user_data)
{
}
gboolean draw (GtkWidget*w, gpointer user_data)
{
gdk_draw_rectangle(w->window, w->style->fg_gc [GTK_WIDGET_STATE(w)],
TRUE, 100, 50, 200, 100);
return TRUE;
}
I'd like to write a program in the redraw function where the drawing in the center disappears or appears when I press the Redraw button, but I can't think of any ideas.Could someone please help me?
c gtk
First, pass the drawing area l2 to the parameter of clicked in redraw.
g_signal_connect(b2, "clicked", G_CALLBACK(redraw), l2);
Then toggle the static variable in the event handler to show or hide the drawing area according to its state.
gboolean redraw (GtkWidget*w, gpointer user_data)
{
static int visible = 1;
GtkWidget*l2=(GtkWidget*)user_data;
visible=!visible;
if (visible)
gtk_widget_show(l2);
else
gtk_widget_hide(l2);
return TRUE;
}
© 2024 OneMinuteCode. All rights reserved.