Windows

int,

int, int);

HDC - логический номер контекста устройства;

Следующие четыре параметры определяют координаты

прямоугольника.

Последние два параметра задают ширину и высоту ограничивающего прямоугольника для эллипса, используемого при скруглении угла.

Вывод текста

Для вывода текста имеется пять основных функций.

Функция TextOut предназначена для вывода одной строки. Она определена следующим образом:

BOOL FAR PASCAL TextOut(HDC, int, int, LPSTR, int);

HDC - логический номер контекста устройства;

Следующие два параметры определяют координаты точки привязки выводимой стоки текста.

LPSTR - указатель на выводимую символьную строку.

Последний параметр - число символов в строке текста.

Более мощный вариант функции TextOut представляет собой функция ExtTextOut. Она позволяет управлять интервалом между строками и вырезкой

BOOL FAR PASCAL ExtTextOut( HDC,

int, int,

WORD wOptions,

LPRECT lpRect,

LPSTR lpString,

WORD nCount,

LPINT lpDx );

HDC - логический номер контекста устройства;

Следующие два параметры определяют координаты точки привязки выводимой стоки текста.

wOptions - флаг, принимающий значение 0, ETO_CLIPPED, ETO_OPAQUE и ETO_CLIPPED|ETO_OPAQUE, позволяющий устанавливать прямоугольные области вырезки и при выводе текста затирать фон.

lpRect - указатель на структуру прямоугольника;

lpString - указатель на выводимую символьную строку.

nCount - число символов в строке текста. lpDx -

указатель на массив значений интервалов между

символами.

Функция TabbedTextOut при выводе текста распространяет знаки табуляции до позиций табуляции. Это обеспечивает удобный способ выравнивания столбцов данных. Прототип функции:

LONG FAR PASCAL TabbedTextOut(HDC,

int, int,

LPSTR, int, LPINT, int);

HDC - логический номер контекста устройства;

Следующие два параметры определяют координаты точки привязки выводимой стоки текста.

LPSTR - указатель на выводимую символьную строку.

Следующий параметр - число символов в строке текста.

LPINT - указатель на массив позиций табуляции;

Последний параметр - число элементов массиве позиций табуляции.

Функция DrawText обеспечивает некоторую возможность форматирования и переход в автоматическом режиме на новую строчку при большом количестве строк текста. Ее прототип:

int FAR PASCAL DrawText(HDC, LPSTR, int, LPRECT, WORD);

HDC - логический номер контекста устройства;

LPSTR - указатель на выводимую символьную строку.

Следующий параметр - число символов в строке текста. LPRECT - указатель на структуру прямоугольника,

определяющего позицию вывода и границы для форматирования. Последний параметр определяет режим форматирования.

Для отображения заблокированных пунктов меню и

заблокированных элементов управления блоками диалога Менеджер

Окон использует функцию GrayString.

ЭЛЕМЕНТЫ ОКОННОГО ИНТЕРФЕЙСА

Окна Windows

Главное окно приложения

Каждое приложение располагается в своем собственном окне и имеет по крайней мере хотя бы одно окно - главное окно приложения. Из приложения Windows непосредственно нельзя осуществить вывод на экран, так как экран является разделяемым ресурсом, а средством его разделения являются окна. Таким образом, прежде чем отобразить что-либо на экране, нужно создать окно, и только в окне можно осуществить вывод.

Функция главного окна приложения выполняет в программе ту же роль, что функция main() программы на Си для MS-DOS. При создании окна функция библиотеки SDK выполняет специальные действия начальной подготовки в DOS, не явно осуществляемых функцией main(). Поэтому приложение не содержит функции main(), роль которой выполняет функция WinMain(), получающая управление в начальный момент загрузки приложения. Функция WinMain() выполняет следующие основные действия:

- регистрация класса окна приложения и другие

инициализации;

- создание основного окна приложения и, возможно, других, подчиненных окон;

- запуск цикла обработки сообщений, помещаемых в очередь приложения;

- завершение работы приложения при извлечении из очереди сообщения WM_QUIT.

Прототип функции WinMain выглядит так:

int PASCAL WinMain

(

HANDLE instance, // дескриптор предыдущей копии

HANDLE prevInstance, // предыдущая копия

LPSTR cmdLine, // указатель на командную строку

int cmdShow // флаг "окно открыто/закрыто"

);

instance - однозначно определяет каждую копию

приложения, если приложение запущено несколько раз.

prevInstance - определяет копию данного приложения, которая была последней активной копией. Если этот параметр равен 0, то других копий приложения, исполняемых в данный момент не существует.

cmdLine - дальний указатель на командную строку, оканчивающуюся нулем. Он позволяет приложениям получать данные через командную строку.

cmdShow - определяет, как приложение первоначально отображать на экране: пиктограммы (cmdShow = SW_SHOWMINNOACTIVE) или в виде открытого окна (cmdShow = SW_SHOWNORMAL). Константы SW_SHOWMINNOACTIVE и SW_SHOWNORMAL определены во включаемом файле windows.h.

Регистрация класса окна

Любое окно принадлежит к одному из существующих классов. Класс окна должен быть создан до того, как окно будет отображено на экране. Класс окна определяет общие свойства всех окон данного класса, например: форму курсора при перемещении его в области окна или имя меню, определенного для окон этого класса.

Характеристики окна задаются при регистрации класса окна (в структуре класса окна) и при создании окна. Наиболее общие характеристики окон задаются при регистрации класса окна. Окна, создаваемые при помощи функции CreateWindiw, должны иметь зарегистрированный ранее класс окон.

Есть несколько стандартных классов окон с заранее определенными свойствами. Однако, как правило, каждое приложение регистрирует свой собственный класс с тем, чтобы можно было управлять всеми свойствами окна приложения.

Для того, чтобы зарегистрировать класс окон, следует правильно заполнить структуру типа WNDCLASS и передать эту структуру в виде параметра функции RegisterClass. Структура класса окна имеет вид:

typedef struct tagWNDCLASS


WORD style; // тип окна

LONG (FAR PASCAL *lpfnWndProc)(); // функция окна int cbClsExtra; // размер доп. памяти

int cbWndExtra; // размер доп. памяти

HANDLE hInstance; // индекс копии приложения

HICON hIcon; // индекс пиктограммы

HCURSOR hCursor; // индекс курсора

HBRUSH hbrBackground; // цвет фона окна

LPSTR lpszMenuName; // имя меню

LPSTR lpszClassName; // имя класса окна

WNDCLASS;

lpszClassName - указатель на строку, содержащую имя класса. Поскольку определенный в приложении класс доступен всем приложениям, имя класса не должно повторятся в разных приложениях.

hInstance - манипулятор копии, создающей класс окна; должно содержать индекс копии приложения.

lpfnWndProc - указатель на функцию поддержки окна. Краткое описание этой функции смотри в следующем разделе.

style - содержит набор флагов, определяющих свойства окна. По умолчанию присваивается NULL.

hBrBackground - определяет цвет фона окна.

hCursor - определяет курсор, используемый в данном окне по умолчанию.

hIcon - определяет пиктограмму (icon), которая будет отображаться при переводе окна в неактивное состояние.

lpszMenuName - указатель на имя меню окна, определенное в файле ресурсов.

cbClsExtra - определяет число байт, которое необходимо дополнительно запросить у Windows под эту структуру. Этот обьем памяти будет зарезервирован в конце структуры для всех окон данного класса.

clWndExtra - определяет число байт, которое необходимо дополнительно запросить у Windows для размещения всех структур, создаваемых совместно с данным классом.

После определения полей структуры WNDCLASS необходимо зарегистрировать класс при помощи функции RegisterClass.

BOOL FAR PASCAL RegisterClass( LPWNDCLASS winClass );

Если регистрация класса прошла успешно, то возвращаемое значение TRUE, в противном случае - FALSE.

При регистрации класса окна Windows копирует структуру, описывающую класс окна, в системную область, чтобы другим копиям приложения уже не надо было ее регистрировать.

Функция окна приложения

Функция окна приложения занимается тем, что обрабатывает все сообщения для окон данного класса. Это функция всегда

вызывается неявно Windows при поступлении сообщений в окно, за

которым оно закреплено. Функция окна имеет вид:

long far PASCAL WndProc ( HWND hwnd,

WORD msg,

WORD wParam,

LONG lParam );

hwnd - логический номер окна, идентифицирующий окно, связанное с приложением;

msg - идентификатор приложения;

wParam и lParam определяют дополнительную информацию и зависят от типа сообщения.

Для облегчения работы программиста существует

специальная функция обработки сообщений DefWindowProc с теми

же параметрами, которая производит стандартную обработку всех

сообщений. Кроме того она играет ключевую роль в формировании

информационных потоков сообщений Windows, и ее указание в

функции окна обязательно.

Создание окна

Создание окна производится при помощи функции

CreateWindow. Она создает окно, имеющее указанный тип и принадлежащее к указанному классу. Прототип функции имеет вид:

HWND FAR PASCAL CreateWindow

(

LPSTR, // имя класса окна

LPSTR, // заголовок окна

DWORD, // тип окна

int, // X-координата

int, // Y-координата

int, // Ширина окна

int, // Высота окна

HWND, // Дескриптор копии-родителя

HMENU, // Дескриптор меню

HANDLE, // Дескриптор копии

LPSTR // Дополнительная информация

);

Тип окна является комбинацией битовых флагов,

определяющих стиль окна. Возможные значения типа окна рассмотрены ниже.

Дескриптор копии-родителя определяет порождающее окно. Он определяет, где существует окно и может ли окно быть автоматически показано/скрыто/уничтожено (для всех типов окон). Когда показывается, скрывается или уничтожается, все порожденные им окна разделяют его судьбу

Дескриптор меню позволяет определить меню, которое будет изображаться в окне.

Дескриптор копии позволяет идентифицировать владельца окна, то есть указывает Windows, какой именно экземпляр программы создал окно. В результате Windows получает возможность правильно установить регистр сегмента данных для

инициализации окна.

Последний параметр функции позволяет передать указатель на данные в оконную процедуру. Указатель передается с самым первым сообщением WM_CREATE, что необходимо для обеспечения данных при инициализации окна.

В случае успешного создания окна функция CreateWindow возвращает индекс окна.

Отображение и обновление окна

Окно не отображается на экране сразу после создания; для отображения окна используется функция ShowWindow. Ее прототип:

BOOL FAR PASCAL ShowWindow( HWND wnd, int cmdShow );

wnd - дескриптор отображаемого окна;

cmdShow - определяет, как окно первоначально будет отображаться на экране:

SW_SHOWNORMAL - обычное окно;

SW_SHOWMINIMIZED - минимизированное в виде пиктограммы; SW_SHOWMAXIMIZED - максимизорованное на весь экран;

Для обновления окна используется функция UpdateWindow. Ее прототип выглядит так:

void FAR PASCAL UpdateWindow( HWND wnd );

Типы окна

Тип окна задается 32-битовым целым числом, которое представляет собой комбинацию битовых флагов, определяющих различные свойства окна.

WS_OVERLAPPED - перекрывающееся окно. Перекрывающиеся окна - это основной наиболее универсальный тип окон Windows. Главное окно приложения обычно имеет такой вид.

WS_POPUP - вспомогательные окна. Они используются чаще всего для отображения окон диалога. Вот некоторые свойства вспомогательных окон:

- если такое окно имеет родительское окно, то всегда отображаются поверх всех окон на экране, даже когда пользователь делает активным другое окно;

- вспомогательные окна не имеют заголовка и часто должны иметь фиксированный размер.

WS_CHILD - дочернее окно. Окна такого типа создаются, если у приложения есть главное (а значит и перекрывающее окно) и связаны некоторыми характеристиками с тем окном из которого были вызваны. Все органы управления также являются дочерними окнами. Вот некоторые их свойства:

- дочерние окна никогда не отображаются вне своего родительского окна ни в раскрытом виде, ни в виде пиктограммы;

- координаты дочерних окон отчитываются от верхнего левого угла рабочей области окна-родителя и при перемещении последнего, дочерние окна перемещаются вместе с ним;

- дочернее окно никогда не может стать активным окном.

WS_MINIMIZE - создаваемое окно будет отображено в виде пиктограммы.

WS_VISIBLE - Окно становится видимым сразу после создания. Используется для диалоговых окон.

WS_DISABLED - создается неактивное окно.

WS_CLIPSIBLINGS - исключение областей, занимаемых

другими дочерними окнами из изменяемой области дочернего окна.

Используется только для дочерних окон.

WS_CLIPCHILDREN - исключение областей, занимаемых

другими дочерними окнами при изменении рабочей области

родительского окна. Используется только для родительских окон.

WS_MAXIMIZE - создаваемое окно будет отображено в максимально возможном виде.

WS_CAPTION - окно имеет рамку и заголовок, а следовательно пользователь может перемещать его при помощи мыши.

WS_BORDER - окно имеет широкую рамку без заголовка. Используется при создании диалоговых окон.

WS_DLGFRAME - окно имеет тонкую рамку без заголовка.

WS_VSCROLL - окно имеет вертикальную полосу просмотра.

WS_HSCROLL - окно имеет горизонтальную полосу просмотра.

WS_SYSMENU - окно имеет системное меню.

WS_THICKFRAME - создаваемое окно имеет рамку существенно заметной толщины.

WS_MINIMIZEBOX - окно имеет кнопку минимизации.

WS_MAXIMIZEBOX - окно имеет кнопку максимизации.

Построение меню

Для создания меню нужно проделать:

1. Задать структуру меню в файле ресурсов,

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

2. Каждому пункту меню поставить в соответствие

уникальный идентификатор.

3. Указать имя меню в структуре класса окна.

Определение меню

Определение меню в файле ресурсов должно иметь вид:

MenuName MENU [опции загрузки][опции памяти]

BEGIN

MENUITEM "Item1" IDM_Item1 [, опции]

MENUITEM "Item2" IDM_Item3 [, опции]

...

POPUP "Item3" [, опции]

BEGIN

MENUITEM "Item3-1" IDM_Item3-1 [, опции] MENUITEM "Item3-2" IDM_Item3-2 [, опции] ...

END

END

MenuName - имя ресурса меню для обращения из подпрограммы.

Опции загрузки определяет как следует поступить с ресурсом при загрузке приложения на выполнение - сразу загрузить или при неоходимости.

Опции памяти определяют, как Windows должна обращаться с сегментом памяти, куда загружается ресурс.

Пункты меню определяются между словами BEGIN и END. Они могут быть двух видов: MENUITEM и POPUP. Пункт типа MENUITEM является конечным пунктом меню. При выборе этого пункта функции окна сообщения передается сообщение WM_COMMAND с идентификатором пункта меню в качестве параметра. Пункт типа POPUP является заголовком подменю.

Опции пункта меню могут комбинироваться. В качестве опций пункта меню могут быть следующие значения:

GRAYED - пункт меню не активен. Текст пункта меню отображается в сером цвете.

INACTIVE - пункт меню не активен. Текст пункта меню отображается также как и в других пунктах.

MENUBREAK - этот и следующий за ним пункты меню отображаются в новом столбце (если указан для главного меню, то в новой строке).

MENUBARBREAK - этот и следующий за ним пункты меню отображаются в новом столбце (если указан для главного меню, то в новой строке); предыдущий и новый столбец разделяются вертикальной чертой.

CHECKED - пункт меню помечен галочкой, помещенной слева от него. Не действует для пунктов главного меню.

SEPARATOR - определяет разделитель, который выделяет в группы связанные списки меню.

HELP - пункт меню выравнивается по правой стороне меню.

Обьекты диалога

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

Взаимодействие между родительским окном (окном диалога) и обьектами диалога осуществляется посредством сообщений. Когда пользователь производит какое-либо действие с обьектом диалога, функции окна родителя передается сообщение WM_COMMAND, в качестве параметра wParam которого передается индекс обьекта диалога, а в качестве параметра lParam - специальная дополнительная информация.

Для того, чтобы сконструировать обьект диалога нужно:

1. Зарегистрировать класс окна диалога.

2. Создать дочернее окно функцией CreateWindow, указав зарегистрированный класс окна.

3. В функции окна обьекта диалога определить дескриптор дочернего окна при помощи функции GetParent.

4. По тому или иному действию пользователя уведомлять родительское окно соответствующими сообщениями при помощи функции SendMessage.

Для обьектов диалога как дочерних окон не требуется регистрировать класс окна - в Windows определены стандартные классы окон - обьектов диалога: "button", "edit", "scrollbar", "listbox" и пр.

При использовании стандартных классов Windows для создания обьекта диалога нужно вызвать только функцию CreateWindow.

Рассмотрим основные обьекты диалога.

Кнопки и переключатели

Кнопка "Button" обычно используется для осуществления каких - либо немедленных действий, без переключения или включения/выключения каких-либо опций.

Переключатель "И" ("CheckBox") используется как

переключатель опций вкл/выкл. Будучи соединенными в группу

переключатели реализуют логику "И".

Переключатель "ИЛИ" ("RadioButton") используется как переключатель опций вкл/выкл. Будучи соединенными в группу переключатели реализуют логику "ИЛИ".

Вокруг этих трех основных типов имеются некоторые вариации. Ниже приводится описание стандартных классов кнопок

и переключателей.

BS_PUSHBUTTON - определяет кнопку с жирной рамкой.

BS_DEFPUSHBUTTON - определяет кнопку с жирной рамкой. Обычно используется для определения действия по умолчанию.

BS_CHECKBOX - определяет квадратик, имеющий два

состояния: отмеченное (перечеркнут крестиком) и не отмеченное

(квадратик пуст). В момент отметки рамка квадрата выделяется

жирной линией.

BS_AUTOCHECKBOX - тоже, что предыдущий, только состояние кнопки при отметке отслеживается автоматически.

BS_RADIOBUTTON - определяет круглую кнопку, которая может быть нажата (внутри окружности жирная точка) и отпущена. Справа от кнопки может быть любой поясняющий текст.

BS_AUTORADIOBUTTON - тоже, что и предыдущее, только при отметке кнопки пользователем ранее сделанная отметка автоматически снимается.

BS_3STATE - тоже, что и BS_CHECKBOX, только добавлено состояние, что действие или свойство не действительно (обозначается штриховкой кнопки).

BS_AUTO3STATE - тоже, что и предыдущее, только смена состояний поддерживается автоматически.

BS_GROUPBOX - определяет рамку, охватывающую другие обьекты диалога.

BS_OWNERDRAW - обьект диалога, определяемый

пользователем, который полностью берет на себя работу с ним.

BS_LEFTTEXT - используется для выравнивания

пояснительного текста по левой стороне кнопок.

Кнопки посылают функции окна родителя сообщение

WM_COMMAND,

в качестве параметра lParam указывается дескрипотор органа

управления и код нотификации, служащий для определения того,

какое действие произвел пользователь с кнопкой.

Статические обьекты диалога

Статические обьекты диалога используются для отображения текста и отрисовки оформительских примитивов. Обьекты этого класса могут быть созданы указанием функции CreateWindow имени класса "static". Определены следующие классы статических обьектов:

SS_LEFT - текст, выравненный по левому краю;

SS_CENTER - центрированный текст;

SS_RIGHT - текст, выравненный по правому краю;

SS_ICON - пиктограмма;

SS_BLACKRECT - прямоугольник цвета рамки фона;

SS_GRAYRECT - прямоугольник цвета фона окна;

SS_WHITERECT - прямоугольник цвета окна;

SS_BLACKFRAME - рамка цвета рамки окна;

SS_GRAYFRAME - рамка цвета фона окна;

SS_WHITEFRAME - рамка цвета окна;

SS_USERITEM - обьект, определяемый пользователем.

Редактор

Редактор "edit" позволяет создать дочернее окно и редактировать в нем текст. По умолчанию редактор может редактировать только одну строку. Типы классов редактора приведены ниже.

ES_LEFT - текст, выравненный по левому краю;

ES_CENTER - центрированный текст;

ES_RIGHT - текст, выравненный по правому краю;

ES_MULTILINE - определяет многостраничный редактор;

ES_UPPERCASE - символы переводятся в верхний регистр;

ES_LOWERCASE - символы переводятся в нижний регистр;

ES_PASSWORD - стиль для ввода паролей;

ES_AUTOHSCROLL - автоскроллинг вправо на 10 позиций,

если курсор находится в конце строки;

ES_AUTOVSCROLL - при нажатии ENTER в конце страницы текст автоматически сдвигается вверх на один экран.

В качестве параметров сообщения WM_COMMAND передаются идентификатор дочернего окна-редактора, индекс дочернего окна и код сообщения. Код сообщения может быть:

EN_SETFOCUS - редактору текста передали фокус ввода;

EN_KILLFOCUS - редактор текста потерял фокус ввода;

EN_CHANGE - содержимое редактора изменено;

EN_ERRSPACE - переполнение буфера редактора;

EN_HSCROLL - нажата клавиша горизонтального просмотра;

EN_VSCROLL - нажата клавиша горизонтального просмотра.

Окно список

Окно список "listbox" представляет собой прямоугольник, внутри которого находится листаемый список из текстовых строк. Пользователь может выделить строки списка при помощи курсора. Окно-список используется для просмотра и выбора элементов древовидного списка. Приведем типы окна списка.

LBS_NOTIFY - родительское окно получает информацию о любом действии пользователя в списке;

LBS_SORT - строки сортируются по алфавиту; LBS_MULTIPLESEL - множественный выбор с переключением

выбора для каждой строки;

LBS_OWNERDRAWFIXED - отображение содержимого списка возлагается на функцию родительского окна, все элементы списка могут иметь разную высоту;

LBS_OWNERDRAWVARIABLE - отображение содержимого списка возлагается на функцию родительского окна, все элементы списка могут иметь разную высоту;

LBS_HASSTRINGS - определяет пользовательское окно-список с произвольными строками;

LBS_USETABSTOPS - символы табуляции заменяются на пробелы;

LBS_MULTICOLUMN - определяет многостолбцовый список; LBS_EXTENDEDSEL - в окне-списке можно делать

множественный выбор с помощью мыши и клавиши Shift.

В качестве параметров сообщения WM_COMMAND передаются идентификатор дочернего окна-редактора, индекс дочернего окна и код сообщения. Код сообщения может быть:

LBN_ERRSPACE - списку не хватает памяти;

LBN_SELCHANGE - изменен выбор элемента;

LBN_DBLCLK - выбор двойным нажатием кнопки мыши.

Комбинированный список

Комбинированный список представляет сроку

редактирования, к которой привешено окно-список. Стандартные

типы обьекта:

CBS_SIMPLE - список отображается все время, и текущее выделение отслеживается среди элементов списка;

CBS_DROPDOWN - то же, что и предыдущее, но список не отображается, пока пользователь на нажмет на левую кнопку мыши;

CBS_DROPDOWNLIST - то же, но строка редактирования заменяется на статическую текстовую строку, ее нельзя редактировать;

CBS_OWNERDRAWFIXED - элементы списка отрисовываются пользователем, их высота одинакова;

CBS_OWNERDRAWVARIABLE - элементы списка отрисовываются пользователем, их высота одинакова;

CBS_AUTOHSCROLL - горизонтальная прокрутка в строке редактирования;

CBS_SORT - сортировка автоматическая элементов списка.

ОБМЕН ДАННЫМИ МЕЖДУ ПРИЛОЖЕНИЯМИ

Средства обмена данными между приложениями

Одним из средств, обеспечивающим программную

совместимость, является механизм обмена данными между

различнами приложениями. Специальный почтовый ящик (clipboard)

Windows позволяет пользователю переносить информацию из одного приложения в другое, не заботясь об ее форматах и представлении.

В отличие от профессиональных операциональных

операционных систем, где механизм обмена данными между программами доступен только программисту, в Windows это делается очень просто и наглядно для пользователя.

Механизм обмена данных между приложениями - жизненно важное свойство многозадачной среды. И в настоящее время

производители программного обеспечения пришли уже к выводу,

что для переноса данных из одного приложения в другое

почтового ящика уже недостаточно. Появился новый, более

универсальный механизм - OLE ( Object Linking and Embedding )

- Встроенная объектная связь, который позволяет переносить из одного приложения в другое разнородные данные. Например, с помощью этого механизма данные, подготовленные в системе сетевого планирования Time Line for Windows ( Symantec ), можно переносить в текстовый процессор Just Write ( Symantec ), а затем, скажем, в генератор приложений Object Vision (Borland). Правда, это уже нестандартное средство Microsoft Windows, но тем не менее реализация OLE стала возможной именно в Windows.

Кроме механизма почтового ящика, предназначенного, в основном, для пользователя, программисту в Windows доступны специальные средства обмена данными между приложениями.

Программным путем можно установить прямую связь между задачами, например, принимая данные из последовательного порта, автоматически помещать их, скажем, в ячейки электронной таблицы Excel, средствами которой можно тут же отображать сложные зависимости в виде графиков или осуществлять их обработку в реальном режиме времени (этот механизм носит название динамического обмена данными - Dynamic Data Exchange, DDE ).

Остановимся более подробно на механизме

динамического обмена данными между приложениями.

Динамический обмен между приложениями

Мы обсудим основные идеи работы DDE и использование библиотеки DDE в своих приложениях в следующих разделах:

- Основные термины

- Несколько слов о DDEML

- Взаимодействие Клиента и Сервера

- Транзакции, функция обратного вызова DDE

( CallBack function )

- Service, item и topic имена

- Системный режим

- Инициализация

- Основное назначение и работа функции обратного вызова

- Обработка строк

- Service имена. Регистрация, фильтр

- Диалог между приложениями

- Простой диалог

- Сложный диалог

- Обмен данными между приложениями

- Классы транзакций

- Определение наличия ошибок при динамическом обмене данными.

Основные термины

Клиентское приложение DDE - приложение, которому необходимо установить диалог с сервером и получить данные от сервера в процессе диалога.

DDE-диалог - взаимосвязь между клиентским и серверным приложениями.

Сервер-приложение - DDE приложение, которое передает данные клиенту в процессе диалога.

DDE-Транзакция -обмен сообщениями или данными между клиентом и сервером.

Item имя - строка, идентифицирующая некоторое

множество данных, которое сервер в состоянии передать

клиенту в процессе диалога.

Service имя - строка, генерируемая сервером и

используемая клиентом для установления диалога.

Строковый указатель - двойное слово, генерируемое операционной системой, идентифицирующее строку, передающуюся в процессе динамического обмена данными.

Topic имя - строка, которая идентифицирует тип

данных, необходимых клиентскому приложению при

динамическом обмене данных.

Фильтр транзакции - флаг, который препятствует

передаче нежелательных типов транзакций в функцию

обратного вызова.

Несколько слов о DDEML

В Microsoft Windows динамический обмен данных является формой связи, которая использует общие области памяти для обмена данными между приложениями. Приложение может использовать DDE в некоторый момент времени для передачи и получения новых данных от сервера.

Механизм DDE схож с механизмом почтового ящика, который является частью операционной системы WINDOWS. Существует лишь незначительная разница в том, что почтовый ящик, в большинстве случае, используется как буфер временного хранения информации. DDE может быть инициализирован пользователем и в большинстве случаев продолжать работать без его вмешательства.

Библиотека DDEML обеспечивает пользователя набором средств, которые упрощают использование механизма DDE в WINDOWS приложениях. Вместо того, чтобы обрабатывать, получать и передавать DDE сообщения напрямую, приложения используют функции DDEML библиотеки. Библиотека DDEML также обеспечивает работу со строками и разделяемыми данными, генерируемыми DDE приложениями. Вместо того, чтобы использовать указатели на общие области памяти, DDE приложения создают и обмениваются строковыми указателями, которые идентифицируют строки и данные.

Уже существующие приложения, использующие протокол DDE, основанный на сообщениях полностью совместимы с теми, которые используют библиотеку DDEML. Вот почему приложение, использующее DDE-протокол могут установить диалог и выполнять транзакции с приложениями, использующими библиотеку DDEML.

Взаимосвязь между клиентом и сервером.

DDE возникает всегда между клиентским приложением и серверным. Клиентское приложение инициализирует обмен данными путем установления диалога с сервером и передачи транзакции. Транзакция необходима для данных и обслуживания. Сервер отвечает на транзакцию и обеспечивает клиента данными. Сервер может иметь сразу несколько клиентов в одно и тоже время, в свою очередь, клиент может получать данные сразу от нескольких серверов. Некоторое приложение одновременно может быть и клиентом и сервером. В добавок к вышесказанному, клиент и сервер могут оборвать диалог в любое удобное для них время.

Транзакции, функция обратного вызова DDE

( CallBack function )

DDEML информирует приложение об активности DDE путем передачи транзакции в функцию обратного вызова данного приложения. DDE транзакция схожа с обыкновенным сообщением - это именованная константа, сопровождаемая другими параметрами, которые содержат дополнительную информацию о текущей транзакции.

DDEML передает транзакцию в функцию обратного вызова приложения, которая выполняет некоторое действие согласно типу и виду транзакции. Например, когда клиентское приложение пытается установить дилог с сервером, клиент вызывает функцию DdeConnect. Это означает, что DDEML должна послать транзакцию XTYP_CONNECT в функцию обратного вызова сервера. Функция обратного вызова может позволять или не позволять установку диалога, возвращая TRUE или FALSE DDEML.

Вспомогательные имена и другие названия

DDE сервер использует три зарезервированных типа имен, расположенных иерархично: service, topic item - уникально идентифицируют некоторое множество данных, которое сервер может передать клиенту в процессе диалога.

Service имя - это строка, которую генерирует сервер в те промежутки времени, в которые клиент может установить диалог

Если Вам нужна помощь с академической работой (курсовая, контрольная, диплом, реферат и т.д.), обратитесь к нашим специалистам. Более 90000 специалистов готовы Вам помочь.
Бесплатные корректировки и доработки. Бесплатная оценка стоимости работы.

Поможем написать работу на аналогичную тему

Получить выполненную работу или консультацию специалиста по вашему учебному проекту
Нужна помощь в написании работы?
Мы - биржа профессиональных авторов (преподавателей и доцентов вузов). Пишем статьи РИНЦ, ВАК, Scopus. Помогаем в публикации. Правки вносим бесплатно.

Похожие рефераты: