Пятница, 29.11.2024
Мой сайт
Меню сайта
Статистика

Онлайн всего: 33
Гостей: 33
Пользователей: 0
Главная » 2016 » Сентябрь » 30 » Языки программирования – 8
22:38
Языки программирования – 8

Языки программирования – 8

WinAPI как базовая реальная технология Windows уже показан тут:
http://akostina76.ucoz.ru/blog/2016-09-16-3441

Дополню это примером с кнопкой отсюда:
http://dims.karelia.ru/win32/

/* процедура обработки сообщений для главного окна */
LRESULT CALLBACK MainWinProc(HWND hw,UINT msg,WPARAM wp,LPARAM lp) {
 switch (msg) {
  case WM_CREATE:
   /* при создании окна внедряем в него кнопочку */
   CreateWindow("button","My button",WS_CHILD|BS_PUSHBUTTON|WS_VISIBLE,
    5,5,100,20,hw,(HMENU)ID_MYBUTTON,NULL,NULL);

   /* стиль WS_CHILD означает, что это дочернее окно и для него
    вместо дескриптора меню будет передан целочисленный идентификатор,
    который будет использоваться дочерним окном для оповещения
    родительского окна через WM_COMMAND */
   return 0;
  case WM_COMMAND:
   /* нажата наша кнопочка? */
   if ((HIWORD(wp)==0) && (LOWORD(wp)==ID_MYBUTTON))
    MessageBox(hw,"You pressed my button","MessageBox",MB_OK|MB_ICONWARNING);

   return 0;
  case WM_DESTROY:
   /* пользователь закрыл окно, программа может завершаться */
   PostQuitMessage(0);
   return 0;
 }
 return DefWindowProc(hw,msg,wp,lp);
}
Результат (кнопка на окне и реакция на нажатие):

При создании окна (WM_CREATE) на нем на расстоянии 5 пикселей вниз и 5 пикселей вправо (top, left) нарисована кнопка шириной 100 пикселей и высотой 20 пикселей. Событие – её нажатие ловится в ветке WM_COMMAND и как-то обрабатывается (в данном случае выводится сообщение).
Всё, что требуется сделать компилятору – взять этот текст и перевести его, строка за строкой в сходный по структуре и действиям ассемблерный текст.
Компилятору удобно, а человеку не очень. WinAPI это такой ассемблер под Windows. На нём можно сделать что угодно, он максимально приближен в аппаратно- железной, т.е операционно-системной части. Но писать на нем технически сложно.
В DOS-е, т.е в текстовом режиме, в котором 80 символов в строке и 25 строк это делалось так, рисовался примерно такой экран:

… по которому понятно, что и где должно быть расположено. Потом это переносилось в текст программы. На Clipper 5 это было так:
http://softclipper.net/rukovodstvo-po-clipper-5.0/komandy-chast-1.html
Очистка всего экрана синим цветом
SETCOLOR("blue/blue")
@ 0, 0 CLEAR TO 24, 79
Рисовать заголовок жёлтыми буквами на синем фоне:

SETCOLOR("yellow /blue")

@ 0, 33 SAY “СПРАВОЧНИК ПРОДУКЦИИ”
и т.д.
В HTML странице Интернета всё, что передаётся рисуется на странице последовательно. Иногда передаётся тэг «br», означающий перевод строки. Так и появляется на экране вся страница к которой довольно сложно прицепить фиксирование какого-то элемента в какой-то точке на экране компьютера.
А вот в случае окна Windows требуется привязка к конкретной точке на окне. Точка эта в пикселях, т.е в очень мелких единицах. При этом желательно чтобы нарисованное не смешивалось в кучу и вообще прилично выглядело. А это при такой технологии технически сложно. Увидеть, как это выглядит на экране можно только скомпилировав и запустив. И это при том, что это и сейчас может стать не быстрым процессом если программа большая и компилятору надо долго пережёвывать то, что написано. Медленно и неудобно.
Чтобы это всё упростить появились так называемые визуальные (Visual) среды. Отсюда и названия языков Visual C++, Visual Basic подчеркивающие, что компилятор будет работать не с простым программным текстом в виде например CPP (С++)  файла а с группой файлов. На выходе будет тот же ассемблерный текст, но писать программисту будет проще.
Все визуальные среды позволяют расставить кнопки и прочие элементы на форме с помощью мыши. В MS Access, например, это так:

На экране форма. Слева панель с элементами, которые на ней можно поставить. Их всех можно перетаскивать в нужные места формы.
При выполнении это будет выглядеть так:

Я не очень упрощу если скажу, что это вообще всё что бывает. Потому что этого вполне достаточно.
1] На окне должны быть какие-то надписи. Это элемент LABEL (надпись)
2] У пользователя должна быть возможность ввести какие-то буквы. Для этого есть элемент TEXTBOX
3] Иногда надо выбрать какой-то вариант действия при том, что вариантов не очень много. В этом случае удобно их всех размесить на экране и дать посвить точку в нужном кружочке (элемент RADIOBUTTON)
4] Что-то может выбираться флажком (CHECKBOX)
5] Два списка (выпадающий и раскрытый) – COMBOBOX и LISTBOX. Их обычно используют когда надо выбрать что-то из фиксированного справочника (организацию, товар, единицу измерения и т.д)
6] Кнопка это то, что выполняет какое-то действие (BUTTON)
Большими буквами тут базовые названия элементов Windows. Вот например про класс RadioBotton:
https://msdn.microsoft.com/ru-ru/library/system.windows.forms.radiobutton(v=vs.110).aspx
… хотя русифицированный Access называет CheckBox «флажком».
Форма может состоять только из кнопок, которые можно нажать (главное меню программы, с возможностью выбрать, что делать):

А может содержать множество различных элементов (ввод и корректировка накладной на отгрузку продукции):

Здесь везде окна (Windows) называются формами (Form). Если говорить о написании конкретной программы, то можно считать это синонимами при том, что слово «форма» используется чаще. Подозреваю, что «окна» стали «формами» при переходе к визуальным средам, терминология идентифицирует технологию.
У того, что расставлено мышью на экране есть свои свойства:

… обычно их можно посмотреть по правой кнопке мыши на этом элементе. Кнопка, например, находится от верхнего угла на расстоянии 0.6 см вправо и 5.8  см вниз. Внутри, компьютер, хранит конечно не картинку, а именно эти цифры и прочие свойства которые и определяют как выводить форму и в режиме просмотра и разработке и в момент выполнения.
В Access-е нет компилятора, там работает интерпретатор и все тексты хранятся внутри в неизвестном месте и виде. Обычная же визуальная среда содержит текстовое описанное результатов работы мышью в примерно таком виде:
object FrmCheckType: TFrmCheckType
  Left = 279
  Top = 105
  Width = 838
  Height = 587
  Caption = 'Типы проверок'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  OnClose = FormClose
  PixelsPerInch = 96
  TextHeight = 13
  object GroupBox1: TGroupBox
    Left = 0
    Top = 0
    Width = 830
    Height = 137
    Align = alTop
    Caption = 'Параметры'
    TabOrder = 0
    object gbPeriod: TGroupBox
      Left = 8
      Top = 40
      Width = 369
      Height = 81
      Caption = 'Период'
      TabOrder = 0
    end
    object pnlCond: TPanel
      Left = 379
      Top = 45
      Width = 206
      Height = 44
      BevelInner = bvRaised
      BevelOuter = bvLowered
      TabOrder = 1
      object stCond: TStaticText
        Left = 2
        Top = 2
        Width = 202
        Height = 17
        Align = alTop
        Alignment = taCenter
        BorderStyle = sbsSunken
        Caption = 'Условные единицы'
        TabOrder = 0
      end
    end
… и т.д.
Здесь перечислено всё, что есть на форме и все свойства элементов. Конкретно это – кусок из файла с расширением DFM языка Borland C++. Тут нет слова «Visual» но эта версия визуальна в отличие от своего предшественника – Турбо Си.
Но содержимого этого файла конечно мало. Обработав его компилятор сможет создать только то, что в WinAPI создавалось в момент создания окна (WM_CREATE), т.е элементы на окне. Ещё неплохо бы как-то обрабатывать действия пользователя (нажатие кнопок, выборы из списков и т.д). Т. е откуда-то надо брать то, что раньше было в WM_COMMAND. Но раз уж работа компилятора принципиально усложнилась, то почему бы не заставить его собирать эту информацию о действиях из разных мест, а не из одного обработчика всех действий?
В визуальных средах, каждый элемент – объект на экране имеет свою коллекцию обработчиков. В Access-е это так:
Option Compare Database

Private Sub Кнопка18_Click()
  MsgBox ("OK!")
End Sub

Private Sub Поле1_BeforeUpdate(Cancel As Integer)
  MsgBox ("Текст изменён")
End Sub

Private Sub Поле1_LostFocus()
  MsgBox ("Переход к следующему элементу")
End Sub
Название обработчика обычно состоит из имени элемента и имени события (обработчики в скриптах страниц Интернета называются точно также). В примере выше при нажатии кнопки выводится сообщение «ОК!», при изменении текста, т.е при его завершении при нажатии Enter выводится сообщение «Текст изменён», а если находясь на поле ввода текста нажать кнопку TAB и перейти к следующему элементу то поле текста престанет быть активным (потеряет фокус) и это событие будет обработано сообщением «Переход к следующему элементу».
Такая технология, в которой объединяется расстановка элементов на экране с помощью мыши и написание обработчиков действий на каком-то языке стала стандартом работы в Windows в смысле работы компьютера с данными на этом компьютере. Это важное дополнение, потому, что есть ещё, например, Интернет, т.е работа с данными на находящимися где-то в сети Интернета. Довольно естественно, что возникло желание придумать что-то, что работало бы по привычной схеме, но работало бы и там. Реализовано это было в виде ASPX файлов. Вот, например, вызов ASPX файла:
https://www.microsoft.com/ru-ru/download/details.aspx?id=36805

Просмотров: 311 | Добавил: akostina76 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Форма входа
Поиск
Календарь
Архив записей
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Copyright MyCorp © 2024
    Бесплатный конструктор сайтов - uCoz