⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testgtk.c

📁 开发linux应用-用gtk+和gdk开发linux图形用户界面应用--的实例
💻 C
📖 第 1 页 / 共 5 页
字号:
      gtk_signal_connect_object (GTK_OBJECT (button), "clicked",				 GTK_SIGNAL_FUNC(gtk_widget_destroy),				 GTK_OBJECT (window));      gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);      GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);      gtk_widget_grab_default (button);    }  if (!GTK_WIDGET_VISIBLE (window))    gtk_widget_show_all (window);  else    gtk_widget_destroy (window);}/* * Saved Position */gint upositionx = 0;gint upositiony = 0;static gintuposition_configure (GtkWidget *window){  GtkLabel *lx;  GtkLabel *ly;  gchar buffer[64];  lx = gtk_object_get_data (GTK_OBJECT (window), "x");  ly = gtk_object_get_data (GTK_OBJECT (window), "y");  gdk_window_get_root_origin (window->window, &upositionx, &upositiony);  sprintf (buffer, "%d", upositionx);  gtk_label_set (lx, buffer);  sprintf (buffer, "%d", upositiony);  gtk_label_set (ly, buffer);  return FALSE;}static voidcreate_saved_position (void){  static GtkWidget *window = NULL;  if (!window)    {      GtkWidget *hbox;      GtkWidget *main_vbox;      GtkWidget *vbox;      GtkWidget *x_label;      GtkWidget *y_label;      GtkWidget *button;      GtkWidget *label;      GtkWidget *any;      window = gtk_widget_new (GTK_TYPE_WINDOW,			       "type", GTK_WINDOW_TOPLEVEL,			       "signal::configure_event", uposition_configure, NULL,			       "x", upositionx,			       "y", upositiony,			       "title", "Saved Position",			       NULL);      gtk_signal_connect (GTK_OBJECT (window), "destroy",			  GTK_SIGNAL_FUNC (gtk_widget_destroyed),			  &window);      main_vbox = gtk_vbox_new (FALSE, 5);      gtk_container_border_width (GTK_CONTAINER (main_vbox), 0);      gtk_container_add (GTK_CONTAINER (window), main_vbox);      vbox =	gtk_widget_new (gtk_vbox_get_type (),			"GtkBox::homogeneous", FALSE,			"GtkBox::spacing", 5,			"GtkContainer::border_width", 10,			"GtkWidget::parent", main_vbox,			"GtkWidget::visible", TRUE,			NULL);      hbox = gtk_hbox_new (FALSE, 0);      gtk_container_border_width (GTK_CONTAINER (hbox), 5);      gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);      label = gtk_label_new ("X Origin : ");      gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);      gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);      x_label = gtk_label_new ("");      gtk_box_pack_start (GTK_BOX (hbox), x_label, TRUE, TRUE, 0);      gtk_object_set_data (GTK_OBJECT (window), "x", x_label);      hbox = gtk_hbox_new (FALSE, 0);      gtk_container_border_width (GTK_CONTAINER (hbox), 5);      gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);      label = gtk_label_new ("Y Origin : ");      gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);      gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);      y_label = gtk_label_new ("");      gtk_box_pack_start (GTK_BOX (hbox), y_label, TRUE, TRUE, 0);      gtk_object_set_data (GTK_OBJECT (window), "y", y_label);      any =	gtk_widget_new (gtk_hseparator_get_type (),			"GtkWidget::visible", TRUE,			NULL);      gtk_box_pack_start (GTK_BOX (main_vbox), any, FALSE, TRUE, 0);      hbox = gtk_hbox_new (FALSE, 0);      gtk_container_border_width (GTK_CONTAINER (hbox), 10);      gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);      button = gtk_button_new_with_label ("Close");      gtk_signal_connect_object (GTK_OBJECT (button), "clicked",				 GTK_SIGNAL_FUNC (gtk_widget_destroy),				 GTK_OBJECT (window));      gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);      GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);      gtk_widget_grab_default (button);            gtk_widget_show_all (window);    }  else    gtk_widget_destroy (window);}/* * GtkPixmap */static voidcreate_pixmap (void){  static GtkWidget *window = NULL;  GtkWidget *box1;  GtkWidget *box2;  GtkWidget *box3;  GtkWidget *button;  GtkWidget *label;  GtkWidget *separator;  GtkWidget *pixmapwid;  GdkPixmap *pixmap;  GdkBitmap *mask;  if (!window)    {      window = gtk_window_new (GTK_WINDOW_TOPLEVEL);      gtk_signal_connect (GTK_OBJECT (window), "destroy",                          GTK_SIGNAL_FUNC(gtk_widget_destroyed),                          &window);      gtk_window_set_title (GTK_WINDOW (window), "GtkPixmap");      gtk_container_border_width (GTK_CONTAINER (window), 0);      gtk_widget_realize(window);      box1 = gtk_vbox_new (FALSE, 0);      gtk_container_add (GTK_CONTAINER (window), box1);      box2 = gtk_vbox_new (FALSE, 10);      gtk_container_border_width (GTK_CONTAINER (box2), 10);      gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);      button = gtk_button_new ();      gtk_box_pack_start (GTK_BOX (box2), button, FALSE, FALSE, 0);      pixmap = gdk_pixmap_create_from_xpm (window->window, &mask, NULL,					   "test.xpm");      pixmapwid = gtk_pixmap_new (pixmap, mask);      gdk_pixmap_unref (pixmap);      gdk_pixmap_unref (mask);      label = gtk_label_new ("Pixmap\ntest");      box3 = gtk_hbox_new (FALSE, 0);      gtk_container_border_width (GTK_CONTAINER (box3), 2);      gtk_container_add (GTK_CONTAINER (box3), pixmapwid);      gtk_container_add (GTK_CONTAINER (box3), label);      gtk_container_add (GTK_CONTAINER (button), box3);      separator = gtk_hseparator_new ();      gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);      box2 = gtk_vbox_new (FALSE, 10);      gtk_container_border_width (GTK_CONTAINER (box2), 10);      gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);      button = gtk_button_new_with_label ("close");      gtk_signal_connect_object (GTK_OBJECT (button), "clicked",                                 GTK_SIGNAL_FUNC(gtk_widget_destroy),                                 GTK_OBJECT (window));      gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);      GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);      gtk_widget_grab_default (button);    }  if (!GTK_WIDGET_VISIBLE (window))    gtk_widget_show_all (window);  else    gtk_widget_destroy (window);}static voidtips_query_widget_entered (GtkTipsQuery   *tips_query,			   GtkWidget      *widget,			   const gchar    *tip_text,			   const gchar    *tip_private,			   GtkWidget	  *toggle){  if (GTK_TOGGLE_BUTTON (toggle)->active)    {      gtk_label_set (GTK_LABEL (tips_query), tip_text ? "There is a Tip!" : "There is no Tip!");      /* don't let GtkTipsQuery reset it's label */      gtk_signal_emit_stop_by_name (GTK_OBJECT (tips_query), "widget_entered");    }}static ginttips_query_widget_selected (GtkWidget      *tips_query,			    GtkWidget      *widget,			    const gchar    *tip_text,			    const gchar    *tip_private,			    GdkEventButton *event,			    gpointer        func_data){  if (widget)    g_print ("Help \"%s\" requested for <%s>\n",	     tip_private ? tip_private : "None",	     gtk_type_name (GTK_OBJECT_TYPE (widget)));  return TRUE;}static voidcreate_tooltips (void){  static GtkWidget *window = NULL;  GtkWidget *box1;  GtkWidget *box2;  GtkWidget *box3;  GtkWidget *button;  GtkWidget *toggle;  GtkWidget *frame;  GtkWidget *tips_query;  GtkWidget *separator;  GtkTooltips *tooltips;  if (!window)    {      window =	gtk_widget_new (gtk_window_get_type (),			"GtkWindow::type", GTK_WINDOW_TOPLEVEL,			"GtkContainer::border_width", 0,			"GtkWindow::title", "Tooltips",			"GtkWindow::allow_shrink", TRUE,			"GtkWindow::allow_grow", FALSE,			"GtkWindow::auto_shrink", TRUE,			"GtkWidget::width", 200,			NULL);      gtk_signal_connect (GTK_OBJECT (window), "destroy",                          GTK_SIGNAL_FUNC (destroy_tooltips),                          &window);      tooltips=gtk_tooltips_new();      gtk_object_set_data (GTK_OBJECT (window), "tooltips", tooltips);            box1 = gtk_vbox_new (FALSE, 0);      gtk_container_add (GTK_CONTAINER (window), box1);      box2 = gtk_vbox_new (FALSE, 10);      gtk_container_border_width (GTK_CONTAINER (box2), 10);      gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);      button = gtk_toggle_button_new_with_label ("button1");      gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);      gtk_tooltips_set_tip (tooltips,button,"This is button 1", "ContextHelp/buttons/1");      button = gtk_toggle_button_new_with_label ("button2");      gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);      gtk_tooltips_set_tip (tooltips,			    button,			    "This is button 2. This is also a really long tooltip which probably won't fit on a single line and will therefore need to be wrapped. Hopefully the wrapping will work correctly.",			    "ContextHelp/buttons/2_long");      toggle = gtk_toggle_button_new_with_label ("Override TipsQuery Label");      gtk_box_pack_start (GTK_BOX (box2), toggle, TRUE, TRUE, 0);      gtk_tooltips_set_tip (tooltips, toggle, "Toggle TipsQuery view.", "Hi msw! ;)");      box3 =	gtk_widget_new (gtk_vbox_get_type (),			"GtkBox::homogeneous", FALSE,			"GtkBox::spacing", 5,			"GtkContainer::border_width", 5,			"GtkWidget::visible", TRUE,			NULL);      tips_query = gtk_tips_query_new ();      button =	gtk_widget_new (gtk_button_get_type (),			"GtkButton::label", "[?]",			"GtkWidget::visible", TRUE,			"GtkWidget::parent", box3,			"GtkObject::object_signal::clicked", gtk_tips_query_start_query, tips_query,			NULL);      gtk_box_set_child_packing (GTK_BOX (box3), button, FALSE, FALSE, 0, GTK_PACK_START);      gtk_tooltips_set_tip (tooltips,			    button,			    "Start the Tooltips Inspector",			    "ContextHelp/buttons/?");                  gtk_widget_set (tips_query,		      "GtkWidget::visible", TRUE,		      "GtkWidget::parent", box3,		      "GtkTipsQuery::caller", button,		      "GtkObject::signal::widget_entered", tips_query_widget_entered, toggle,		      "GtkObject::signal::widget_selected", tips_query_widget_selected, NULL,		      NULL);            frame =	gtk_widget_new (gtk_frame_get_type (),			"GtkFrame::label", "ToolTips Inspector",			"GtkFrame::label_xalign", (double) 0.5,			"GtkContainer::border_width", 0,			"GtkWidget::visible", TRUE,			"GtkWidget::parent", box2,			"GtkContainer::child", box3,			NULL);      gtk_box_set_child_packing (GTK_BOX (box2), frame, TRUE, TRUE, 10, GTK_PACK_START);      separator = gtk_hseparator_new ();      gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);      box2 = gtk_vbox_new (FALSE, 10);      gtk_container_border_width (GTK_CONTAINER (box2), 10);      gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);      button = gtk_button_new_with_label ("close");      gtk_signal_connect_object (GTK_OBJECT (button), "clicked",                                 GTK_SIGNAL_FUNC(gtk_widget_destroy),                                 GTK_OBJECT (window));      gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);      GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);      gtk_widget_grab_default (button);      gtk_tooltips_set_tip (tooltips, button, "Push this button to close window", "ContextHelp/buttons/Close");    }  if (!GTK_WIDGET_VISIBLE (window))    gtk_widget_show_all (window);  else    gtk_widget_destroy (window);}/* * Menu demo */static GtkWidget*create_menu (gint depth, gboolean tearoff){  GtkWidget *menu;  GtkWidget *menuitem;  GSList *group;  char buf[32];  int i, j;  if (depth < 1)    return NULL;  menu = gtk_menu_new ();  group = NULL;  if (tearoff)    {      menuitem = gtk_tearoff_menu_item_new ();      gtk_menu_append (GTK_MENU (menu), menuitem);      gtk_widget_show (menuitem);    }  for (i = 0, j = 1; i < 5; i++, j++)    {      sprintf (buf, "item %2d - %d", depth, j);      menuitem = gtk_radio_menu_item_new_with_label (group, buf);      group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (menuitem));      if (depth % 2)	gtk_check_menu_item_set_show_toggle (GTK_CHECK_MENU_ITEM (menuitem), TRUE);      gtk_menu_append (GTK_MENU (menu), menuitem);      gtk_widget_show (menuitem);      if (i == 3)	gtk_widget_set_sensitive (menuitem, FALSE);      gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (depth - 1, TRUE));    }  return menu;}static voidcreate_menus (void){  static GtkWidget *window = NULL;  GtkWidget *box1;  GtkWidget *box2;  GtkWidget *button;  GtkWidget *optionmenu;  GtkWidget *separator;    if (!window)    {      GtkWidget *menubar;      GtkWidget *menu;      GtkWidget *menuitem;      GtkAccelGroup *accel_group;            window = gtk_window_new (GTK_WINDOW_TOPLEVEL);            gtk_signal_connect (GTK_OBJECT (window), "destroy",

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -