Расчет и анализ потерь активной мощности
Назначение и основные функции КП Компоновщик расчетных схем. Требования, предъявляемые к системам подготовки, отладки и поддержания данных. Пользовательский интерфейс КП Компоновщик расчетных схем в MS DOS. Особенности программирования в Windows.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 13.04.2010 |
Размер файла | 316,1 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Справка. Предоставляется информация об использованных номерах отображений узлов, что позволяет избежать возможное их дублирование.
Параметры ветвей. Параметры ветвей могут создаваться и поддерживаться с помощью Отладчика независимо и самостоятельно.
Каждой ветви соответствует строка, состоящая из нескольких полей. Назначение каждого поля поясняется титрами (приведены условные обозначения).
Для облегчения и ускорения отладки параметров ветвей предлагаются различные возможности сортировки, комбинирования и поиска, совместного анализа исходных данных. Параметры ветвей можно сортировать в порядке возрастания номеров инцидентных узлов.
В процессе отладки параметров ветвей для пользователя доступны вызовы функций, предоставляющих следующие возможности:
Вызов Протокола. Протокол доступен либо после трансляции любого файла основной базы данных, либо после компоновки расчетной схемы.
Помощь.
Узел. Одна из возможностей выделения группы ветвей (выбираются ветви, примыкающие к указанному узлу).
Ветвь. Данная функция облегчает и ускоряет поиск нужной ветви по ее номеру; одновременно проверяется наличие дубля.
Поиск мнимо удаленных ветвей. Функция избавляет от необходимости поиска мнимо удаленных ветвей и облегчает удаление и включение ветвей при формировании расчетной схемы.
Трансформаторы. Функция предназначена для отладки параметров трансформаторных ветвей.
Реакторы. Функция предназначена для отладки параметров реакторов.
Справка. Предоставляется информация об использованных номерах ветвей, что позволяет избежать возможного их дублирования.
Расстановка ТИ. Файл расстановки ТИ рабочей базы данных создается после трансляции файла расстановки ТИ основной базы данных. Отладчик позволяет создавать, поддерживать и отлаживать этот файл независимо и самостоятельно.
Для облегчения и ускорения отладки расстановки ТИ предлагаются различные возможности сортировки, комбинирования, поиска, совмещения с фрагментом электрической сети. ТИ можно сортировать в порядке возрастания их номеров.
В процессе отладки расстановки ТИ для пользователя доступны вызовы функций, предоставляющих следующие возможности:
Вызов Протокола. Протокол доступен либо после трансляции любого файла основной базы данных, либо после компоновки расчетной схемы.
Помощь.
Узел. Одна из возможностей выделения группы ТИ: выбираются ТИ, датчики которых установлены возле (в) указанного узла; одновременно выводится фрагмент электрической сети (список ветвей, примыкающих к указанному узлу), что значительно облегчает проверку соответствия кодировки расстановки ТИ и расчетной схемы.
Ветвь. Функция облегчает и ускоряет поиск датчиков ТИ, установленных на ветви.
Список мнимо удаленных ТИ. Функция избавляет от поиска мнимо удаленных ТИ и облегчает отключение и включение датчиков ТИ при формировании расчетной схемы.
Поиск. Данная функция облегчает и ускоряет поиск нужного ТИ по его номеру; одновременно проверяется наличие дубля.
Код. Автоматически восстанавливается код измеряемого параметра режима ранее мнимо удаленного ТИ независимо от срока давности.
Расстановка ТС. Файл расстановки ТС рабочей базы данных создается после трансляции файла расстановки ТС основной базы данных. Отладчик позволяет создавать, поддерживать и отлаживать этот файл независимо и самостоятельно.
Для облегчения и ускорения отладки расстановки ТС предлагаются различные возможности сортировки, комбинирования, поиска, совмещения с фрагментом электрической сети. ТС можно сортировать в порядке возрастания их номеров.
В процессе отладки расстановки ТС для пользователя доступны вызовы функций, предоставляющих следующие возможности:
Вызов Протокола. Протокол доступен либо после трансляции любого файла основной базы данных, либо после компоновки расчетной схемы.
Помощь.
Узел. Одна из возможностей выделения группы коммутационных аппаратов (КА): выбираются КА, относящиеся к указанному узлу; одновременно выводится фрагмент электрической сети (список ветвей, примыкающих к указанному узлу), что значительно облегчает проверку соответствия кодировки расстановки ТС и расчетной схемы.
Список мнимо удаленных ТС. Функция избавляет от поиска мнимо удаленных ТС и облегчает отключение и включение датчиков ТC при формировании расчетной схемы.
Поиск. Данная функция облегчает и ускоряет поиск нужной ТС по ее номеру; одновременно проверяется наличие дубля.
Код. Автоматически восстанавливается код ранее мнимо удаленной ТС независимо от срока давности.
Управляющая информация. Управляющая информация создается и поддерживается только Отладчиком. Эта информация отражает специфические особенности реализованных алгоритмов (по умолчанию для большинства параметров берутся рекомендуемые значения).
В процессе редактирования управляющей информации для пользователя доступны вызовы функций, предоставляющих следующие возможности:
Переключение «окон». Весовые коэффициенты, используемые при идентификации параметров элементов электрической системы и характеризующие достоверность априорных значений идентифицируемых параметров, выделены в отдельную группу, для их просмотра и коррекции предоставляется отдельное «окно». Переход из одного «окна» в другое осуществляется с помощью этой функции.
Вызов Протокола. Протокол доступен либо после трансляции любого файла основной базы данных, либо после компоновки расчетной схемы.
Вспомогательные массивы. Вспомогательные массивы создаются и поддерживаются только Отладчиком. Эти массивы (генераторные узлы, внешние узлы (связи), автотрансформаторы с РПН) используются при формировании выходных форм ИУП, поэтому должна выдерживаться жесткая позиционная привязка; любое их изменение должно быть согласовано с выходными формами ИУП. Объекты, указанные в этих массивах, могут быть отключены (не учитываться) в формируемой расчетной схеме.
В процессе редактирования вспомогательных массивов для пользователя доступны вызовы функций, предоставляющих следующие возможности:
Переключение «окон». Выбирается нужный вспомогательный массив.
Вызов Протокола. Протокол доступен либо после трансляции любого файла основной базы данных, либо после компоновки расчетной схемы.
Помощь.
Поиск. Функция облегчает и ускоряет поиск нужного элемента вспомогательного массива, одновременно проверяется наличие дубля.
2.3.4 Компоновка
Компонуется расчетная схема из отдельных оттранслированных файлов - формируется единая для всех решаемых технологических задач математическая модель электрической системы.
На этом этапе производится основная программная проверка правильности подготовки отдельных типов исходных данных (представление чисел, соответствие последовательности чисел определенному элементу, допустимые отношения и предельные значения параметров системы и режима, текущие размерности массивов), а также их соответствие как составляющих единой математической модели (соответствие классов напряжений, связность графа электрической сети, соответствие кодировки расстановки ТИ и ТС расчетной схеме, топологическая наблюдаемость энергосистемы, связность узлов расчетной схемы по исходным значениям ТС). Сообщения об обнаруженных ошибках заносятся в Протокол.
В процессе компоновки расчетной схемы выполняется наиболее трудоемкая часть расчетов, не требующая вычислений в реальном времени (реализация принципов оптимального упорядочения; формирование собственно математической модели электрической системы; имитация исключений Гаусса, определение местоположения ненулевых элементов и упаковка разреженных матриц; формирование и упаковка вспомогательных массивов, обеспечивающих высокую вычислительную эффективность реализованных в СП СПУРТ алгоритмов).
Подменю «Компоновка» содержит два пункта: Компоновка, Протокол. Протокол доступен либо после трансляции любого файла основной базы данных, либо после компоновки расчетной схемы.
Если выбран пункт «Компоновка», предоставляется справка о сформированных расчетных схемах Следует выбрать номер формируемой расчетной схемы и ввести шифр для нее.
Основные этапы компоновки расчетной схемы контролируются, для чего на экран дисплея выводится их перечень и отмечается характер завершения каждого из них.
2.3.5 Документы
Выходные документы выводятся в файл, который создается после выбора подменю «Документы».
Выходные документы: таблица соответствия, каталог кадров, параметры системы, расстановка ТИ, расстановка ТС, идентифицируемые элементы. Все они, за исключением параметров системы и расстановки ТИ, могут выдаваться для любой существующей расчетной схемы.
Таблица соответствия устанавливает жесткую позиционную связь между данными, которыми обмениваются ИУП и ИВП.
Каталог кадров содержит шаблоны с указанием адресов для отображения обобщенной информации.
Выходные документы сопровождаются необходимыми пояснениями.
Пользовательский интерфейс КП Компоновщик расчетных схем разработан таким образом, чтобы облегчить работу пользователя, а использование при программировании стандартных элементов интерфейса ОС Windows должно обеспечить единый стиль диалога с пользователем.
3. Особенности windows-программирования
Windows 95 - одна из последних версий графической операционной системы (ОС) Windows, представленной впервые в ноябре 1985 года для использования на компьютерах типа IBM PC и совместимых с ним. За последнее десятилетие ОС Windows почти полностью вытеснила всех конкурентов и стала фактически эталоном ОС для персональных компьютеров.
В Windows 95 объединены средства, имеющиеся в более ранних ОС. К ним также добавлены новые средства, позволяющие более быстро выполнять большие объемы работ.
Программирование под Windows является одним из видов объектно-ориентированного программирования (ООП). В основе ОС Windows лежит ее способность отображать информацию, используя для этого окна. Окно - это прямоугольная область на экране, оно получает информацию от клавиатуры или мыши пользователя и выводит графическую информацию на своей поверхности (можно одновременно открыть несколько окон, чтобы одновременно работать с несколькими приложениями, тем самым увеличив производительность компьютера). Пользователь рассматривает окна на экране в качестве объектов и непосредственно взаимодействует с этими объектами.
Самой примечательной особенностью Windows является графический интерфейс пользователя. Дисплей сам становится источником, откуда в машину вводится информация. Он показывает различные графические объекты в виде картинок и конструкций для ввода информации (таких, как кнопки или полосы прокрутки). Используя клавиатуру или мышь, пользователь может непосредственно манипулировать этими объектами на экране. Графический интерфейс пользователя Windows существенно облегчает диалог с персональным компьютером.
ОС Windows позволяет создавать т.н. «дочерние окна управления». Дочернее окно обрабатывает сообщения мыши и клавиатуры и извещает родительское окно о том, что состояние дочернего окна изменилось. Оно инкапсулирует особые действия, связанные с графическим представлением окна на экране, реакцией на пользовательский ввод, и извещения другого окна при вводе важной информации. Можно создавать свои собственные дочерние окна управления, но есть также возможность использовать преимущества нескольких уже определенных классов окна (и оконных процедур), с помощью которых программа может создавать стандартные дочерние окна управления. Windows содержит следующие предопределенные классы окон: кнопка, радиопереключатель, флажок, окно редактирования, окно списка, окно комбинированного списка, статическое окно, полоса прокрутки.
Для упрощения создания Windows_программ с интерфейсом пользователя, соответствующим интерфейсу оболочки системы, корпорация Microsoft разработала библиотеку органов управления общего пользования (common control library). Она содержит 17 элементов, которые условно можно разделить на четыре категории: органы управления главного окна (панель инструментов, окно подсказки, строка состояния), составные диалоговые органы управления (страница свойств, набор страниц свойств), органы управления Windows Explorer (дерево просмотра, список просмотра) и другие органы управления (например, горячая клавиша, индикатор процесса, окно с движком для выбора значения из диапазона). Как дочерние окна управления, так и органы управления общего пользования часто используются при создании Windows_приложений.
Важной особенностью OC Windows является многозадачность. Под Windows 95 любая программа становится резидентной и несколько программ одновременно могут иметь вывод на экран и выполняться. Кроме того, программы сами по себе могут иметь несколько потоков выполнения, которые, как кажется, выполняются параллельно. В основе этого принципа лежит использование ОС аппаратного таймера для распределения процессорного времени между одновременно выполняемыми процессами. [4]
К основным преимуществам ОС Windows 95 относятся следующие:
улучшенный интерфейс;
более простое управление файлами, включая поддержку сетевых связей и длинных имен файлов;
технология Plug and Play автоматически определяет и настраивает дополнительные устройства, подключаемые к компьютеру;
32 - битная многозадачная среда позволяет одновременно работать нескольким программам;
улучшенные средства поиска;
улучшенная поддержка мультимедиа;
расширенные возможности установления связей, включая электронную почту, факсы, электронные доски объявлений, Internet;
управление процессом печати документов.
Рассмотрим более подробно процесс создания прикладной программы Windows.
3.1 Главное окно
Прикладная программа Windows - это любая программа, которая специально написана для работы в операционной среде Windows и использующая интерфейс прикладной программы (API).
Прикладная программа Windows имеет следующие основные компоненты: основную функцию WinMain; т.н. «оконную процедуру» - функцию WndProc.
WinMain - это точка входа в программу. В любой программе для Windows имеется функция WinMain, она определяется следующим образом:
integer function WinMain (hInstance, hPrevInstance, &
lpszCmdLine, nCmdShow).
hInstance - дескриптор (описатель, хэндл) экземпляра. Это уникальное число, идентифицирующее программу, когда она работает под Windows;
hPrevInstance - дескриптор предыдущего экземпляра программы. Под Windows 95 этот параметр всегда NULL;
lpszCmdLine - указатель на оканчивающуюся нулем строку, в которой содержатся любые параметры, переданные в программу из командной строки.
nCmdShow - число, показывающее, каким должно быть выведено на экран окно в начальный момент.
В большинстве случаев эта функция делает следующее:
вызывает функции инициализации, которые регистрируют классы окон, создают окна и выполняют другие инициализации;
запускает цикл обработки сообщений из очереди прикладной программы;
завершает работу программы.
WndProc - это функция многократного вызова, т.е. функция программы, которую вызывает Windows. Сама программа никогда не вызывает эту функцию напрямую. Каждое окно имеет соответствующую оконную процедуру. Оконная процедура - это способ инкапсулирования кода, отвечающего за ввод информации и за вывод информации на экран, что реализуется путем посылки «сообщений» окну.
В процессе создания главного окна программы условно можно выделить четыре этапа:
регистрация класса главного окна;
создание главного окна;
отображение и корректировка главного окна;
организация цикла сообщений.
Рассмотрим подробнее каждый из этапов.
Регистрация класса окна.
Окно всегда создается на основе класса окна. Класс окна идентифицирует оконную процедуру, которая выполняет процесс обработки сообщений, поступающих окну, а также определяет некоторые атрибуты окна, уникальные для него, такие, например, как форма курсора и имя меню окна. На основе одного класса окна можно создать несколько окон.
Перед созданием окна для программы необходимо зарегистрировать класс окна путем вызова функции RеgisterСlаss:
ret = RеgisterСlаss (lpwc).
ret - целочисленная переменная, содержащая возвращаемое функцией значение;
lpwc - указатель на структуру типа T_WNDCLASS, содержащую в своих двенадцати полях информацию об имени, атрибутах, ресурсах и функции окна данного класса.
Заполнение структуры и регистрация класса окна производятся в WinMain. Если регистрация прошла успешно, функция возвращает число, идентифицирующее регистрируемый класс. В противном случае она возвращает ноль.
Создание окна.
Окно создается с помощью функции СreateWindowEx (она отличается от аналогичной функции CreateWindow возможностью задания «расширенного» стиля окна и наличием параметра, используемого в качестве указателя на какие-то данные, на которые программа в дальнейшем могла бы ссылаться). Эта функция побуждает Windows создать окно, которое имеет указанный тип и принадлежит к определенному классу. Вызов функции СreateWindowEx осуществляется следующим образом:
hWnd = CreateWindowEx (&
INT4 (WS_EX_DLGMODALFRAME), ! «расширенный» стиль окна &
lpszClassName, ! Имя класса окна &
lpszAppName, ! Заголовок главного окна &
INT4 (WS_OVERLAPPEDWINDOW), ! Стиль окна &
0, ! X - координата левого верхнего угла &
0, ! Y - координата верхнего левого угла &
GetSystemMetrics (SM_CXSCREEN) - 32, ! Ширина окна &
GetSystemMetrics (SM_CYSCREEN) - 32, ! Высота окна &
NULL, ! Дескриптор родительского окна &
hMenu, ! Дескриптор меню окна &
hInstance,! Дескриптор экземпляра &
NULL) ! Параметры создания
Параметр с комментарием «имя класса окна» содержит строку, являющуюся именем только что зарегистрированного класса окна («Krs_w»). Т.о., этот параметр связывает окно с классом окна.
«Заголовок главного окна» содержит текст, который появляется в строке заголовка («Компоновщик расчетных схем»).
Окно, созданное программой, является обычным перекрывающимся окном с заголовком, системным меню, главным меню, иконками для сворачивания, разворачивания и закрытия окна справа на строке заголовка и рамкой окна (стандартный стиль окон WS_ОVЕRLАРРЕDWINDOW). Из предлагаемого ОС Windows набора «расширенных» стилей выбран стиль WS_EX_DLGMODALFRAME, добавляющий окну двойную рамку.
Параметр с комментарием «дескриптор родительского окна» устанавливается в NULL, т. к. у нашего окна отсутствует родительское окно. Параметр hMenu содержит дескриптор меню окна. В параметр hInstance помещается дескриптор экземпляра программы, переданный программе в качестве параметра функции WinMain. Параметр с комментарием «параметры создания» при необходимости используется в качестве указателя на какие-нибудь данные, на которые программа в дальнейшем могла бы ссылаться (в рассматриваемой программе такие данные не используются - параметр установлен в NULL).
Вызов СreateWindowEx возвращает дескриптор созданного окна. Этот дескриптор хранится в переменной hWnd. Для многих функций Windows в качестве параметра требуется hWnd, указывающий Windows, к какому окну применить функцию. Если функция СreateWindowEx не может создать окно, она возвращает NULL.
Отображение и корректировка окна.
Хотя функция СreateWindowEx и создает окно, она автоматически не индицирует его. Программа должна предусмотреть индикацию окна с помощью функции ShowWindow и корректировку области пользователя окна с помощью функции UpdateWindow.
Функция ShowWindow побуждает Windows индицировать новое окно:
bret = ShowWindow (hWnd, nCmdShow)
hWnd - дескриптор созданного функцией CreateWindowEx окна;
nCmdShow - величина, передаваемая в качестве параметра функции WinMain и задающая начальный вид окна на экране;
bret - логическая переменная, содержащая возвращаемое функцией значение.
Функция ShowWindow выводит окно на экран. Вызов функции UpdateWindow вызывает затем перерисовку рабочей области:
bret = UpdateWindow (hWnd).
При обработке этого вызова в оконную процедуру посылается сообщение WМ_РАINТ.
Обе функции при успешном завершении возвращают TRUE, в противном случае - FALSE.
Вид главного окна Компоновщика расчетных схем представлен на рисунке 3.1.
Рис. 3.1. Вид главного окна
Как видно из рис. 3.1, главное окно Компоновщика содержит заголовок, строчку меню (структура которого была рассмотрена во 2_ой главе), рабочую область, а также панель инструментов и панель состояния, которые более подробно будут рассмотрены ниже.
Цикл обработки сообщений
Итак, окно окончательно выведено на экран. Теперь программа должна подготовить себя для получения информации от пользователя через клавиатуру и мышь. Windows поддерживает «очередь сообщений» для каждой программы, работающей в данный момент в системе Windows. При вводе информации Windows преобразует ее в «сообщение», которое помещается в очередь сообщений программы.
Цикл обработки сообщений - это программный цикл, при работе в котором функция WinMain извлекает сообщения из очереди сообщений и направляет их соответствующим окнам. Для рассматриваемой программы цикл обработки сообщений выглядит следующим образом:
do while (GetMessage (mesgt, NULL, 0, 0))! Получить сообщение
i = 0
if (hDlgModeLess. NE. NULL) then ! Диалоговое окно активно?
if (IsDialogMessage (hDlgModeLess, mesgt)) i =1! Есть сообщение
! для немодального диалогового окна
end if
………! Аналогичным образом распределяются
………! сообщения для других немодальных
………! диалоговых окон, создаваемых программой
if (i.ne.0) cycle
i = TranslateMessage (mesgt) ! Транслировать сообщение
i = DispatchMessage (mesgt) ! Отправить сообщение
end do
Вызов функции GetMessage, с которого начинается цикл обработки сообщений, извлекает сообщение из очереди сообщений. Этот вызов передает Windows указатель на структуру mesgt типа T_МSG. Второй, третий и четвертый параметры, установленные в NULL или 0, показывают, что программа получает все сообщения от всех окон, созданных этой программой. Windows заполняет поля структуры сообщений информацией об очередном сообщении из очереди сообщений. Наиболее важными полями этой структуры являются:
hWnd - дескриптор окна, для которого предназначено сообщение;
message - тип сообщения;
wParam, lParam - два 32_разрядных параметра сообщения, смысл и значение которых зависят от особенностей сообщения.
Если поле message сообщения, извлеченного из очереди сообщений, равно любому значению, кроме WМ_QUIТ, то функция GetMessage возвращает TRUE. Сообщение WМ_QUIТ заставляет программу прервать цикл обработки сообщений.
При организации цикла обработки сообщений программы, создающей в ходе работы немодальные окна диалога Более подробно немодальные, а также модальные окна диалога будут рассмотрены в п. 3.3., необходимо учитывать, что сообщения для немодальных окон диалога проходят через очередь сообщений программы. Цикл обработки сообщений должен передавать такие сообщения соответствующим оконным процедурам окон диалога. Это реализуется следующим образом. Функция создания немодального диалога CreateDialog возвращает дескриптор окна (не равный 0), который запоминается в глобальной переменной (например, hDlgModeLess). Если диалог создан и сообщение предназначено для него, то функция IsDialogMessage отправляет сообщение оконной процедуре окна диалога, возвращая TRUE, тогда вспомогательная переменная i принимает значение 1, сигнализируя тем самым о перехвате сообщения диалоговым окном. В противном случае функция возвращает FALSE и переменная i не меняется. Если созданы и другие активные немодальные диалоги, то для них реализуются аналогичные операции. Таким образом гарантируется, что функции TranslateMessage и DispatchMessage будут вызываться только тогда, когда немодальные окна диалога не созданы или нет сообщений для них.
Т.к. программе необходимо обрабатывать вводимые с клавиатуры символы, нужно преобразовывать каждое полученное сообщение с помощью функции TranslateMessage. Эта функция отыскивает пары сообщений WM_KEYDOWN и WM_KEYUP и генерирует соответствующее сообщение WM_CHAR.
Функция DispatchMessage отправляет сообщение для его обработки соответствующей оконной процедуре. В рассматриваемой программе такой оконной процедурой является функция MainWndProc. После того, как MainWndProc обработает сообщение, оно возвращается в Windows, которая все еще обслуживает вызов функции DispatchMessage. Windows возвращает управление в программу к следующему за вызовом DispatchMessage оператору и цикл обработки сообщений в очередной раз возобновляет работу, вызывая GetMessage.
Реальная работа начинается в оконной процедуре, которая обеспечивает реакцию на вводимую информацию и сообщения системы управления окнами, получаемые от Windows.
3.2 Процедура обработки сообщений
Оконная процедура определяется следующим образом:
integer function MainWndProc (hWnd, mesg, wParam, lParam).
Первым параметром является hWnd, дескриптор получающего сообщение окна. Второй параметр - число, которое идентифицирует сообщение. Параметры wParam и lParam содержат дополнительную информацию о сообщении и называются «параметрами сообщения». Конкретное значение этих параметров определяется типом сообщения.
Обработка сообщений
Оконная процедура получает сообщения от Windows. Это могут быть сообщения о вводе, переданные функцией WinMain (например, WM_KEYDOWN, WM_KEYUP, WM_MOUSEMOVE, WM_TIMER), или сообщения системы управления окнами, поступающие непосредственно от Windows в обход очереди прикладной программы или цикла обработки сообщений (например, WM_CREATE, WM_DESTROY, WM_PAINT). Каждое получаемое окном сообщение идентифицируется номером, который содержится в параметре mesg оконной процедуры. В модуле MSFWINTY.F90 Fortran PowerStation 4.0 определены именованные константы, начинающиеся с префикса WМ для каждого типа сообщений.
Обычно используется конструкция select case для определения того, какое сообщение получила оконная процедура и как его обрабатывать. Если оконная процедура обрабатывает сообщение, то ее возвращаемым значением должен быть 0. Все сообщения, не обрабатываемые оконной процедурой, должны передаваться функции Windows, которая называется DefWindowProc. Значение, возвращаемое этой функцией, должно быть возвращаемым значением оконной процедуры.
Первое сообщение, которое получает оконная процедура - это WМ_СRЕАТЕ. Когда Windows обрабатывает функцию СreateWindowEx в WinMain, она вызывает MainWndProc с дескриптором окна в качестве первого параметра и с WМ_СRЕАТЕ в качестве второго. MainWndProc обрабатывает сообщение WМ_СRЕАТЕ и передает управление обратно в Windows, которая, в свою очередь, возвращается обратно в WinMain.
Следующим обрабатывается сообщение WM_SIZE. Определяются размеры рабочей области, панели инструментов и панели состояния. Windows посылает в оконную процедуру сообщение WM_SIZE при любом изменении размеров окна. Переменная lParam, переданная в оконную процедуру, содержит ширину рабочей области в младшем слове и высоту в старшем слове.
Сообщения WM_PARENTNOTIFY и WM_RBUTTONDOWN обрабатывают сообщения, поступающие соответственно от панели инструментов и всплывающего меню.
В программе необходимо обрабатывать символы клавиатуры, поэтому она должна обрабатывать сообщения WM_CHAR. Параметр lParam, передаваемый в оконную процедуру как часть символьного сообщения, является таким же, как параметр lParam аппаратного сообщения клавиатуры, из которого сгенерировано символьное сообщение. Параметр wParam - это код символа ASCII. Особым образом обрабатываются клавиши <Backspace>, <Tab> и <Enter>. Все остальные символы обрабатываются похожим образом.
Сообщение WM_KEYDOWN используется для определения нажатой клавиши или комбинации клавиш.
При щелчке мыши на разрешенном пункте меню генерируется сообщение WM_COMMAND (при выборе недоступного или запрещенного пункта меню данное сообщение не генерируется).
Сообщение WМ_РАINТ сообщает программе, что часть или вся рабочая область окна недействительна, и ее следует перерисовать.
При создании окна недействительна вся рабочая зона, поскольку программа еще ничего в окне не нарисовала. При изменении размера окна рабочая область также становится недействительной и содержимое рабочей области не сохраняется. В графической среде это привело бы к тому, что пришлось бы хранить слишком много данных. Вместо этого Windows делает недействительным все окно. Оконная процедура получает сообщение WМ_РАINТ и восстанавливает содержимое окна.
При перемещении окон так, что они перекрываются, Windows не сохраняет ту часть окна, которая закрывается другим окном. Когда эта часть окна позже открывается, Windows помечает его как недействительное. Оконная процедура получает сообщение WМ_РАINТ для восстановления содержимого окна.
Последним сообщением является сообщение WМ_DESTROY. Это сообщение показывает, что Windows находится в процессе ликвидации окна в ответ на полученную от пользователя команду. Программа стандартно реагирует на это сообщение, вызывая PostQuitMessage (0). Эта функция помещает сообщение WМ_QUIT в очередь сообщений программы. Когда функция GetMessage получает это сообщение, работа цикла обработки сообщений прерывается и программа заканчивает свою работу, выходя в систему.
3.3 Модальный и немодальный диалог
Окно диалога - это окно, которое прикладные программы используют для индицирования или запроса информации. Наиболее часто окна диалога используются для получения от пользователя дополнительной информации сверх той, которую может обеспечить меню.
Окно диалога обычно имеет вид всплывающего окна с разнообразными дочерними окнами элементов управления внутри. Размер и расположение этих дочерних окон задается в шаблона окна диалога в файле описания ресурсов программы. Windows 95 обеспечивает возможность создания всплывающих окон диалога и дочерних окон элементов управления в нем, а также возможность обработки оконной процедурой сообщений окна диалога. При использовании дочерних окон элементов управления, Windows берет на себя решение многих задач (например, управляет всей логикой переключения фокуса ввода между дочерними окнами элементов управления в окне диалога).
Оконная процедура окна диалога - это функция многократного вызова, которую вызывает Windows, когда она имеет сообщение для окна диалога. Как правило, внутри процедуры диалога не реализуется слишком много функций. Исключение составляют лишь инициализация дочерних окон элементов управления при создании окна диалога, обработка сообщений от дочерних окон элементов управления и завершение работы с окном диалога (т.е. обрабатываются сообщения WM_INITDIALOG, WM_COMMAND, WM_DESTROY). Оконная процедура окна диалога возвращает FALSE (0), если она не обрабатывает сообщение, или TRUE (ненулевое значение), если обрабатывает.
Рассмотрим отдельно модальные и немодальные окна диалога.
Модальное окно диалога.
Модальное окно диалога - это окно, которое индицирует информацию и запрос на ввод от пользователя. Оно называется модальным, поскольку делает родительское окно временно недоступным и заставляет пользователя закончить запрашиваемые действия перед возвратом управления родительскому окну, т.е. нельзя переключаться между окном диалога и другими окнами программы. Но, несмотря на наличие на экране окна диалога, пользователь может переключиться на другие программы. Некоторые окна диалога (называемые системными модальными окнами - system modal) этого делать не позволяют. Системное модальное окно диалога вынуждает пользователя, перед тем как он получит возможность сделать что-либо другое в Windows, завершить работу с ним.
Модальное окно диалога запускает свой собственный цикл обработки сообщений из очереди прикладной программы без возврата в функцию WinMain.
Для создания модального окна диалога программа вызывает функцию DialogBox (могут также использоваться функции DialogBoxIndirect, DialogBoxParam, DialogBoxIndirectParam):
nResult = DialogBox (hInstance, lpTemplate, hWndParent, lpDialogFunc).
nResult - переменная, принимающая значение -1 при неуспешном завершении функции, в обратном случае возвращаемое значение - параметр nResult функции EndDialog, которая завершает работу модального окна диалога;
hInstance - дескриптор экземпляра;
lpTemplate - этот параметр идентифицирует шаблон окна диалога;
hWndParent - дескриптор родительского окна модального окна диалога;
lpDialogFunc - адрес процедуры диалога.
Работа модального окна диалога завершается с помощью функции EndDialog:
bret = EndDialog (hDlg, nResult).
nResult - определяет значение, которое будет возвращено приложению от функции DialogBox, создавшей диалоговое окно;
hDlg - дескриптор диалогового окна.
Логическая переменная bret принимает значение TRUE или FALSE соответственно при успешном или неуспешном завершении.
Windows не возвращает управление родительскому окну до тех пор, пока не вызвана функция EndDialog.
Немодальное окно диалога.
В отличие от модального окна диалога, немодальное окно диалога не делает недоступным родительское окно, позволяя тем самым пользователю переключаться между окном диалога и окном, в котором оно было создано, а также между окном диалога и остальными программами.
Немодальное окно диалога получает информацию через цикл обработки сообщений функции WinMain (см. п. 3.1).
Для создания немодального окна используется функция CreateDialog (могут также использоваться функции CreateDialogIndirect, CreateDialogParam, CreateDialogIndirectParam):
hDlgModeLess = CreateDialog (hInstance, lpTemplate, &
hWndParent, lpDialogFunc).
Параметры этой функции те же, что и параметры функции DialogBox. Отличие состоит в том, что дескриптор окна диалога возвращается сразу же после выполнения функции CreateDialog и, как правило, хранится в глобальной переменной.
Для закрытия немодального окна диалога используется функция DestroyWindow:
bret = DestroyWindow (hDlg).
hDlg - дескриптор диалогового окна (локальная переменная, используемая в оконной процедуре окна диалога).
Функция возвращает значение bret, равное TRUE или FALSE соответственно при успешном или неуспешном завершении. После вызова функции DestroyWindow глобальная переменная, содержащая дескриптор немодального окна диалога, должна быть установлена в ноль.
К немодальным окнам диалога относятся окна панели состояния и панели инструментов, используемые в КП Компоновщик. Эти два окна всегда находятся на экране.
3.4 Панель инструментов
Панель инструментов предназначена для реализации дополнительных функций, предоставляемых программой.
Панель инструментов представляет собой немодальное окно диалога, содержащее набор битовых картинок и стандартные (зарегистрированные) дочерние окна управления. Выводится панель инструментов в верхнюю часть главного (родительского) окна, размер и местоположение панели устанавливаются с помощью функции SetWindowPos.
Вид панели инструментов представлен на рис. 3.2.
Рис. 3.2. Вид панели инструментов
В рассматриваемой программе на панель инструментов вынесены следующие наиболее часто употребимые функции:
вставить копию текущей строки;
вставить новую строку после текущей;
удалить текущую строку;
восстановить ранее удаленные строки;
ввести шаблон поиска (эта функция реализована с помощью стандартного дочернего окна управления класса «окно редактирования»);
поиск по шаблону вниз;
поиск по шаблону вверх;
сортировать в порядке возрастания;
сортировать в порядке убывания;
буфер обмена;
калькулятор;
печать;
выбор титров;
локальная помощь;
помощь.
Кроме того, на панели инструментов имеются радиокнопки, предназначенные для реализации дополнительных функций подготовки и обработки данных: трансляции, протокола, редактирования названий узлов и др.
Каждый раз при открытии дочернего окна панель инструментов активизирует доступные ему функции.
Входные параметры панели инструментов.
В рассматриваемой программе панель инструментов создается путем вызова функции CreateDialog:
hPnUpr = CreateDialog (hInstance, LOC («PnUpr» C), hWnd, LOC(PnUpr)).
Параметры этой функции содержат следующую информацию:
hInstance - дескриптор экземпляра программы;
LOC(`'PnUpr''C) - идентифицирует шаблон блока диалога. Этот параметр является адресом символьной строки, в которой содержится имя шаблона диалогового окна;
hWnd - дескриптор родительского окна. Для панели инструментов родительским является главное окно программы;
LOC(PnUpr) - адрес процедуры диалога.
Функция возвращает дескриптор панели инструментов, который хранится в глобальной переменной hPnUpr.
Процедура диалогового окна панели инструментов определяется следующим образом:
integer function PnUpr (hDlg, message, wParam, lParam)
Параметры процедуры диалога аналогичны параметрам оконной процедуры главного окна: hDlg - дескриптор окна диалога; message - переменная, идентифицирующая сообщение; параметры wParam и lParam содержат дополнительную информацию о сообщении.
Процедура диалогового окна панели инструментов обрабатывает только два типа сообщений:
а) WM_INITDIALOG; это сообщение посылается процедуре диалога при создании диалогового окна прежде, чем оно отображается на дисплее. При получении этого сообщения процедура диалога вычисляет высоту панели инструментов, используя для этого функцию GetWindowRect:
bret = GetWindowRect (hDlg, rect).
Функция заполняет поля структуры rect типа T_RECT информацией о размерах рабочей области диалогового окна панели инструментов. Затем вычисляется высота диалогового окна:
YDlg = rect % bottom - rect % top.
Вычисленное значение хранится в глобальной переменной YDlg.
б) дочерние окна управления панели инструментов посылают процедуре диалогового окна сообщения WM_COMMAND. Параметры этого сообщения содержат идентификатор дочернего окна (младшее слово параметра wParam), код уведомления (старшее слово wParam) и дескриптор дочернего окна управления, пославшего сообщение (lParam). В рассматриваемой программе дочерними окнами управления панели инструментов являются окно ввода шаблона поиска и радиокнопки. Процедура диалога при получении сообщения WM_COMMAND определяет по младшему слову параметра wParam идентификатор дочернего окна, от которого пришло сообщение, и выполняет соответствующие действия.
Выходные параметры панели инструментов.
Выходными параметрами панели инструментов являются сообщения активному на данный момент дочернему окну или панели состояния.
Сообщение активному дочернему окну посылается в случае, если левой кнопкой мыши выбран какой-либо орган управления на панели инструментов. Щелчок правой кнопкой мыши на любом органе управления (исключая окно ввода шаблона поиска) заставляет программу вывести в панель состояния текст, поясняющий предназначение выбранного органа управления.
Алгоритм, реализующий вышесказанное, выглядит следующим образом.
1. Нажата кнопка мыши?
Если нажата правая кнопка:
а) определить выбранный на панели инструментов орган управления;
б) вывести соответствующее выбранному органу управления текстовое пояснение в предназначенное для этого поле панели состояния.
Если дочернее окно активно и нажата левая кнопка:
а) определить выбранный на панели инструментов орган управления;
б) отправить активному дочернему окну сообщение, содержащее идентификатор выбранного органа управления.
2. Продолжить выполнение программы.
Приведенный алгоритм требует некоторых пояснений.
Каждый раз при щелчке правой или левой кнопкой мыши над рабочей областью панели инструментов оконной процедуре главного окна посылается сообщение WM_PARENTNOTIFY, содержащее в своих параметрах следующую информацию:
идентификатор панели инструментов;
какая именно кнопка мыши нажата;
координаты курсора в момент нажатия.
Оконная процедура при обработке этого сообщения вызывает последовательно две подпрограммы - HelpPnUpr и (при условии, что дочернее окно активно) GetIdPnUpr, в которых и реализуется первый шаг алгоритма.
Когда дочернему окну посылается сообщение на поиск по шаблону, оно, в свою очередь, посылает сообщение IDOK панели инструментов для насильственного чтения шаблона.
По окончании работы подпрограмм возобновляется выполнение цикла обработки сообщений.
В рассматриваемой программе процедура диалога панели инструментов и указанные подпрограммы объединены в одном модуле, что позволяет рассматривать панель инструментов как «черный ящик» (объект). «Черный ящик» получает некоторые сообщения и определенным образом на них реагирует (рис. 3.3).
Рис. 3.3. Панель инструментов
Панель инструментов отображается на поверхности главного окна все время и уничтожается только по завершении работы.
3.5 Панель состояния (строка состояния)
Панель состояния предназначена для вывода на экран необходимой пользователю информации.
Панель состояния представляет собой немодальное окно диалога, которое выводится в нижнюю часть главного (родительского) окна. Размер и местоположение панели устанавливаются с помощью функции SetWindowPos.
Вид панели состояния показан на рис. 3.4.
Рис. 3.4. Вид панели состояния.
В рассматриваемой программе панель состояния используется для отображения краткого описания органов управления панели инструментов при их просмотре пользователем, а при наличии активного дочернего окна - и для отображения количества записей и номера записи, с которой пользователь работает в текущий момент времени. Поля панели состояния, в которых отображается вышеуказанная информация, представляют собой статические дочерние окна управления (предопределенного класса «статическое окно»). Панель состояния содержит также один орган управления общего пользования - т.н. прогресс-индикатор, отображающий динамику длительной операции как процент от выполненной задачи.
Входные параметры панели состояния.
В рассматриваемой программе панель состояния создается функцией CreateDialog:
hPnSost = CreateDialog (hInstance, LOC («PnSost» C), hWnd, LOC(Pnsost)).
Параметры этой функции являются входными параметрами для панели состояния. Первый и третий из них аналогичны соответствующим входным параметрам панели инструментов. Параметр LOC («PnSost» C) идентифицирует шаблон диалогового окна панели состояния. Параметр LOC(Pnsost) содержит адрес процедуры диалога панели состояния.
Функция возвращает дескриптор панели состояния, который хранится в глобальной переменной hPnSost.
Процедура диалогового окна панели состояния определяется следующим образом:
integer function Pnsost (hDlg, message, wParam, lParam).
Ее параметры аналогичны параметрам процедуры диалога панели инструментов.
В рассматриваемой программе процедура диалогового окна панели состояния получает и обрабатывает только сообщение WM_INITDIALOG. При получении этого сообщения процедура диалога вычисляет высоту панели состояния аналогично тому, как это реализовано в процедуре диалога панели инструментов. Вычисленное значение хранится в глобальной переменной YPnSost.
Отображение информации.
Для вывода информации в дочернее окно управления панели состояния используется функция
SetDlgItemText (hwndDlg, idControl, lpsz).
Параметры этой функции следующие:
hwndDlg - дескриптор диалогового окна (в нашем случае это глобальная переменная hPnSost);
idControl - идентификатор дочернего окна управления;
lpsz - указатель на Си-строку, содержащую текст, который нужно вывести в данное дочернее окно управления.
Для управления прогресс-индикатором ему посылаются сообщения при помощи функции
SendDlgItemMessage (hwndDlg, idControl, Msg, wParam, lParam).
Параметр Msg здесь - переменная, содержащая посылаемое сообщение, а параметры wParam и lParam содержат дополнительную информацию о сообщении.
Панель состояния отображается на поверхности главного окна все время работы программы и уничтожается только по завершении работы.
3.6 Строковый редактор
Строковый редактор предназначен для отображения и редактирования текстовых данных.
Строковый редактор является дочерним окном оконного редактора и выводится на его рабочую поверхность. Размер и местоположение строкового редактора устанавливаются с помощью функции SetWindowPos в оконном редакторе. Высота окна строкового редактора определяется высотой используемого шрифта, ширина - длиной редактируемого текста.
Работа со строковым редактором.
Оконный редактор содержит текстовые данные в виде страницы, состоящей из нескольких строк. Каждая строка разбивается на поля. Каждое поле - это определенное число (параметр). Содержимое текущего поля, т.е. поля, доступного для редактирования, помещается в окно строкового редактора (далее - «окно»), которое отмечено двойным бордюром.
Каретка перемещается внутри «окна». Если каретка достигает границы «окна» (левой или правой), то дальнейшее движение в том же направлении приводит к перемещению «окна». Если же «окно» находится на левой или правой границе страницы, то его дальнейшее перемещение в том же направлении приводит к «листанию» страницы вправо / влево.
Перемещения «окна» по странице (страницам) возможны следующие: вверх / вниз на одну строку; влево / вправо на одно поле; в начало / конец строки; на ту же позицию предыдущей / последующей страницы («листание» вверх / вниз); на ту же позицию первой / последней страницы.
Ввод текстовых данных и все коррекции производятся внутри «окна». Если каретка находится на правой границе «окна», то после ввода «окно» перемещается вправо на одно поле (если это возможно).
Внутри «окна» символы можно удалять по одному или группами (слева / справа от позиции каретки, удалить все содержимое «окна»).
Создание окна строкового редактора.
Создание окна строкового редактора происходит при обработке сообщения WM_CREATE в оконной процедуре оконного редактора. Для этого используется рассмотренная ранее функция CreateWindowEx. Она возвращает дескриптор окна строкового редактора, который хранится в глобальной переменной hWEdit. Следует отметить, что при регистрации класса окна строкового редактора стиль окна задается как комбинация следующих стилей:
CS_VREDRAW, CS_HREDRAW - разрешают перерисовку рабочей области окна в случае изменения его высоты или ширины;
CS_OWNDC - создает уникальный контекст устройства для каждого окна, созданного на основе данного класса;
CS_DBLCLKS - разрешает посылку оконной процедуре сообщения о двойном щелчке мышью над рабочей областью окна.
При создании окна строкового редактора используется «расширенный» стиль WS_EX_DLGMODALFRAME, создающий двойную рамку вокруг окна.
Оконная процедура строкового редактора определяется следующим образом:
integer function Editw (hEdit, mesg, wParam, lParam)
Подобные документы
Языки программирования низкого и высокого уровней и среды реализации. Особенности процедурных, логических, объектно-ориентированных языков. Состав системы программирования: трансляторы, библиотеки и отладчик программ, компоновщик, средства редактирования.
презентация [11,9 K], добавлен 23.10.2013История развития Windows: покупка лицензии на ОВОS, выпуск версии МS-DOS 1.0, графической оболочки Microsoft Windows 1.0 и поддержка расширенной памяти. Графический пользовательский интерфейс (GUI) и комбинация DOS-Windows. Windows NT и поздние версии.
реферат [25,1 K], добавлен 13.01.2010Достоинства и недостатки операционной системы Windows XP: требования к аппаратным средствам, пользовательский интерфейс, рабочий стол, настройка цветов, шрифтов и визуальных эффектов, панели задач и быстродействия. Устойчивость и защита системы.
курсовая работа [2,6 M], добавлен 23.06.2009Составление модели взаимодействия клиент-сервер. Логические уровни типического приложения: пользовательский интерфейс, логика приложения и доступ к данным, работающий с базой данных. Требования к распределительным системам и понятие промежуточной среды.
реферат [183,1 K], добавлен 15.11.2011Основные расчеты электрических сетей. Отличия создаваемой программной системы. Обоснование выбора базовой платформы и языка программирования. Реализация программной системы. Принципы защиты информации. Передача мощных потоков энергии с минимумом потерь.
дипломная работа [882,3 K], добавлен 18.01.2014Программирование для Windows. Возможности нового интерфейса. Окна и их управляющие компоненты. DOS и Windows: разные подходы к программированию. Особенности работы с базами данных. Структура программ в CA-Visual Objects. Генерация и обработка событий.
курсовая работа [1,3 M], добавлен 02.03.2010Элементы интерфейса Windows NT. Средства взаимодействия пользователей с системой. Выполнение настройки компьютера. Ярлыки на рабочем столе. Типа окон: приложений, документов и диалоговые окна. Интерфейс администратора сети. Понятие web-браузера.
презентация [8,8 K], добавлен 23.10.2013Пользовательские представления данных. Проектирование реляционной реализации. База данных на СУБД Microsoft Office Access. Проектирование пользовательского интерфейса. Реляционная реализация концептуальных схем в БД "Автомобильные соревнования".
курсовая работа [3,3 M], добавлен 13.04.2013Интерфейс API, реализация функций API на уровне ОС, системы программирования и с помощью внешних библиотек. Характеристики сетевого интерфейса прикладного программирования Winsock, особенности его применения в операционных системах UNIX и Windows.
контрольная работа [74,2 K], добавлен 04.06.2015Понятие и назначение геоинформационных систем. Проблемы и требования к организации их системы, ее принципы, структура и основные функции. Методика формирования баз данных первичной геоинформации. Пути взаимодействия баз геолого-геофизических данных.
реферат [385,5 K], добавлен 02.09.2009