|
Программирование >> Программирование на языке c++
тов. Здесь API - Application Programmable Interface - это множество функций WINDOWS, которые обеспечивают взаимодействие системы с прикладной программой (эти функции являются аналогом системных обработчиков прерываний MS-DOS); 3) если WINDOWS хочет обратиться к прикладной программе, также посылается сообщение. При этом управление передается некоторой специальной части прикладной программы (рис. 9.6), которая имеет структуру инструкций switch-case языков C/C++. В эту часть передается параметр (типа WM CREATE, WM MOVE и т. п.), задающий действия, которые необходимо выполнить; 4) сообщение может быть направлено либо непосредственно, либо через очередь. В последнем случае сообщения будут извлекаться из очереди прикладной программой. В обоих случаях прикладная программа имеет одну центральную точку получения и обработки сообщений (рис. 9.6); 5) функция TApplication: :MessageLoop как раз и используется для получения сообщений, поступающих от системы WINDOWS. Если сообщение получено, то вызывается функция TApplication: :ProcessAppMsg (см. рис. 9.4). Если в очереди нет сообщений, вызывается функция TApplica-tion::IdleAction. Эту функцию можно переопределить для того, чтобы иметь возможность выполнять некоторые действия в процессе ожидания сообщений. Завершение прикладной программы осуществляется выбором подпунктов меню Exit , Close или нажатием клавиш Alt-F4. После этого автоматически вызывается функция CanClose главного окна (т. е. первого построенного окна). Эту функцию можно переопределить и выполнить некоторые действия перед завершением программы (например, сохранить некоторые файлы и т. п.). 9.1.2. Базовые структуры простейших программ Если необходимо переопределить функцию, которая принадлежит классу TApplication, следует построить производный класс от TApplication. Например, последняя программа может быть изменена так: #lnclude <owl\applicat.h> class myapp : public TApplication { public: my app(const char far* name) : TApplication(name) {} int OwlMain(int argc.char* argv[]) { return my app( New ) .Run(); } Объявление class my app : public TApplication говорит о том, что определенный пользователем класс ту арр является производным классом класса TApplication. После запуска программы на выполнение на экране появится окно, изображенное на рис. 9.3. Выше уже говорилось о необходимости переопределения функции TApplication::InitMainWindow, чтобы сконструировать полезную программу. По умолчанию функция InitMainWindow строит стандартное главное окно, которое является бесполезным, поскольку пользователь не может с ним работать. Рассмотрим простейшее доопределение функции InitMainWindow: void my app :: lnitMainWindow() { SetMainWindow(new TFrameWindow{0, New )); } При этом необходимо выполнить следующие действия: ♦ создать объект класса TFrameWindow или производный объект от класса TFrameWindow: new TFrameWindow(0, New ); ♦ вызвать функцию TApplication::SetMainWindow и передать ей в качестве параметра указатель на сконструированный объект класса TFrameWindow: SetMainWindow (new TFrameWmdow(0, New ));. Функция SetMainWindow возвращает указатель на объект, соответствующий предыдущему (старому) главному окну экрана. Если старого окна нет (прикладная программа только запускается на выполнение), то эта функция возвращает значение 0. Класс TFrameWindow имеет два конструктора, из которых наиболее часто используется следующий: TFrameWindow (TWindow *parent, const char far *title = 0, TWindow *clientWnd = 0, BOOL shrinkToClient = FALSE, TModule *module = 0); где parent - это указатель на родительское окно. Если такого окна нет, то надо назначать parent = 0; title - указатель на строку-заголовок для окна; clientWnd - указатель на объект, которьш обслуживает рабочую область окна; shrinkToClient задает сокращение (TRUE) или нет (FALSE) размера фрейма до размера рабочей области; module - указатель на объект класса TModule (здесь следует использовать значение, заданное по умолчанию). В приведенном выше примере объект класса TFrameWindow был создан следующим образом: new TFrameWindow(0, New ); В результате на экране дисплея появится окно, показанное на рис. 9.3. Окончательная программа будет выглядеть следующим образом: #include <owl\applicat.h> #include <owl\framewin.h> файл заголовка для TFrameWindow class my app : public TApplication { public: my app() : public TApplication() {} virtual void lnitMainWindow(); мы хотим nepeonpe- делить заданную no умолчанию функцию InitMainWindow void my app :: InitMalnWindowQ { SetMainWindow(new TFrameWindow(0, New )); } int OwlMain(int,char**) { return my app().Run(); } 9.1.3. Интерфейсные элементы и интерфейсные объекты При работе в среде WINDOWS используются различные элементы графического интерфейса (средства управления.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |