Насколько известно, на текущий момент самой популярной настольной операционной системой является Windows. Это целое семейство систем с философией взаимодействия с пользователем на основе курсора "мыши" и любой выделенной прямоугольной областью, изображенной на экране монитора. Компания Microsoft с таким подходом была не первой, однако ее отдел маркетинга доказал, что не зря ел свой хлеб и вывел Окна в топ продаж.
Первое знакомство
В каждом ВУЗе есть такие дисциплины, изучение которых навевает грусть по причине кажущейся бесперспективности практических заданий. На специальностях прямо или косвенно связанных с программированием эта грусть зачастую вырастает до огромных размеров. С начала 90-х годов информационные технологии начали развиваться небывалыми темпами. Если бы такие темпы были заданы в автоиндустрии, мы бы уже вызывали такси к своему балкону.
Именно с такими мыслями вспоминается первое знакомство с, так называемым, прикладным интерфейсом приложений Windows. Не подумайте только, что это было в прошлом семестре, дело происходило в 2000-2001 году, однако и в то время сосредоточенный разбор внутренностей 16-разрядного (!!!) интерфейса (Win16 API), предназначенного для операционных систем Windows версии до 3.11 был занятием малоуместным. Эта реальность благополучно ушла в тень под напором 32-разрядного интерфейса Windows 95 еще в середине 90-х.
Конечно же, наблюдать как абсолютно беззащитное окно Windows-приложения обрастает функционалом было приятно, но не когда при этом в среде быстрой разработки приложений Delphi все обрастает функционалом в 10 раз быстрее и навыки этого дошли до автоматизма. Не даром RAD, расшифровывается как Rapid Application Development. На древний философский вопрос "Зачем?" ответ так и не пришел.
Кому понадобился Франкенштейн в 2020?
Непростой выдался год, вынужденная изоляция многих побудила заняться вещами порой лишенными смысла. Так видимо и произошло с людьми, решившими скомпилировать недавно открытый исходный код текстового редактора с мировым именем Microsoft Word версии 1989 года.
Было что-то неуловимо-прекрасное в этой идее, скорее всего это затронуло ностальгические струны, иначе невозможно объяснить. Небольшая подробность - Microsoft Word образца 1989 года использовал Win16 API. Большинство компьютеров в то время, способных запустить это приложение, были 16-разрядными, работали с числами при помощи 16-разрядных регистров, производили операции при помощи 16-битного АЛУ.
Разве это не идеально?
Под напором негатива интернет-прессы ("Microsoft проиграла битву API") всякая потребность общения с этим слоем функций была надолго уничтожена, однако, вышеуказанный эксперимент с компиляцией и поиски сколько-нибудь хорошего решения для операционной системы постапокалипсиса просто не оставили сомнений.
Win16 - идеальный прикладной интерфейс приложений!
Прежде всего - пользовательский компьютер обязан обладать графическим интерфейсом и это доказано временем. Показать пальцем где у человека пятно на одежде гораздо естественнее, чем объяснять ему, что "пятно находится левее на 11 см от 3-ей пуговицы снизу". Манипулятор ввода графической информации "мышь" для этой задачи подходит как нельзя лучше.
В недавней публикации мы пришли к выводу, что для минималистичных компьютеров другого выбора, кроме как микроядро и обмен сообщениями между приложениями, быть не может. А что такое Win16 API? Это и есть работа, основанная на обмене сообщениями, кроме того это продуманная схема работы устройств ввода информации (клавиатура, мышь) с прямоугольными участками на экране (окно).
Любое приложение создает структуру данных с необходимыми параметрами и регистрирует в операционной системе свое окно:
hwnd = CreateWindow(...);
В оговоренной выше структуре данных указывается название функции обработчика сообщений. Далее запускается бесконечный цикл опроса очереди сообщений:
while(GetMessage(&msg,...)){ //....}
При наличии сообщения в очереди происходит вызов функции обработчика:
CALLBACK WindowFunc(HWND hw, UINT msg, WPARAM wp, LPARAM lp){
switch(msg){
case WM_LBUTTONDOWN:
//обработка нажатия левой кнопки мыши
Первое, что нужно отметить в этой прекрасной философии -
не только главное окно это окно, но и любой элемент пользовательского интерфейса на нем это тоже окно, обладающее своим дескриптором (описателем).
Кнопка это окно, регистрируемое в системе, обладающее своими границами на экране. При нахождении курсора мыши в пределах границ кнопки нажатие левой кнопки мыши вызовет отправку сообщения WM_LBUTTONDOWN (просто число в переменной msg), но при этом, параметром wp указывается какая именно кнопка была нажата. Параметр lp имеет множество бит, состояние которых показывает подробности (нажатие или отжатие кнопки и прочие). Все вышеперечисленное относится ко всем элементам интерфейса (списки, скроллеры, чекбоксы и т.п.).
Возможно, корпорация Microsoft, действительно, проиграла битву API, создав невероятно сложно запоминаемую систему функций с большим числом параметров. Все кто приходил на это поле после Microsoft - не сталкивался с необходимостью поддержки 16-разрядного железа и необходимости вызова этих функций даже при помощи ассемблера. Конкуренты деловито построили объектно-ориентированный интерфейс в виде классов с полями и методами, облагородили это дело использованием объектно-ориентированных языков и RAD приложений. Однако, базируются все эти великолепные интерфейсы на вызове тех же API функций.
Для минималистичного процессора с микроядерной операционной системой другой интерфейс прикладных приложений представить сложно, конечно, если вы хотите скучный черный экран с командной строкой в качестве единственного интерфейса взаимодействия с пользователем. Только посмотрите на что способны винтажные 8-битные компьютеры:
От удобства графического интерфейса пользователя лучше не отказываться.
Поддержите статью лайком если понравилось и подпишитесь чтобы ничего не пропускать.
Также не обойдите вниманием канал на YouTube. Подписки и лайки будут приятным ответом от аудитории.