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

XI Международная студенческая научная конференция Студенческий научный форум - 2019

Реализация пользовательского интерфейса с помощью машинно-зависимых языков

Котов В.В. 1, Абрамова О.Ф. 1
1Волжский Политехнический институт (филиал) ВолгГТУ
 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF

Введение

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

События

Чтобы начать разрабатывать приложение на ассемблере необходимо понимать, что придется иметь дело с событиями. Это значит, что ядро системы следит за аппаратной/программной активностью, и в ответ генерирует специальные сообщения, которые затем передает приложениям, которые ожидают наступление этих событий. В качестве примера событий можно привести любое действие со стороны пользователя: перемещение окна, нажатие клавиш клавиатуры или мыши и др. Поэтому, когда происходит какое-либо событие, система сама "предоставляет" для пользовательского приложения входные данные, и делает она это посредством передачи сообщений. А прикладная программа, в свою очередь, состоит из обработчиков входящих сообщений, которые требуемым образом реагируют на них.

Сообщения

В Windows насчитывается более 900 сообщений, связанных с большим количеством событий. Все сообщения представляют собой константы и содержатся в файле библиотеке макросов, называемой Win32.inc. С её помощью можно управлять оконными сообщениями(WM_XXX), сообщениями элементов окна редактирования(EM_XXX). Также можно изменять стили окон и управлять элементами управления Button(BM_XXX).

Сообщение имеет код и два параметра (WPARAM и LPARAM). LPARAM — дескриптор элемента, старшее слово WPARAM — событие, младшее слово WPARAM — обычно идентификатор ресурса Параметры сообщения могут не иметь никакого смысла либо играть уточняющую роль. Например, сообщение WM_COMMAND генерируется системой, когда что-то происходит с элементами управления окна. В этом случае с помощью параметров можно определить, что это за элемент и что с ним произойдет.

Если же нам необходимо добавить отображение на экране элементов управления или отобразить курсор, иконки, меню, то потребуется использовать ресурсы приложения. Ресурсы приложения – массив данных, которые программист может добавить в исполняемый модуль. Ресурсы могут быть описаны как автоматически, так и вручную, используя обычный текстовый редактор. Идентификаторы стандартных ресурсов имеют префикс ID_XXX. В основные стандартные ресурсы входят: шаблоны панели инструментов, с помощью которых возможно отображение на экране элементов управления, курсоры-битовые массивы для отображения мыши, шаблоны диалогов-включают в себя инструменты для работы с размером окна, стилем, расположением и т.д, пиктограммы-битовые массивы для отображения иконок.

Окно

Окно - прямоугольная область экрана для организации обмена информации между пользователем и приложением. Одновременно может быть доступно только одно окно. Каждое окно имеет свой стиль, который характеризует тип и вид окна. Стиль задается константой с префиксом WS_XXX. Также окно может быть как основным, так и вспомогательным, которое, в свою очередь, может быть вторичным или диалоговым. При этом у приложения может быть только одно основное окно. Диалоговые окна делятся на модальные и немодальные. Модальные диалоговые окна для продолжения работы, ожидают от пользователя нажатие клавиши или ввода данных. Немодальные диалоговые окна могут использоваться для отображения кого-то процесса на экране. Таких окон может быть несколько, а диалог может быть прерван в любое время. Также окно может быть модальным и немодальным одновременно, поскольку может не требоваться ответа от пользователя для продолжения работы приложения.

Реализация интерфейса

Реализовать самый базовый интерфейс можно достаточно просто с помощью добавления кнопки. Сама кнопка создается в момент прихода в оконную процедуру сообщения WM_CREATE. Сама же кнопка создается API-функцией CreateWindowEx. Эта функция возвращает дескриптор, который может использоваться для дальнейшей работы с окном.

Для примера можно привести пример реализации кнопки “выход” с помощью еще одного окна. Для начала необходимо проверить WM_COMMADN, а затем проверяем LPARAM — как говорилось выше, он хранит дескриптор, т.е уникальный номер окна. В данном случае для кнопки этого уже достаточно, чтобы определить событие.

Усложним задачу, добавив, помимо кнопки “выход”, окно-список, который будет состоять из названия жанров книг. При нажатии двойного щелчка по названию жанра, появляется окно-сообщение с названием этого жанра. Для начала разберемся с двойным щелчком. Он осуществляется следующим образом: во-первых, происходит отслеживание события, происходящего со списком, а потом с помощью параметра WPARAM определяется произошедшее событие. Параметр LPARAM содержит в младшем слове код события, в данном примере это LBN_DBLCLK. Следующим шагом следует определить от какого элемента списка пришло сообщение. Алгоритм выглядит следующим образом: во-первых, необходимо получить индекс текущего элемента с помощью сообщения LB_GETCURSEL, при этом индекс возвращается в регистре EAX и во-вторых, получить непосредственное значение элемента списка можно при помощи сообщения LB_GETTEXT.

Вывод

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

Библиографический список

Голубь Н.Г. Искусство программирования на Ассемблере /Н.Г. Голубь. — 2-е изд. — СПб: ООО"ДиаСофтЮП", 2002. — 656с

Kip R.I. Assembly Language for x86 Processors /R.I. Kip. — 7-еизд. — New Jersey: Pearson Education, Inc, 2014. — 680с

Пирогов, В.Ю. Ассемблер для Windows /В.Ю. Пирогов. — 4-е изд. — СПб: БХВ-Петербург, 2007. — 896с

The art of assembly language /Hyde. R. — 2-еизд. — San Francisco: No Starch Press, Inc, 2010. — 732с

Крупник А.Б. Изучаем Ассемблер /А.Б. Крупник. — СПб: Питер, 2005. — 249с

Грек А.А. Исследование программного обеспечения для визуализации ведения технологических расчётов [Электронный ресурс] / А.А. Грек, О.Ф. Абрамова // Международный студенческий научный вестник : электронный журнал. - 2018. - № 3, ч. 8. - C. 1225-1227. – Режим доступа : https://www.eduherald.ru/

Абрамова О.Ф. Анализ методов организации и проведения внеучебных конкурсных мероприятий в дистанционном формате / О.Ф. Абрамова, А.Ю. Александрина // Открытое и дистанционное образование. - 2017. - № 2 (66). - C. 14-25

Завадин В.А. Проектирование веб-системы электронного документооборота с интеграцией облачного хранилища [Электронный ресурс] / В.А. Завадин, О.Ф. Абрамова, Д.Н. Лясин // Форум молодых учёных : электрон. науч. журнал. - 2017. - № 5 (9). – 18 с. – Режим доступа : http://forum-nauka.ru/domains_data/files/9/Zavadin.pdf

Просмотров работы: 7