Особенности 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.

 

Главное окно

 

Прикладная программа Windows – это любая программа, которая специально написана для работы в операционной среде Windows и использующая интерфейс прикладной программы (API).

Прикладная программа Windows имеет следующие основные компоненты: основную функцию WinMain; т.н. «оконную процедуру» – функцию WndProc.

Win Main – это точка входа в программу. В любой программе для Windows имеется функция Win Ma in, она определяется следующим образом:

integer function WinMain (hInstance, hPrevInstance, &

lpszCmdLine, nCmdShow).

hInstance – дескриптор (описатель, хэндл) экземпляра. Это уникальное число, идентифицирующее программу, когда она работает под Windows;

hPrevInstance – дескриптор предыдущего экземпляра программы. Под Windows 95 этот параметр всегда NULL;

lpszCmdLine – указатель на оканчивающуюся нулем строку, в которой содержатся любые параметры, переданные в программу из командной строки.

nCmdShow – число, показывающее, каким должно быть выведено на экран окно в начальный момент.

В большинстве случаев эта функция делает следующее:

à вызывает функции инициализации, которые регистрируют классы окон, создают окна и выполняют другие инициализации;

à запускает цикл обработки сообщений из очереди прикладной программы;

à завершает работу программы.

WndProc – это функция многократного вызова, т.е. функция программы, которую вызывает Windows. Сама программа никогда не вызывает эту функцию напрямую. Каждое окно имеет соответствующую оконную процедуру. Оконная процедура – это способ инкапсулирования кода, отвечающего за ввод информации и за вывод информации на экран, что реализуется путем посылки «сообщений» окну.

В процессе создания главного окна программы условно можно выделить четыре этапа:

1) регистрация класса главного окна;

2) создание главного окна;

3) отображение и корректировка главного окна;

4) организация цикла сообщений.

Рассмотрим подробнее каждый из этапов.

Регистрация класса окна.

Окно всегда создается на основе класса окна. Класс окна идентифицирует оконную процедуру, которая выполняет процесс обработки сообщений, поступающих окну, а также определяет некоторые атрибуты окна, уникальные для него, такие, например, как форма курсора и имя меню окна. На основе одного класса окна можно создать несколько окон.

Перед созданием окна для программы необходимо зарегистрировать класс окна путем вызова функции Rеgist e rС l аss:

ret = Rеgiste rС l аss ( lpwc ).

ret – целочисленная переменная, содержащая возвращаемое функцией значение;

lpwc – указатель на структуру типа T _ WNDCLASS, содержащую в своих двенадцати полях информацию об имени, атрибутах, ресурсах и функции окна данного класса.

Заполнение структуры и регистрация класса окна производятся в WinMain. Если регистрация прошла успешно, функция возвращает число, идентифицирующее регистрируемый класс. В противном случае она возвращает ноль.

Создание окна.

Окно создается с помощью функции СreateWindow Ex (она отличается от аналогичной функции CreateWindow возможностью задания «расширенного» стиля окна и наличием параметра, используемого в качестве указателя на какие-то данные, на которые программа в дальнейшем могла бы ссылаться). Эта функция побуждает Windows создать окно, которое имеет указанный тип и принадлежит к определенному классу. Вызов функции СreateWindow Ex осуществляется следующим образом:

hWnd = CreateWindowEx (&

INT4 (WS_EX_DLGMODALFRAME), ! «расширенный» стиль окна &

lpszClassName,        ! Имя класса окна &

lpszAppName, ! Заголовок главного окна &

INT4 (WS_OVERLAPPEDWINDOW),          ! Стиль окна &

0,                    ! X – координата левого верхнего угла &

0,                        ! Y – координата верхнего левого угла &

GetSystemMetrics (SM_CXSCREEN) – 32,    ! Ширина окна &

GetSystemMetrics (SM_CYSCREEN) – 32,    ! Высота окна &

NULL,   ! Дескриптор родительского окна &

h M enu, ! Дескриптор меню окна &

hInstance,! Дескриптор экземпляра &

NULL)   ! Параметры создания

Параметр с комментарием «имя класса окна» содержит строку, являющуюся именем только что зарегистрированного класса окна («Krs_w»). Т.о., этот параметр связывает окно с классом окна.

«Заголовок главного окна» содержит текст, который появляется в строке заголовка («Компоновщик расчетных схем»).

Окно, созданное программой, является обычным перекрывающимся окном с заголовком, системным меню, главным меню, иконками для сворачивания, разворачивания и закрытия окна справа на строке заголовка и рамкой окна (стандартный стиль окон WS_ОVЕRLАРРЕDWINDOW). Из предлагаемого ОС Windows набора «расширенных» стилей выбран стиль WS_EX_DLGMODALFRAME, добавляющий окну двойную рамку.

Параметр с комментарием «дескриптор родительского окна» устанавливается в NULL, т. к. у нашего окна отсутствует родительское окно. Параметр hMenu содержит дескриптор меню окна. В параметр hInstance помещается дескриптор экземпляра программы, переданный программе в качестве параметра функции WinMain. Параметр с комментарием «параметры создания» при необходимости используется в качестве указателя на какие-нибудь данные, на которые программа в дальнейшем могла бы ссылаться (в рассматриваемой программе такие данные не используются – параметр установлен в NULL).

Вызов СreateWindow Ex возвращает дескриптор созданного окна. Этот дескриптор хранится в переменной hWnd. Для многих функций Windows в качестве параметра требуется hWnd, указывающий Windows, к какому окну применить функцию. Если функция СreateWindow Ex не может создать окно, она возвращает NULL.

Отображение и корректировка окна.

Хотя функция СreateWindow Ex и создает окно, она автоматически не индицирует его. Программа должна предусмотреть индикацию окна с помощью функции ShowWindow и корректировку области пользователя окна с помощью функции UpdateWindow.

Функция ShowWindow побуждает Windows индицировать новое окно:

bret = ShowWindow ( hWnd , nCmdShow )

hWnd – дескриптор созданного функцией CreateWindowEx окна;

nCmdShow – величина, передаваемая в качестве параметра функции WinMain и задающая начальный вид окна на экране;

bret – логическая переменная, содержащая возвращаемое функцией значение.

Функция Sho wWindow выводит окно на экран. Вызов функции 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Т заставляет программу прервать цикл обработки сообщений.

При организации цикла обработки сообщений программы, создающей в ходе работы немодальные окна диалога[1], необходимо учитывать, что сообщения для немодальных окон диалога проходят через очередь сообщений программы. Цикл обработки сообщений должен передавать такие сообщения соответствующим оконным процедурам окон диалога. Это реализуется следующим образом. Функция создания немодального диалога CreateDialog возвращает дескриптор окна (не равный 0), который запоминается в глобальной переменной (например, hDlgModeLess). Если диалог создан и сообщение предназначено для него, то функция IsDialogMessage отправляет сообщение оконной процедуре окна диалога, возвращая TRUE, тогда вспомогательная переменная i принимает значение 1, сигнализируя тем самым о перехвате сообщения диалоговым окном. В противном случае функция возвращает FALSE и переменная i не меняется. Если созданы и другие активные немодальные диалоги, то для них реализуются аналогичные операции. Таким образом гарантируется, что функции TranslateMessage и DispatchMessage будут вызываться только тогда, когда немодальные окна диалога не созданы или нет сообщений для них.

Т.к. программе необходимо обрабатывать вводимые с клавиатуры символы, нужно преобразовывать каждое полученное сообщение с помощью функции TranslateMessage. Эта функция отыскивает пары сообщений WM_KEYDOWN и WM_KEYUP и генерирует соответствующее сообщение WM_CHAR.

Функция DispatchMessage отправляет сообщение для его обработки соответствующей оконной процедуре. В рассматриваемой программе такой оконной процедурой является функция Main WndProc. После того, как Main WndProc обработает сообщение, оно возвращается в Windows, которая все еще обслуживает вызов функции DispatchMessage. Windows возвращает управление в программу к следующему за вызовом DispatchMessage оператору и цикл обработки сообщений в очередной раз возобновляет работу, вызывая GetMessage.

Реальная работа начинается в оконной процедуре, которая обеспечивает реакцию на вводимую информацию и сообщения системы управления окнами, получаемые от Windows.

 


Дата: 2019-05-29, просмотров: 178.