Программирование >>  Программирование на языке c++ 

1 ... 143 144 145 [ 146 ] 147 148 149 ... 159


ОКНОМ. В нашем примере бьшо использовано следующее объявление:

class my dlg : public TDialog, public TVbxEventHandler

Поскольку класс my dlg имеет двух родителей, то использовалось макро DEFINE RESroNSE TABLE2(my dlg, TDialog, TVbxEventHandler). Макро EV ¥BXEVENTNAME позволяет перехватывать сообщения от средств управления VBX. Рассмотрим пример:

EV VBXEVENTNAME(IDC BIPICT2, Click ,EvClick),

где IDC BIPICT2 - идентификатор сообщения, Click - имя сообщения (соответствующие значения определяются в самой системе), EvClick - функция отклика. Кроме Click , в системе определены и другие значения, например: DblClick , GotFocus , KeyDown , KeyPress , KeyUp , LostFocus и т. п. Используемая в программе функция MessageBeep включена в API WINDOWS и позволяет генерировать звук. Сообщения VBX можно описать, например, так:

#define IDC BIPICT1 101 #define 1DC BIP1CT2 102

Предположим, что с помощью инструмента Resource Workshop в окне диалога созданы два средства управления VBX (две картинки). Когда на экране будет выведено окно диалога, мы увидим эти картинки. Если переместить курсор мыши на первую картинку, послышится звуковой сигнал, если выбрать вторую картинку - длинный звуковой сигнал.

9.6.7. Передача управляющих данных

Система WINDOWS поддерживает специальный механизм передачи данных между окнами. При этом необходимо построить буфер, который обычно служит компонентом-данным окна-родителя и содержит поля данных для средств управления, которыми являются: триггерные кнопки (check box), комбинированные кнопки (combo box), окна редактирования (edit box), списки (list box), взаимоисключающие кнопки (radio button) и окна сканирования (scroll bar). Буфер можно объявить так:

struct my buf { char fromEditBox[50];

UINT RadioButton; }



При ЭТОМ необходимо выполнить следующие правила: > поля должны быть заданы только для тех средств управления, чьи данные будут действительно передаваться;

> поля должны быть объявлены в той же последовательности, что и описания средств управления в соответствующем конструкторе. Если механизм передачи включен (используйте функции EnableTransfer и DisableTransfer для включения и выключения этого механизма), то соответствующие данные будут автоматически передаваться, когда окно создается или когда диалоговое окно создается (Create) или выполняется (Execute).

Буфер можно описать как данное с атрибутом public в интерфейсном объекте родителе, например:

my buf transf buf;

Если этот буфер бьш описан в классе my win, то в соответствующий конструктор необходимо добавить следующую строку [8]:

TransferBuffer = (void far*)&(((my win *)Parent) ->

transf buf);

Она назначает адрес описанного буфера (transf buf) указателю TransferBuffer, имя которого задано в самой системе. В результате будет установлена связь между средствами управления окна и буфером.

9.6.8. Фреймы, поддерживающие работу со многими документами

Такие фреймы (MDI фреймы) позволяют создавать множество окон-детей для различных задач, таких, как управление базами данных или редактирование текста. MDI фреймы имеют следующие компоненты: > видимый MDI фрейм (объект класса ТМВ1Ргате.или его потомка);

> невидимое рабочее окно MDI (объект класса TMDI-Client);

> видимые MDI окна-дети, которые можно динамически создавать и удалять. Работа с такими окнами подцерживается объектами класса TMDIChild или его потомками.



Рассмотрим две программы, которые используют этот механизм.

Первая программа строит MDI фрейм и позволяет создавать окна-дети, которые в данном примере являются бесполезными:

#include <owl\mdi.rh> #include <owl\mdichild.h> #include <owl\mdi.h> #include <owl\applicat.h> #define MENU 1 1

#define IDM COMMANDS 500 class my app : public TApplication { public:

my app() : TApplicationO {} protected:

virtual void lnitMainWindow{void); }; class my client : public TMDIClient { public:

my clientO: TMDIClientO {} }; void my app :: lnitMainWindow{void) { MaioWindow = new TMDIFrame( MDI ,

TReslD{IDM COMMANDS), *new my client); } int OwlMain(int, char**) { return my app().Run(); }

Вторая программа автоматически подсчитывает количество окон-детей:

#include <owl\mdi.rh> #include <owl\mdichild.h> #include <owl\mdi.h> #include <owl\applicat.h> #include <owl\edit.h> #include <owl\scroller.h> #include <string.h>

#include mdi2.h этот файл описывает различные константы



1 ... 143 144 145 [ 146 ] 147 148 149 ... 159

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика