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

📄 gtk_tut-30.html

📁 gtk是linux一款强大的夸平台的图形化开发工具
💻 HTML
📖 第 1 页 / 共 3 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><HTML><HEAD> <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9"> <TITLE>GTK v1.2 Tutorial: Code Examples</TITLE> <LINK HREF="gtk_tut-31.html" REL=next> <LINK HREF="gtk_tut-29.html" REL=previous> <LINK HREF="gtk_tut.html#toc30" REL=contents></HEAD><BODY BGCOLOR="#FFFFFF"><A HREF="gtk_tut-31.html">Next</A><A HREF="gtk_tut-29.html">Previous</A><A HREF="gtk_tut.html#toc30">Contents</A><HR NOSHADE><H2><A NAME="s30">30. Code Examples</A></H2><P>Below are the code examples that are used in the above textwhich are not included in complete form elsewhere.<P><H2><A NAME="ss30.1">30.1 Tictactoe</A></H2><H3>tictactoe.h</H3><P><BLOCKQUOTE><CODE><PRE>/* example-start tictactoe tictactoe.h *//* GTK - The GIMP Toolkit * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */#ifndef __TICTACTOE_H__#define __TICTACTOE_H__#include &lt;gdk/gdk.h>#include &lt;gtk/gtkvbox.h>#ifdef __cplusplusextern "C" {#endif /* __cplusplus */#define TICTACTOE(obj)          GTK_CHECK_CAST (obj, tictactoe_get_type (), Tictactoe)#define TICTACTOE_CLASS(klass)  GTK_CHECK_CLASS_CAST (klass, tictactoe_get_type (), TictactoeClass)#define IS_TICTACTOE(obj)       GTK_CHECK_TYPE (obj, tictactoe_get_type ())typedef struct _Tictactoe       Tictactoe;typedef struct _TictactoeClass  TictactoeClass;struct _Tictactoe{  GtkVBox vbox;    GtkWidget *buttons[3][3];};struct _TictactoeClass{  GtkVBoxClass parent_class;  void (* tictactoe) (Tictactoe *ttt);};guint          tictactoe_get_type        (void);GtkWidget*     tictactoe_new             (void);void           tictactoe_clear           (Tictactoe *ttt);#ifdef __cplusplus}#endif /* __cplusplus */#endif /* __TICTACTOE_H__ *//* example-end */</PRE></CODE></BLOCKQUOTE><P><H3>tictactoe.c</H3><P><BLOCKQUOTE><CODE><PRE>/* example-start tictactoe tictactoe.c *//* GTK - The GIMP Toolkit * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */#include "gtk/gtksignal.h"#include "gtk/gtktable.h"#include "gtk/gtktogglebutton.h"#include "tictactoe.h"enum {  TICTACTOE_SIGNAL,  LAST_SIGNAL};static void tictactoe_class_init          (TictactoeClass *klass);static void tictactoe_init                (Tictactoe      *ttt);static void tictactoe_toggle              (GtkWidget *widget, Tictactoe *ttt);static gint tictactoe_signals[LAST_SIGNAL] = { 0 };guinttictactoe_get_type (){  static guint ttt_type = 0;  if (!ttt_type)    {      GtkTypeInfo ttt_info =      {        "Tictactoe",        sizeof (Tictactoe),        sizeof (TictactoeClass),        (GtkClassInitFunc) tictactoe_class_init,        (GtkObjectInitFunc) tictactoe_init,        (GtkArgSetFunc) NULL,        (GtkArgGetFunc) NULL      };      ttt_type = gtk_type_unique (gtk_vbox_get_type (), &amp;ttt_info);    }  return ttt_type;}static voidtictactoe_class_init (TictactoeClass *class){  GtkObjectClass *object_class;  object_class = (GtkObjectClass*) class;    tictactoe_signals[TICTACTOE_SIGNAL] = gtk_signal_new ("tictactoe",                                         GTK_RUN_FIRST,                                         object_class->type,                                         GTK_SIGNAL_OFFSET (TictactoeClass,                                                            tictactoe),                                         gtk_signal_default_marshaller,                                         GTK_TYPE_NONE, 0);  gtk_object_class_add_signals (object_class, tictactoe_signals, LAST_SIGNAL);  class->tictactoe = NULL;}static voidtictactoe_init (Tictactoe *ttt){  GtkWidget *table;  gint i,j;    table = gtk_table_new (3, 3, TRUE);  gtk_container_add (GTK_CONTAINER(ttt), table);  gtk_widget_show (table);  for (i=0;i&lt;3; i++)    for (j=0;j&lt;3; j++)      {        ttt->buttons[i][j] = gtk_toggle_button_new ();        gtk_table_attach_defaults (GTK_TABLE(table), ttt->buttons[i][j],                                    i, i+1, j, j+1);        gtk_signal_connect (GTK_OBJECT (ttt->buttons[i][j]), "toggled",                            GTK_SIGNAL_FUNC (tictactoe_toggle), ttt);        gtk_widget_set_usize (ttt->buttons[i][j], 20, 20);        gtk_widget_show (ttt->buttons[i][j]);      }}GtkWidget*tictactoe_new (){  return GTK_WIDGET ( gtk_type_new (tictactoe_get_type ()));}void           tictactoe_clear (Tictactoe *ttt){  int i,j;  for (i=0;i&lt;3;i++)    for (j=0;j&lt;3;j++)      {        gtk_signal_handler_block_by_data (GTK_OBJECT(ttt->buttons[i][j]), ttt);        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ttt->buttons[i][j]),                                     FALSE);        gtk_signal_handler_unblock_by_data (GTK_OBJECT(ttt->buttons[i][j]), ttt);      }}static voidtictactoe_toggle (GtkWidget *widget, Tictactoe *ttt){  int i,k;  static int rwins[8][3] = { { 0, 0, 0 }, { 1, 1, 1 }, { 2, 2, 2 },                             { 0, 1, 2 }, { 0, 1, 2 }, { 0, 1, 2 },                             { 0, 1, 2 }, { 0, 1, 2 } };  static int cwins[8][3] = { { 0, 1, 2 }, { 0, 1, 2 }, { 0, 1, 2 },                             { 0, 0, 0 }, { 1, 1, 1 }, { 2, 2, 2 },                             { 0, 1, 2 }, { 2, 1, 0 } };  int success, found;  for (k=0; k&lt;8; k++)    {      success = TRUE;      found = FALSE;      for (i=0;i&lt;3;i++)        {          success = success &amp;&amp;             GTK_TOGGLE_BUTTON(ttt->buttons[rwins[k][i]][cwins[k][i]])->active;          found = found ||            ttt->buttons[rwins[k][i]][cwins[k][i]] == widget;        }            if (success &amp;&amp; found)        {          gtk_signal_emit (GTK_OBJECT (ttt),                            tictactoe_signals[TICTACTOE_SIGNAL]);          break;        }    }}/* example-end */</PRE></CODE></BLOCKQUOTE><P><H3>ttt_test.c</H3><P><BLOCKQUOTE><CODE><PRE>/* example-start tictactoe ttt_test.c */#include &lt;gtk/gtk.h>#include "tictactoe.h"voidwin (GtkWidget *widget, gpointer data){  g_print ("Yay!\n");  tictactoe_clear (TICTACTOE (widget));}int main (int argc, char *argv[]){  GtkWidget *window;  GtkWidget *ttt;    gtk_init (&amp;argc, &amp;argv);  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);    gtk_window_set_title (GTK_WINDOW (window), "Aspect Frame");    gtk_signal_connect (GTK_OBJECT (window), "destroy",                      GTK_SIGNAL_FUNC (gtk_exit), NULL);    gtk_container_set_border_width (GTK_CONTAINER (window), 10);  ttt = tictactoe_new ();    gtk_container_add (GTK_CONTAINER (window), ttt);  gtk_widget_show (ttt);  gtk_signal_connect (GTK_OBJECT (ttt), "tictactoe",                      GTK_SIGNAL_FUNC (win), NULL);  gtk_widget_show (window);    gtk_main ();    return 0;}/* example-end */</PRE></CODE></BLOCKQUOTE><P><H2><A NAME="ss30.2">30.2 GtkDial</A></H2><H3>gtkdial.h</H3><P><BLOCKQUOTE><CODE><PRE>/* example-start gtkdial gtkdial.h *//* GTK - The GIMP Toolkit * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */#ifndef __GTK_DIAL_H__#define __GTK_DIAL_H__#include &lt;gdk/gdk.h>#include &lt;gtk/gtkadjustment.h>#include &lt;gtk/gtkwidget.h>#ifdef __cplusplusextern "C" {#endif /* __cplusplus */#define GTK_DIAL(obj)          GTK_CHECK_CAST (obj, gtk_dial_get_type (), GtkDial)#define GTK_DIAL_CLASS(klass)  GTK_CHECK_CLASS_CAST (klass, gtk_dial_get_type (), GtkDialClass)#define GTK_IS_DIAL(obj)       GTK_CHECK_TYPE (obj, gtk_dial_get_type ())typedef struct _GtkDial        GtkDial;typedef struct _GtkDialClass   GtkDialClass;struct _GtkDial{  GtkWidget widget;  /* update policy (GTK_UPDATE_[CONTINUOUS/DELAYED/DISCONTINUOUS]) */  guint policy : 2;  /* Button currently pressed or 0 if none */  guint8 button;  /* Dimensions of dial components */  gint radius;  gint pointer_width;  /* ID of update timer, or 0 if none */  guint32 timer;  /* Current angle */  gfloat angle;  /* Old values from adjustment stored so we know when something changes */  gfloat old_value;  gfloat old_lower;  gfloat old_upper;  /* The adjustment object that stores the data for this dial */  GtkAdjustment *adjustment;};struct _GtkDialClass{  GtkWidgetClass parent_class;};GtkWidget*     gtk_dial_new                    (GtkAdjustment *adjustment);guint          gtk_dial_get_type               (void);GtkAdjustment* gtk_dial_get_adjustment         (GtkDial      *dial);void           gtk_dial_set_update_policy      (GtkDial      *dial,                                                GtkUpdateType  policy);void           gtk_dial_set_adjustment         (GtkDial      *dial,                                                GtkAdjustment *adjustment);#ifdef __cplusplus}#endif /* __cplusplus */#endif /* __GTK_DIAL_H__ *//* example-end */</PRE></CODE></BLOCKQUOTE><P><H3>gtkdial.c</H3><P><BLOCKQUOTE><CODE><PRE>/* example-start gtkdial gtkdial.c *//* GTK - The GIMP Toolkit * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */#include &lt;math.h>#include &lt;stdio.h>#include &lt;gtk/gtkmain.h>#include &lt;gtk/gtksignal.h>#include "gtkdial.h"#define SCROLL_DELAY_LENGTH  300#define DIAL_DEFAULT_SIZE 100/* Forward declarations */static void gtk_dial_class_init               (GtkDialClass    *klass);static void gtk_dial_init                     (GtkDial         *dial);static void gtk_dial_destroy                  (GtkObject        *object);static void gtk_dial_realize                  (GtkWidget        *widget);static void gtk_dial_size_request             (GtkWidget      *widget,                                               GtkRequisition *requisition);static void gtk_dial_size_allocate            (GtkWidget     *widget,                                               GtkAllocation *allocation);static gint gtk_dial_expose                   (GtkWidget        *widget,                                                GdkEventExpose   *event);static gint gtk_dial_button_press             (GtkWidget        *widget,                                                GdkEventButton   *event);static gint gtk_dial_button_release           (GtkWidget        *widget,                                                GdkEventButton   *event);static gint gtk_dial_motion_notify            (GtkWidget        *widget,                                                GdkEventMotion   *event);static gint gtk_dial_timer                    (GtkDial         *dial);static void gtk_dial_update_mouse             (GtkDial *dial, gint x, gint y);static void gtk_dial_update                   (GtkDial *dial);static void gtk_dial_adjustment_changed       (GtkAdjustment    *adjustment,                                                gpointer          data);static void gtk_dial_adjustment_value_changed (GtkAdjustment    *adjustment,                                                gpointer          data);/* Local data */static GtkWidgetClass *parent_class = NULL;guintgtk_dial_get_type (){  static guint dial_type = 0;  if (!dial_type)    {      GtkTypeInfo dial_info =      {        "GtkDial",        sizeof (GtkDial),        sizeof (GtkDialClass),        (GtkClassInitFunc) gtk_dial_class_init,        (GtkObjectInitFunc) gtk_dial_init,        (GtkArgSetFunc) NULL,        (GtkArgGetFunc) NULL,      };      dial_type = gtk_type_unique (gtk_widget_get_type (), &amp;dial_info);    }  return dial_type;}static voidgtk_dial_class_init (GtkDialClass *class){  GtkObjectClass *object_class;  GtkWidgetClass *widget_class;  object_class = (GtkObjectClass*) class;  widget_class = (GtkWidgetClass*) class;  parent_class = gtk_type_class (gtk_widget_get_type ());  object_class->destroy = gtk_dial_destroy;  widget_class->realize = gtk_dial_realize;  widget_class->expose_event = gtk_dial_expose;  widget_class->size_request = gtk_dial_size_request;

⌨️ 快捷键说明

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