43594 (662702), страница 5
Текст из файла (страница 5)
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.
Вспомогательные имена и другие названия