Методические указания к лабораторной работе №3 по курсу "Операционные системы" Волгоград 2005



Скачать 248.3 Kb.
Дата16.09.2014
Размер248.3 Kb.
ТипМетодические указания
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
ВОЛГОГРАДСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
КАФЕДРА ЭВМ И СИСТЕМ


Архитектура приложения Win32
Методические указания к лабораторной работе № 3

по курсу "Операционные системы"

Волгоград 2005

УДК 681.31


Архитектура приложения Win32: Методические указания к лабораторной работе № 3 по курсу "Операционные системы" /Cост. Деревенсков С. О., Стрельников О. И.; Волгоград. гос. техн. ун-т. – Волгоград, 2005. – 10 с.


Содержатся сведения, необходимые для изучения студентами основ программирования в API WIN32 для операционных систем Windows95 и Windows NT, архитектуры приложений WIN32, основ взаимодействия приложения с операционной системой, организации интерфейса пользователя с использованием ресурсов приложения и стандартных органов управления. Приведены варианты заданий к лабораторной работе.

Предназначены для студентов, обучающихся по направлению 5528 "Информатика и вычислительная техника" и специальности 2201 "Вычислительные машины, комплексы, системы и сети" всех форм обучения.


Табл. 1. Библиогр. 6 назв.

Рецензент Игнатьев А.Н.

Печатается по решению редакционно-издательского совета Волгоградского государственного технического университета
ISBN


© Деревенсков С. О., 2005

© Стрельников О. И., 2005

© Волгоградский государственный технический университет, 2005

Лабораторная работа № 3
Основы программирования приложений Windows
Цель работы: изучение структуры приложений Windows, способов их взаимодействия с операционной системой и основных приемов программирования в API Win32.

Основные сведения

В настоящее время операционные системы фирмы Microsoftпрочно завоевали господствующее положение на рынке операционных систем для персональных компьютеров на платформе Intel. Доминирующее положение Microsoft укрепил выпуск новых 32-разрядных систем: Windows 95 и Windows NT 4.0. Windows 95 в настоящее время рекомендуется разработчиками как ОС рабочей станции сети Microsoft для большинства персональных компьютеров среднего класса. Для более производительных рабочих станций в качестве альтернативы Windows 95 рассматривается более надежная Windows NT 4.0 Workstation. Для организации корпоративных сетей Microsoft предлагает ОС Windows NT 4.0 Server, поддерживающую функции файлового сервера, сервера приложений, сервера печати, сервера удаленного доступа и ряд других.

Все 32-разрядные версии Windowsиспользуют единый интерфейс прикладных программ - API WIN32. API WIN32 представляет собой совокупность более 1000 системных функций. В отличие от MS DOS, где для вызова функций ОС используется механизм программных прерываний, вызов системных функций WIN32 производится по их именам. При этом независимо от языка программирования имена функций, а также входные и выходные параметры остаются неизменными.

Прикладная программа, разработанная специально для Windows95 или Windows NT называется приложением WIN32 (WIN32 application). Архитектура приложения представляет собой архитектуру программы, управляемой событиями. Ключевую роль в организации работы всех подсистем и приложений Windows играет система сообщений.

Процесс обработки сообщений представлен на рис. 1.

В Windows95 и Windows NT реализована вытесняющая мультизадачность на уровне потоков. Поток (thread) описывает последовательность исполнения кода внутри процесса. В соответствии с установленным приоритетом система выделяет каждому потоку кванты процессорного времени, задаваемые системным таймером. Любому потоку в приложении соответствует некоторая функция - функция потока. При запуске приложения создается процесс, а в его рамках – первичный поток, который и получает управление. Приложение должно состоять как минимум из одной функции – функции первичного потока, которая при программировании на языке С заменяет функцию main и должна быть определена следующим образом:


Аппаратура




Поток необработанного ввода (RIT)

Драйвер


Драйвер

Драйвер



Виртуальная очередь ввода потока



Очередь сообщений потока


Приложение WIN32


Функция потока



Функция GetMessage




Цикл обработки сообщений


Функция DispatchMessage




Функция окна



Рис. 1. Процесс обработки сообщений
int WINAPI WinMain (HINSTANCE hinstance , HINSTANCE hPrevinstance,

LPSTR lpszCmdLine, int nCmdShow)

{ // Тело функции }

Все параметры , получаемые функцией WinMain , формируются операционной системой. Параметры hinstance и hPrevinstance представляют собой соответственно идентификаторы текущей и предыдущей копии приложения. Приложения WIN32 функционируют в изолированных виртуальных адресных пространствах и в силу этого не имеют возможности определить через параметр hPrevinstance, не запущено ли приложение вторично. Этот параметр использовался в предыдущих версиях Windows, для приложений WIN32 он всегда равен нулю. Параметр lpszCmdLine - дальний указатель на строку запуска приложения, параметр nCmdShow указывает рекомендуемый приложению способ представления главного окна при запуске. Приложение может игнорировать этот параметр, однако это не является хорошим стилем программирования.

Для нормальной работы приложения функция потока (то есть в нашем случае – функция WinMain) должна обрабатывать сообщения. Сообщение представляет собой сформированную операционной системой в виде структуры типа MSG информацию о некотором событии во “внешнем” (по отношению к потоку) мире, о котором, по мнению ОС, должен “узнать” поток. Имеется три основных источника сообщений: аппаратура, потоки других процессов (или одного процесса – в случае мультипотоковых приложений) и сама ОС.

Для обработки сообщений функция потока должна содержать цикл обработки сообщений (message loop). Основу этого цикла составляют две функции API WIN32, имеющие следующие прототипы:

BOOL GetMessage (LPMSG lpmsg , HWND hwnd, UINT uMsgFilterMin ,

UINT uMsgFilterMax);

LONG DispatchMessage(const MSG * lpmsg);

Простейший цикл обработки сообщений выглядит следующим образом:

MSG msg;

. . .

while (GetMessage(&msg , 0 , 0 , 0 ) ) { DispatchMessage(&msg); }

Функция GetMessage извлекает очередное сообщение из очереди сообщений вызвавшего ее потока. Параметр lpmsg - дальний указатель на структуру сообщения (типа MSG). Параметр hwnd (идентификатор окна) определяет конкретное окно из числа окон, созданных потоком, которому послано сообщение.

Функция GetMessage возвращает значение FALSE в случае, если извлекается сообщение WM_QUIT, во всех остальных случаях возвращается значение TRUE. Выборка сообщения WM_QUIT приводит к выходу из цикла, после чего обычно поток завершается. Следует также отметить важную особенность функции GetMessage : если функция обнаруживает, что очередь сообщений потока пуста, то поток блокируется и ему не выделяется процессорное время до тех пор, пока новое сообщение не поступит в очередь. Функция DispatchMessage определяет окно , которому предназначено сообщение , и вызывает соответствующую функцию окна . Функция окна относится к так называемым косвенно вызываемым (callback) функциям , которые создаются разработчиком приложения , а вызываются Windows. Каждому окну , создаваемому потоком, должна соответствовать некоторая функция окна (допустимо , когда одна функция определяется как функция окна сразу для нескольких окон). В функции окна сосредоточены все действия потока по обработке сообщений , направленных окну. Так как абсолютное большинство приложений можно рассматривать как совокупность окон, можно считать , что основная работа приложения выполняется функцией ( или функциями) окна.

Функции окна соответствует следующий прототип (имя функции выбирается произвольно):

LRESULT CALLBACK WndProc ( HWND hwnd , UINT msg ,

WPARAM wParam , LPARAM lParam);

Параметры функции полностью аналогичны соответствующим полям структуры MSG.

Фактически функция окна представляет собой один большой оператор выбора из обрабатываемых функцией окна сообщений и содержит обработчики этих сообщений. Как правило, программист планирует обработку далеко не всех сообщений, поступающих в функцию окна. Поэтому, перед возвратом из функции необработанные сообщения передаются на обработку по умолчанию функции DefWindowProc. Значение, возвращаемое функцией окна, в общем случае определяется тем, какое обрабатывалось сообщение.

Приложение, использующее графический интерфейс с пользователем, должно иметь, как минимум, одно окно – главное окно приложения. Для того, чтобы создать окно, необходимо вначале зарегистрировать класс окна . Класс окна определяет набор свойств , характерных для всех окон , создаваемых на базе данного класса. В Windows определены стандартные классы окон, используемые для создания стандартных органов управления. Стандартные классы не регистрируются приложением и для них не определяется функция окна , так как эти операции выполняются автоматически при загрузке Windows.

Для регистрации класса окна используется следующая функция API WIN32:

ATOM WINAPI RegisterClassEx ( const WNDCLASSEX FAR * lpwcx);

В качестве параметра эта функция получает дальний указатель на структуру WNDCLASSEX, описывающую основные свойства всех окон, формируемых на базе создаваемого класса. Заметим, что среди прочих параметров, структура WNDCLASSEX содержит дальний указатель на функцию, которая будет использоваться как функция окна для всех окон, созданных на основе данного класса.

Для создания окна используется функция CreateWindow :

HWND WINAPI CreateWindow( LPCSTR lpszClassName,

LPCSTR lpszWindowName , DWORD dwStyle , int x , int y , int nWidth , int nHeight, HWND hwndParent, HMENU hmenu , HINSTANCE hinst , LPVOID lpvParam );

Функция CreateWindow не отображает окно на экране (для этого предназначена функция ShowWindow). Функция CreateWindow создает в оперативной памяти структуру типа WND, на которую фактически указывает идентификатор окна типа HWND, возвращаемый этой функцией . Если создать окно не удалось, функция возвращает значение NULL . Параметры функции служат для определения внешнего вида создаваемого окна.

Загрузочный модуль приложения, кроме сегментов кода и данных, может также содержать дополнительные данные в специальном формате, называемые ресурсами приложения. К числу наиболее часто используемых типов ресурсов относятся пиктограмма ( ICON ), курсор ( CURSOR ), таблица текстовых строк (STRINGTABLE), графическое изображение ( BITMAP ), произвольные данные (RCDATA), меню ( MENU и MENUEX ), акселераторы меню (ACCELERATORS), шаблон диалога ( DIALOG и DIALOGEX ).

Для включения ресурсов в загрузочный модуль приложения необходимо создать текстовый файл описания ресурсов (*.rc) и включить его в состав создаваемого программного проекта. В процессе сборки загрузочного модуля этот файл обрабатывается компилятором ресурсов, в результате чего ресурсы включаются в состав exe-файла приложения, там же формируется таблица ресурсов , которая используется для поиска и загрузки ресурсов в оперативную память. Промежуточным результатом данного процесса является скомпилированный двоичный файл описания ресурсов (*.res). Файл описания ресурсов состоит из специальных операторов, определяющих включаемые ресурсы. Обычно ресурсы загружаются автоматически перед их использованием, например при создании окна или диалоговой панели. Кроме того, имеются функции API, позволяющие загружать ресурсы динамически в процессе работы приложения.

Стандартные органы управления представляют собой дочерние окна созданные на основе предопределенных в Windows классов окон. Для создания органа управления используется функция CreateWindow. В качестве имени класса окна для этой функции необходимо указать имя одного из предопределенных классов. Заголовок окна при этом рассматривается как строка, которая будет написана на поверхности органа управления. Для органа управления, на котором отсутствует надпись, соответсвующий параметр функции CreateWindow должен быть указан как NULL. Стиль окна задается как комбинация стилей WS_CHILD, WS_VISIBLE и стилей, определенных для соответствующих органов управления. Координаты, высота и ширина органа управления имеют тот же смысл, что и для произвольного окна. Параметр hwndParent должен содержать идентификатор окна, на поверхности которого создается орган управления. В качестве параметра hMenu следует указать определенную Вами через #define константу, которая будет служить идентификатором органа управления. Остальные параметры функции CreateWindow имеют обычный смысл. Как правило, органы управления создаются при обработке функцией окна сообщения WM_CREATE.

Когда пользователь совершает какое-то действие над органом управления, в функцию родительского окна поступает сообщение WM_COMMAND. Параметр lParam этого сообщения содержит идентификатор окна органа управления типа HWND, который возвращается функцией CreateWindow при создании органа управления. Младшее слово параметра wParam содержит уже упоминавшийся идентификатор органа управления. Именно по этому идентификатору функция родительского окна определяет, от какого именно органа управления получено сообщение. Старшее слово wParam содержит код извещения, специфичный для каждого органа управления и определяющий, о чем собственно уведомляет родительское окно орган управления. Таким образом, для работы с органами управления родительскому окну достаточно обрабатывать сообщение WM_COMMAND. Обработчик этого сообщения должен вернуть нулевое значение.

Из всего выше сказанного имеется одно исключение, касающееся полос просмотра. Во-первых, если необходимо иметь окно с полосами просмотра, то для

этого достаточно при создании этого окна указать стили WS_VSCROLL и WS_HSCROLL для вертикальной и горизонтальной полос, соответственно. Во-вторых, вместо сообщения WM_COMMAND от вертикальной полосы просмотра поступает сообщение WM_VSCROLL, а от горизонтальной – WM_HSCROLL.

Для того, чтобы влиять на состояние органов управления, необходимо посылать сообщения органу управления. Для каждого органа управления определен свой набор сообщений. Сообщения обычно посылаются при помощи функции SendMessage, имеющей тот же набор параметров, что и функция окна:

LRESULT SendMessage(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

Кроме того, довольно часто эта функция используется для посылки в собственную очередь сообщений WM_COMMAND, WM_VSCROLL, WM_HSCROLL для имитации событий от органов управления. Подобный прием часто используется, например, для синхронизации полосы просмотра с клавиатурой: при нажатии соответствующих клавиш обработчик сообщения WM_KEYDOWN посылает сообщения WM_VSCROLL или WM_HSCROLL.

Следует напомнить также, что органы управления являются окнами, и поэтому к ним применимы те же функции, что и для любых других окон, в частности MoveWindow, EnableWindow, IsWindowEnabled, SetWindowText, ShowWindow, DestroyWindow. Кроме того, в дополнение к посылке сообщений органам управления, влиять на их состояние можно при помощи специальных функций API, определенных для некоторых органов управления. В файле windowsx.h системы программирования Borland C++ 5.02 для большинства стандартных органов управления определены также макросы, упрощающие передачу сообщений органам управления.

В таблице 1 приведена общая информация о стандартных органах управления.

Более подробно сведения, необходимые для выполнения лабораторной работы, изложены в учебном пособии С.О. Деревенсков, Е.И.Духнич “Основы программирования для Windows 95 и Windows NT” (с. 1 - 42) и многочисленной литературе [2-6]. В помощь студентам на дискете, прилагаемой к настоящим указаниям, приводятся примеры программирования простейших приложений Win32.
Таблица 1

Стандартные органы управления

Орган управления

Имя класса

Стиль окна

Коды извещения

Сообщения для органа управления

Кнопка

button”

BS_*

BN_*

BM_*

Статическое окно

static”

SS_*

STN_*

STM_*

Полоса просмотра

scrollbar”

SBS_*

SB_*

SBM_*

Простой редактор текста

edit”

ES_*

EN_*

EM_*

Простой список выбора

listbox”

LBS_*

LBN_*

LB_*

Список выбора с окном редактирования

combobox”

CBS_*

CBN_*

CB_*


Порядок выполнения работы

  1. Получите вариант задания у преподавателя.

  2. Напишите программу согласно варианту задания.

  3. Отладьте разработанную программу и покажите результаты работы программы преподавателю.

  4. Составьте отчет по лабораторной работе


Содержание отчета

Отчет по лабораторной работе должен содержать следующие сведения:

  • название и цель работы;

  • вариант задания;

  • листинг разработанной программы с комментариями;

  • результаты работы программы.


Варианты заданий

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

1.Формируются несколько стандартных кнопок и статическое окно. Информация о нажатии каждой кнопки должна отображаться в статическом окне.

2. Формируются несколько радиокнопок и статическое окно. В каждый момент времени только одна из радиокнопок должна быть нажата. Информация об изменении состояния каждой кнопки должна отображаться в статическом окне.

3. Формируются несколько групп переключателей по 2 – 3 переключателя и статическое окно. В каждый момент времени только один из переключателей в группе может быть выбран. Информация об изменении состояния каждого переключателя должна отображаться в статическом окне.

4. Формируются три стандартные кнопки и статическое окно. Две кнопки управляют размерами третьей: нажатие на них пропорционально увеличивает и уменьшает ее размеры. Информация об изменении размеров кнопки должна отображаться в статическом окне.

5. Формируются вертикальная полоса просмотра и статическое окно. В статическом окне должна отображаться информация о текущем положении ползунка.

6. Формируются простой список выбора и статическое окно. В статическом окне должна отображаться информация о выбираемом пользователем элементе списка.

7. Формируются список выбора с окном редактирования и статическое окно. В статическом окне должна отображаться информация о выбираемом пользователем элементе списка.

8. Формируются однострочный текстовый редактор и статическое окно. В статическом окне должна отображаться информация, вводимая пользователем в редакторе.

9. Формируются многострочный текстовый редактор и статическое окно. В статическом окне должна отображаться информация, вводимая пользователем в редакторе.

10. Формируются однострочный текстовый редактор, простой список выбора и стандартная кнопка. Нажатие на кнопку должно помещать введенную пользователем в редакторе строку в список выбора.
Контрольные вопросы

  1. Что такое сообщение? Какова роль сообщений в организации работы приложения? Объясните процесс обработки сообщений в Windows.

  2. Расскажите о структуре приложений Windows.

  3. Расскажите о регистрации класса окна и создании окна приложения.

  4. Расскажите о назначении функции окна.

  5. Что такое ресурсы приложения? Каким образом они создаются и как используются в процессе работы приложения?

  6. Что такое стандартные органы управления? Расскажите об их создании и использовании.



Л и т е р а т у р а


  1. Деревенсков С.О., Духнич Е.И. Основы программирования для Windows 95 и Windows NT: Учеб. пособие / ВолгГТУ, Волгоград, 1998, - 84 с.

  2. Рихтер Дж. Windows для профессионалов (программирование в Win32 API для Windows NT 4.0 и Windows 95) / Пер. с англ. – М.: Издательский отдел “Русская редакция” ТОО “Chanel Trading Ltd.”, 1997 – 720 c.:ил.

  3. Петзолд Ч. Программирование для Windows 95; в 2-х томах / Пер. с англ. – СПб.:BHV-Санкт-Петербург, 1997.

  4. Фролов А.В., Фролов Г.В. Операционная система Windows 95 для программиста – М.: ДИАЛОГ-МИФИ, 1996. – 288 с. – (Библиотека системного программиста; Т. 22)

  5. Фролов А.В., Фролов Г.В. Операционная система Microsoft Windows 3.1 для программиста: В 3-х ч.Часть 1. – М.: ДИАЛОГ-МИФИ, 1994. – 269 с. – (Библиотека системного программиста; Т. 11)

  6. Фролов А.В., Фролов Г.В. Операционная система Microsoft Windows 3.1 для программиста: В 3-х ч.Часть 2. – М.: ДИАЛОГ-МИФИ, 1994. – 269 с. – (Библиотека системного программиста; Т. 12)


Составители: Сергей Олегович Деревенсков, Олег Иванович Стрельников


Архитектура приложения Win32: Методические указания к лабораторной работе № 3 по курсу "Операционные системы"

Редактор ___________________
Темплан 2005 г., поз. N ____

Подписано в печать _____________. Формат 60 х 84 1/16

Бумага газетная. Печать офсетная. Усл. печ. л. ____.

Уч.-изд. л. ____. Тираж ____. Заказ _____. Бесплатно.

Волгоградский государственный технический университет.

400066 Волгоград, пр. Ленина, 28.

Типография Волгоградского государственного технического университета.

400066 Волгоград, ул. Советская, 35.

8

Похожие:

Методические указания к лабораторной работе №3 по курсу \"Операционные системы\" Волгоград 2005 iconМетодические указания к лабораторной работе №1 по курсу "Операционные системы" Волгоград 2005 удк 681. 31
Управление вводом выводом и дисковая подсистема ms-dos: Методические указания к лабораторной работе №1 по курсу "Операционные системы"...
Методические указания к лабораторной работе №3 по курсу \"Операционные системы\" Волгоград 2005 iconМетодические указания к лабораторной работе №2 по курсу "Операционные системы" Волгоград 2005 удк 681. 31
Подсистема управления процессами ms-dos: Методические указания к лабораторной работе №2 по курсу "Операционные системы" /Cост. Деревенсков...
Методические указания к лабораторной работе №3 по курсу \"Операционные системы\" Волгоград 2005 iconМетодические указания к лабораторной работе по курсу
Параметрическая оптимизация радиоэлектронных схем: методические указания к лабораторной работе по курсу Компьютерный анализ электронных...
Методические указания к лабораторной работе №3 по курсу \"Операционные системы\" Волгоград 2005 iconМетодические указания к лабораторной работе по курсу
Расчет радиоэлектронных схем методом узловых потенциалов: Методические указания к лабораторной работе по курсу "Основы компьютерного...
Методические указания к лабораторной работе №3 по курсу \"Операционные системы\" Волгоград 2005 iconМетодические указания к лабораторной работе по курсу «Информатика»
Методические указания к лабораторной работе по информатике знакомят с назначением и функцией программы оболочки
Методические указания к лабораторной работе №3 по курсу \"Операционные системы\" Волгоград 2005 iconМетодические указания к лабораторной работе по дисциплине
Операции с таблицами баз данных в среде Delphi: методические указания к лабораторной работе по дисциплине "Информационное обеспечение...
Методические указания к лабораторной работе №3 по курсу \"Операционные системы\" Волгоград 2005 iconМетодические указания к лабораторной работе Рязань 2003 удк 57(021)
Изучение процесса радиоактивного распада: Методические указания к лабораторной работе /Рязан гос радиотехн акад.; Сост.: А. П. Ефремов,...
Методические указания к лабораторной работе №3 по курсу \"Операционные системы\" Волгоград 2005 iconМетодические указания к лабораторной работе Рязань 2004 удк 621. 396. 21
Спектральный анализ сигналов: Методические указания к лабораторной работе / В. В. Езерский, А. В. Егоров; Рязан гос радиотехн акад....
Методические указания к лабораторной работе №3 по курсу \"Операционные системы\" Волгоград 2005 iconМетодические указания к лабораторной работе Рязань 2006 удк 621. 384. 83
Изучение принципов работы циклоидального масс-спектрометра: Методические указания к лабораторной работе /Рязан гос радиотехн ун т.;...
Методические указания к лабораторной работе №3 по курсу \"Операционные системы\" Волгоград 2005 iconМетодические указания к лабораторной работе по курсу «Распределенные системы обработки информации»
Получить знания о Java Servlet технологии, сервере Jakarta Tomcat, его настройке для работы с сервлетами
Разместите кнопку на своём сайте:
ru.convdocs.org


База данных защищена авторским правом ©ru.convdocs.org 2016
обратиться к администрации
ru.convdocs.org