Motif использует такую же событийно-управляемую модель программирования как и X Toolkit Intrinsics. В своей основе, Motif приложение ожидает пока пользователь произведет ввод, обычно нажмет клавишу, переместит мышь или щелкнет кнопкой мыши. Подобные действия пользователя заставляют X сервер сгенерировать одно или более событий системы X Window. Xt ожидает эти события и диспетчеризирует их соответствующему Motif виджету, обычно это виджет, которому пользователь направляет свой ввод. Виджет может выполните некоторые действия в результате ввода пользователя.Если приложение запрашивает оповещение об этом действии, виджет вызывает приложение - другими словами, он инициирует выполнение процедуры обратного вызова приложения. Когда и Motif и приложение заканчивают отвечать на ввод пользователя, приложение продолжает ожидать дальнейшего ввода пользователя. Этот из цикл инициированных пользователем событий и ответа приложения, называемый циклом обработки событий, продолжается пока пользователь не остановит приложение.
В простых приложениях X Toolkit и Motif выполняют все необходимое для диспетчеризации ввода пользователя к виджетам. Приложение должно выполнить следующие действия:
Подключить все необходимые заголовочные файлы
Инициализировать X Toolkit Intrinsics
Создать один или более виджетов
Определить процедуры обратного вызова и привязать их к виджетам
Сделать виджеты видимыми
Войти в цикл обработки событий
Эта глава рассказывает о каждом из этих шагов. Последующая таблица обобщает эти шаги и некоторые их процедур, которые необходимо вызвать приложению. Обратите внимание, что некоторые из этих шагов отличаются когда приложение использует UIL и MRM. Смотрите главу 4 для дополнительной информации.
Таблица 3-1. Шаги при написании программы
Шаг | Описание | Соответствующие функции |
---|---|---|
1 | Подключить необходимые заголовочные файлы. | #include <Xm/Xm.h> #include <Xm/widget.h> или <Xm/XmAll.h> |
2 | Инициализировать X Toolkit Intrinsics. Выполнить шаги 3 и 4 для каждого виджета. | XtAppInitialize() |
3 | Создать виджет. | XtSetArg() XtCreateManagedWidget() или XtVaCreateManagedWidget() или XmCreate<WidgetName>() с последующим XtManageChild(widget) |
4 | Добавить процедуры обратного вызова. | XtAddCallback() |
5 | Реализовать виджеты. | XtRealizeWidget(parent) |
6 | Войти в цикл обработки событий. | XtAppMainLoop() |
Все Motif приложения должны подключать файл <Xm/Xm.h>. Этот файл содержит определения необходимые для любого приложения. Он также подключает заголовочные файлы Xt: <X11/Intrinsic.h> и <X11/StringDefs.h>.
Каждый Motif виджет также имеет заголовочный файл. Приложение должно подключать заголовочные файлы для всех создаваемых виджетов. Помимо этого некоторые группы подпрограмм Motif имеют собственные заголовочные файлы. Например, приложение, использующее любые подпрограмм буфера обмена Motif должны подключать файл <Xm/CutPaste.h>. Необходимые заголовочные файлы для каждого Motif виджета или подпрограммы описаны в Motif. Справочник программиста.
Далее следует пример, показывающий подключение заголовочных файлов для приложения, использующего только тектовый виджет.
#include <Xm/Xm.h> #include <Xm/Text.h> |
Вместо использования большого числа заголовочных файлов для конкретных виджетов и подпрограмм приложение может подключить файл <Xm/XmAll.h>. Этот файл объединяет все документированные заголовочные файлы Motif.