Мы уже довольно много раз применяли разного рода виджеты, создавали их, отображали и т.д. и т.п. Немного обобщу...
Все виджеты создаются функциями вида gtk_*_new. После этого устанавливаются обработчики событий, внешний вид виджета, виджет упаковывается в котейнер, (gtk_container_add или gtk_box_pack_*). После этого виджет отображается в окне функцией gtk_widget_show.
Теперь по поводу объектно-ориентированности ГТК. Эта библиотека заранее проектировалась так, чтобы быть доступной из не-объектно-ориентированных языков... Но тем не менее в ней есть иерархия классов! Эта иерархия поддерживается встроенными функцйиями... Если в C без плюсиков нет необходимости делать приведение типов, то с помощью макросов в C++ можно такое приведение выполнить... Впрочем, как залог безошибочного выполнения программы, рекомендую приведение делать всегда.
Вот примеры наиболее распространенных макросов:
Как я уже сказал, в ГТК есть иерархия классов. Кроме этой иерархии, есть еще надстройка над ГТК - GTK+, которая вообще работает только в объектных языках... Поэтому я здесь ее и не рассматриваю.. А вот иерархия:
GtkObject +GtkWidget | +GtkMisc | | +GtkLabel | | | +GtkAccelLabel | | | `GtkTipsQuery | | +GtkArrow | | +GtkImage | | `GtkPixmap | +GtkContainer | | +GtkBin | | | +GtkAlignment | | | +GtkFrame | | | | `GtkAspectFrame | | | +GtkButton | | | | +GtkToggleButton | | | | | `GtkCheckButton | | | | | `GtkRadioButton | | | | `GtkOptionMenu | | | +GtkItem | | | | +GtkMenuItem | | | | | +GtkCheckMenuItem | | | | | | `GtkRadioMenuItem | | | | | `GtkTearoffMenuItem | | | | +GtkListItem | | | | `GtkTreeItem | | | +GtkWindow | | | | +GtkColorSelectionDialog | | | | +GtkDialog | | | | | `GtkInputDialog | | | | +GtkDrawWindow | | | | +GtkFileSelection | | | | +GtkFontSelectionDialog | | | | `GtkPlug | | | +GtkEventBox | | | +GtkHandleBox | | | +GtkScrolledWindow | | | `GtkViewport | | +GtkBox | | | +GtkButtonBox | | | | +GtkHButtonBox | | | | `GtkVButtonBox | | | +GtkVBox | | | | +GtkColorSelection | | | | `GtkGammaCurve | | | `GtkHBox | | | +GtkCombo | | | `GtkStatusbar | | +GtkCList | | | `GtkCTree | | +GtkFixed | | +GtkNotebook | | | `GtkFontSelection | | +GtkPaned | | | +GtkHPaned | | | `GtkVPaned | | +GtkLayout | | +GtkList | | +GtkMenuShell | | | +GtkMenuBar | | | `GtkMenu | | +GtkPacker | | +GtkSocket | | +GtkTable | | +GtkToolbar | | `GtkTree | +GtkCalendar | +GtkDrawingArea | | `GtkCurve | +GtkEditable | | +GtkEntry | | | `GtkSpinButton | | `GtkText | +GtkRuler | | +GtkHRuler | | `GtkVRuler | +GtkRange | | +GtkScale | | | +GtkHScale | | | `GtkVScale | | `GtkScrollbar | | +GtkHScrollbar | | `GtkVScrollbar | +GtkSeparator | | +GtkHSeparator | | `GtkVSeparator | +GtkPreview | `GtkProgress | `GtkProgressBar +GtkData | +GtkAdjustment | `GtkTooltips `GtkItemFactory
Выглядит впечатляюще, а? Как Вавилонская башня после ее редактирования сумасшедшим программистом в EMACS. Надеюсь, читатель мне простит, если все это мы рассматривать не будем, а только самое нужное...