<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML ><HEAD ><TITLE >GTK+ 2.0 Tutorial</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK REL="NEXT" TITLE="Tutorial Availability" HREF="c17.html"></HEAD ><BODY CLASS="BOOK" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#840084" ALINK="#0000FF" ><DIV CLASS="BOOK" ><A NAME="GTK-TUT" ></A ><DIV CLASS="TITLEPAGE" ><H1 CLASS="TITLE" ><A NAME="AEN2" >GTK+ 2.0 Tutorial</A ></H1 ><H3 CLASS="AUTHOR" ><A NAME="AEN6" ></A >Tony Gale</H3 ><H3 CLASS="AUTHOR" ><A NAME="AEN9" ></A >Ian Main</H3 ><H3 CLASS="AUTHOR" ><A NAME="AEN12" ></A >& the GTK team</H3 ><HR></DIV ><DIV CLASS="TOC" ><DL ><DT ><B >Table of Contents</B ></DT ><DT ><A HREF="c17.html" >Tutorial Availability</A ></DT ><DT ><A HREF="c24.html" >Introduction</A ></DT ><DT ><A HREF="c39.html" >Getting Started</A ></DT ><DD ><DL ><DT ><A HREF="c39.html#SEC-HELLOWORLD" >Hello World in GTK</A ></DT ><DT ><A HREF="x111.html" >Compiling Hello World</A ></DT ><DT ><A HREF="x159.html" >Theory of Signals and Callbacks</A ></DT ><DT ><A HREF="x182.html" >Events</A ></DT ><DT ><A HREF="x281.html" >Stepping Through Hello World</A ></DT ></DL ></DD ><DT ><A HREF="c325.html" >Moving On</A ></DT ><DD ><DL ><DT ><A HREF="c325.html#SEC-DATATYPES" >Data Types</A ></DT ><DT ><A HREF="x334.html" >More on Signal Handlers</A ></DT ><DT ><A HREF="x344.html" >An Upgraded Hello World</A ></DT ></DL ></DD ><DT ><A HREF="c354.html" >Packing Widgets</A ></DT ><DD ><DL ><DT ><A HREF="c354.html#SEC-THEORYOFPACKINGBOXES" >Theory of Packing Boxes</A ></DT ><DT ><A HREF="x363.html" >Details of Boxes</A ></DT ><DT ><A HREF="x386.html" >Packing Demonstration Program</A ></DT ><DT ><A HREF="x389.html" >Packing Using Tables</A ></DT ><DT ><A HREF="x441.html" >Table Packing Example</A ></DT ></DL ></DD ><DT ><A HREF="c450.html" >Widget Overview</A ></DT ><DD ><DL ><DT ><A HREF="c450.html#SEC-CASTING" >Casting</A ></DT ><DT ><A HREF="x477.html" >Widget Hierarchy</A ></DT ><DT ><A HREF="x481.html" >Widgets Without Windows</A ></DT ></DL ></DD ><DT ><A HREF="c489.html" >The Button Widget</A ></DT ><DD ><DL ><DT ><A HREF="c489.html#SEC-NORMALBUTTONS" >Normal Buttons</A ></DT ><DT ><A HREF="x518.html" >Toggle Buttons</A ></DT ><DT ><A HREF="x535.html" >Check Buttons</A ></DT ><DT ><A HREF="x542.html" >Radio Buttons</A ></DT ></DL ></DD ><DT ><A HREF="c563.html" >Adjustments</A ></DT ><DD ><DL ><DT ><A HREF="c563.html#SEC-CREATINGANADJUSTMENT" >Creating an Adjustment</A ></DT ><DT ><A HREF="x587.html" >Using Adjustments the Easy Way</A ></DT ><DT ><A HREF="x602.html" >Adjustment Internals</A ></DT ></DL ></DD ><DT ><A HREF="c633.html" >Range Widgets</A ></DT ><DD ><DL ><DT ><A HREF="c633.html#SEC-SCROLLBARWIDGETS" >Scrollbar Widgets</A ></DT ><DT ><A HREF="x645.html" >Scale Widgets</A ></DT ><DD ><DL ><DT ><A HREF="x645.html#AEN648" >Creating a Scale Widget</A ></DT ><DT ><A HREF="x645.html#AEN660" >Functions and Signals (well, functions, at least)</A ></DT ></DL ></DD ><DT ><A HREF="x684.html" >Common Range Functions</A ></DT ><DD ><DL ><DT ><A HREF="x684.html#AEN688" >Setting the Update Policy</A ></DT ><DT ><A HREF="x684.html#AEN713" >Getting and Setting Adjustments</A ></DT ></DL ></DD ><DT ><A HREF="x725.html" >Key and Mouse bindings</A ></DT ><DT ><A HREF="x743.html" >Example</A ></DT ></DL ></DD ><DT ><A HREF="c753.html" >Miscellaneous Widgets</A ></DT ><DD ><DL ><DT ><A HREF="c753.html#SEC-LABELS" >Labels</A ></DT ><DT ><A HREF="x793.html" >Arrows</A ></DT ><DT ><A HREF="x810.html" >The Tooltips Object</A ></DT ><DT ><A HREF="x829.html" >Progress Bars</A ></DT ><DT ><A HREF="x861.html" >Dialogs</A ></DT ><DT ><A HREF="x891.html" >Rulers</A ></DT ><DT ><A HREF="x919.html" >Statusbars</A ></DT ><DT ><A HREF="x939.html" >Text Entries</A ></DT ><DT ><A HREF="x967.html" >Spin Buttons</A ></DT ><DT ><A HREF="x1063.html" >Combo Box</A ></DT ><DT ><A HREF="x1100.html" >Calendar</A ></DT ><DT ><A HREF="x1184.html" >Color Selection</A ></DT ><DT ><A HREF="x1207.html" >File Selections</A ></DT ></DL ></DD ><DT ><A HREF="c1226.html" >Container Widgets</A ></DT ><DD ><DL ><DT ><A HREF="c1226.html#SEC-EVENTBOX" >The EventBox</A ></DT ><DT ><A HREF="x1243.html" >The Alignment widget</A ></DT ><DT ><A HREF="x1258.html" >Fixed Container</A ></DT ><DT ><A HREF="x1279.html" >Layout Container</A ></DT ><DT ><A HREF="x1291.html" >Frames</A ></DT ><DT ><A HREF="x1317.html" >Aspect Frames</A ></DT ><DT ><A HREF="x1335.html" >Paned Window Widgets</A ></DT ><DT ><A HREF="x1352.html" >Viewports</A ></DT ><DT ><A HREF="x1368.html" >Scrolled Windows</A ></DT ><DT ><A HREF="x1390.html" >Button Boxes</A ></DT ><DT ><A HREF="x1402.html" >Toolbar</A ></DT ><DT ><A HREF="x1450.html" >Notebooks</A ></DT ></DL ></DD ><DT ><A HREF="c1499.html" >Menu Widget</A ></DT ><DD ><DL ><DT ><A HREF="c1499.html#SEC-MANUALMENUCREATION" >Manual Menu Creation</A ></DT ><DT ><A HREF="x1577.html" >Manual Menu Example</A ></DT ><DT ><A HREF="x1586.html" >Using ItemFactory</A ></DT ><DD ><DL ><DT ><A HREF="x1586.html#SEC-ITEMFACTORYENTRIES" >ItemFactory entries</A ></DT ><DT ><A HREF="x1586.html#SEC-ITEMFACTORYCREATION" >Creating an ItemFactory</A ></DT ><DT ><A HREF="x1586.html#SEC-USINGMENUANDITEMS" >Making use of the menu and its menu items</A ></DT ></DL ></DD ><DT ><A HREF="x1697.html" >Item Factory Example</A ></DT ></DL ></DD ><DT ><A HREF="c1701.html" >Undocumented Widgets</A ></DT ><DD ><DL ><DT ><A HREF="c1701.html#SEC-ACCELLABEL" >Accel Label</A ></DT ><DT ><A HREF="x1709.html" >Option Menu</A ></DT ><DT ><A HREF="x1712.html" >Menu Items</A ></DT ><DD ><DL ><DT ><A HREF="x1712.html#SEC-CHECKMENUITEM" >Check Menu Item</A ></DT ><DT ><A HREF="x1712.html#SEC-RADIOMENUITEM" >Radio Menu Item</A ></DT ><DT ><A HREF="x1712.html#SEC-SEPARATORMENUITEM" >Separator Menu Item</A ></DT ><DT ><A HREF="x1712.html#SEC-TEAROFFMENUITEM" >Tearoff Menu Item</A ></DT ></DL ></DD ><DT ><A HREF="x1727.html" >Curves</A ></DT ><DT ><A HREF="x1730.html" >Drawing Area</A ></DT ><DT ><A HREF="x1733.html" >Font Selection Dialog</A ></DT ><DT ><A HREF="x1736.html" >Message Dialog</A ></DT ><DT ><A HREF="x1739.html" >Gamma Curve</A ></DT ><DT ><A HREF="x1742.html" >Image</A ></DT ><DT ><A HREF="x1745.html" >Plugs and Sockets</A ></DT ><DT ><A HREF="x1748.html" >Tree View</A ></DT ><DT ><A HREF="x1751.html" >Text View</A ></DT ></DL ></DD ><DT ><A HREF="c1754.html" >Setting Widget Attributes</A ></DT ><DT ><A HREF="c1759.html" >Timeouts, IO and Idle Functions</A ></DT ><DD ><DL ><DT ><A HREF="c1759.html#SEC-TIMEOUTS" >Timeouts</A ></DT ><DT ><A HREF="x1770.html" >Monitoring IO</A ></DT ><DT ><A HREF="x1790.html" >Idle Functions</A ></DT ></DL ></DD ><DT ><A HREF="c1797.html" >Advanced Event and Signal Handling</A ></DT ><DD ><DL ><DT ><A HREF="c1797.html#SEC-SIGNALFUNCTIONS" >Signal Functions</A ></DT ><DD ><DL ><DT ><A HREF="c1797.html#AEN1801" >Connecting and Disconnecting Signal Handlers</A ></DT ><DT ><A HREF="c1797.html#AEN1804" >Blocking and Unblocking Signal Handlers</A ></DT ><DT ><A HREF="c1797.html#AEN1807" >Emitting and Stopping Signals</A ></DT ></DL ></DD ><DT ><A HREF="x1810.html" >Signal Emission and Propagation</A ></DT ></DL ></DD ><DT ><A HREF="c1834.html" >Managing Selections</A ></DT ><DD ><DL ><DT ><A HREF="c1834.html#SEC-SELECTIONSOVERVIEW" >Overview</A ></DT ><DT ><A HREF="x1850.html" >Retrieving the selection</A ></DT ><DT ><A HREF="x1873.html" >Supplying the selection</A ></DT ></DL ></DD ><DT ><A HREF="c1899.html" >Drag-and-drop (DND)</A ></DT ><DD ><DL ><DT ><A HREF="c1899.html#SEC-DRAGANDDROPOVERVIEW" >Overview</A ></DT ><DT ><A HREF="x1921.html" >Properties</A ></DT ><DT ><A HREF="x1939.html" >Functions</A ></DT ><DD ><DL ><DT ><A HREF="x1939.html#SEC-DNDSOURCEWIDGETS" >Setting up the source widget</A ></DT ><DT ><A HREF="x1939.html#SEC-SIGNALSONSOURCEWIDGETS" >Signals on the source widget:</A ></DT ><DT ><A HREF="x1939.html#SEC-DNDDESTWIDGETS" >Setting up a destination widget:</A ></DT ><DT ><A HREF="x1939.html#SEC-SIGNALSONDESTWIDGETS" >Signals on the destination widget:</A ></DT ></DL ></DD ></DL ></DD ><DT ><A HREF="c2023.html" >GLib</A ></DT ><DD ><DL ><DT ><A HREF="c2023.html#SEC-DEFINITIONS" >Definitions</A ></DT ><DT ><A HREF="x2035.html" >Doubly Linked Lists</A ></DT ><DT ><A HREF="x2055.html" >Singly Linked Lists</A ></DT ><DT ><A HREF="x2059.html" >Memory Management</A ></DT ><DT ><A HREF="x2076.html" >Timers</A ></DT ><DT ><A HREF="x2080.html" >String Handling</A ></DT ><DT ><A HREF="x2095.html" >Utility and Error Functions</A ></DT ></DL ></DD ><DT ><A HREF="c2116.html" >GTK's rc Files</A ></DT ><DD ><DL ><DT ><A HREF="c2116.html#SEC-FUNCTIONSFORRCFILES" >Functions For rc Files</A ></DT ><DT ><A HREF="x2136.html" >GTK's rc File Format</A ></DT ><DT ><A HREF="x2177.html" >Example rc file</A ></DT ></DL ></DD ><DT ><A HREF="c2180.html" >Writing Your Own Widgets</A ></DT ><DD ><DL ><DT ><A HREF="c2180.html#SEC-WIDGETSOVERVIEW" >Overview</A ></DT ><DT ><A HREF="x2189.html" >The Anatomy Of A Widget</A ></DT ><DT ><A HREF="x2200.html" >Creating a Composite widget</A ></DT ><DD ><DL ><DT ><A HREF="x2200.html#AEN2202" >Introduction</A ></DT ><DT ><A HREF="x2200.html#AEN2213" >Choosing a parent class</A ></DT ><DT ><A HREF="x2200.html#AEN2216" >The header file</A ></DT ><DT ><A HREF="x2200.html#AEN2228" >The <TT CLASS="LITERAL" >_get_type()</TT > function</A ></DT ><DT ><A HREF="x2200.html#AEN2240" >The <TT CLASS="LITERAL" >_class_init()</TT > function</A ></DT ><DT ><A HREF="x2200.html#AEN2293" >The <TT CLASS="LITERAL" >_init()</TT > function</A ></DT ><DT ><A HREF="x2200.html#AEN2298" >And the rest...</A ></DT ></DL ></DD ><DT ><A HREF="x2310.html" >Creating a widget from scratch</A ></DT ><DD ><DL ><DT ><A HREF="x2310.html#AEN2312" >Introduction</A ></DT ><DT ><A HREF="x2310.html#AEN2319" >Displaying a widget on the screen</A ></DT ><DT ><A HREF="x2310.html#AEN2352" >The origins of the Dial Widget</A ></DT ><DT ><A HREF="x2310.html#AEN2356" >The Basics</A ></DT ><DT ><A HREF="x2310.html#AEN2368" ><TT CLASS="LITERAL" >gtk_dial_realize()</TT ></A ></DT ><DT ><A HREF="x2310.html#AEN2377" >Size negotiation</A ></DT ><DT ><A HREF="x2310.html#AEN2385" ><TT CLASS="LITERAL" >gtk_dial_expose()</TT ></A ></DT ><DT ><A HREF="x2310.html#AEN2391" >Event handling</A ></DT ><DT ><A HREF="x2310.html#AEN2407" >Possible Enhancements</A ></DT ></DL ></DD ><DT ><A HREF="x2419.html" >Learning More</A ></DT ></DL ></DD ><DT ><A HREF="c2422.html" >Scribble, A Simple Example Drawing Program</A ></DT ><DD ><DL ><DT ><A HREF="c2422.html#SEC-SCRIBBLEOVERVIEW" >Overview</A ></DT ><DT ><A HREF="x2431.html" >Event Handling</A ></DT ><DT ><A HREF="x2470.html" >The DrawingArea Widget, And Drawing</A ></DT ><DT ><A HREF="x2529.html" >Adding XInput support</A ></DT ><DD ><DL ><DT ><A HREF="x2529.html#AEN2557" >Enabling extended device information</A ></DT ><DT ><A HREF="x2529.html#AEN2570" >Using extended device information</A ></DT ><DT ><A HREF="x2529.html#AEN2588" >Finding out more about a device</A ></DT ><DT ><A HREF="x2529.html#SEC-FURTHERSOPHISTICATIONS" >Further sophistications</A ></DT ></DL ></DD ></DL ></DD ><DT ><A HREF="c2615.html" >Tips For Writing GTK Applications</A ></DT ><DT ><A HREF="c2620.html" >Contributing</A ></DT ><DT ><A HREF="c2627.html" >Credits</A ></DT ><DT ><A HREF="c2689.html" >Tutorial Copyright and Permissions Notice</A ></DT ><DT ><A HREF="a2698.html" >GTK Signals</A ></DT ><DD ><DL ><DT ><A HREF="a2698.html#SEC-GTKOBJECT" >GtkObject</A ></DT ><DT ><A HREF="x2704.html" >GtkWidget</A ></DT ><DT ><A HREF="x2707.html" >GtkData</A ></DT ><DT ><A HREF="x2710.html" >GtkContainer</A ></DT ><DT ><A HREF="x2713.html" >GtkCalendar</A ></DT ><DT ><A HREF="x2716.html" >GtkEditable</A ></DT ><DT ><A HREF="x2719.html" >GtkNotebook</A ></DT ><DT ><A HREF="x2722.html" >GtkList</A ></DT ><DT ><A HREF="x2725.html" >GtkMenuShell</A ></DT ><DT ><A HREF="x2728.html" >GtkToolbar</A ></DT ><DT ><A HREF="x2731.html" >GtkButton</A ></DT ><DT ><A HREF="x2734.html" >GtkItem</A ></DT ><DT ><A HREF="x2737.html" >GtkWindow</A ></DT ><DT ><A HREF="x2740.html" >GtkHandleBox</A ></DT ><DT ><A HREF="x2743.html" >GtkToggleButton</A ></DT ><DT ><A HREF="x2746.html" >GtkMenuItem</A ></DT ><DT ><A HREF="x2749.html" >GtkCheckMenuItem</A ></DT ><DT ><A HREF="x2752.html" >GtkInputDialog</A ></DT ><DT ><A HREF="x2755.html" >GtkColorSelection</A ></DT ><DT ><A HREF="x2758.html" >GtkStatusBar</A ></DT ><DT ><A HREF="x2761.html" >GtkCurve</A ></DT ><DT ><A HREF="x2764.html" >GtkAdjustment</A ></DT ></DL ></DD ><DT ><A HREF="a2767.html" >GDK Event Types</A ></DT ><DT ><A HREF="a2901.html" >Code Examples</A ></DT ><DD ><DL ><DT ><A HREF="a2901.html#SEC-TICTACTOE" >Tictactoe</A ></DT ><DD ><DL ><DT ><A HREF="a2901.html#AEN2906" >tictactoe.h</A ></DT ><DT ><A HREF="a2901.html#AEN2909" >tictactoe.c</A ></DT ><DT ><A HREF="a2901.html#AEN2912" >ttt_test.c</A ></DT ></DL ></DD ><DT ><A HREF="x2915.html" >GtkDial</A ></DT ><DD ><DL ><DT ><A HREF="x2915.html#AEN2917" >gtkdial.h</A ></DT ><DT ><A HREF="x2915.html#AEN2920" >gtkdial.c</A ></DT ><DT ><A HREF="x2915.html#AEN2923" >dial_test.c</A ></DT ></DL ></DD ><DT ><A HREF="x2926.html" >Scribble</A ></DT ><DD ><DL ><DT ><A HREF="x2926.html#AEN2928" >scribble-simple.c</A ></DT ><DT ><A HREF="x2926.html#AEN2931" >scribble-xinput.c</A ></DT ></DL ></DD ></DL ></DD ></DL ></DIV ></DIV ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE SUMMARY="Footer navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" > </TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" > </TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="c17.html" ACCESSKEY="N" >Next >>></A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" > </TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" > </TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >Tutorial Availability</TD ></TR ></TABLE ></DIV ></BODY ></HTML >