System programming / Методические указания / Html / 1LABA
.HTML1-я Лабораторная работа Вариант1 Вариант2 Вариант3 Вариант4 Вариант5 Вариант6 Вариант7 Вариант8 Лабораторная работа №1 1.Тема: СТРУКТУРА WINDOWS - ПРИЛОЖЕНИЙ. ОКОННАЯ ПРОЦЕДУРА. ОБРАБОТКА СООБЩЕНИЙ
1.1. Цель работы Ознакомление со структурой Windows - приложений, организацией взаимодействия программ с операционной системой, получение практических навыков по составлению, написанию и отладке простых программ,содержащих описание вида окна приложения, оконную процедуру, и обрабатывающих элементарные сообщения от клавиатуры, мыши и др. устройств. 1.2.Указания по подготовке к выполнению лабораторной работе: Необходимо изучить принцип построения и логику работы Windows-приложения, окна, регистрация класса, написание оконной процедуры, создание и отображение окна, цикл обработки сообщений). При подготовке к работе необходимо изучить конспект лекций по указанной теме, методические указания, а также разделы, указанные в [16, c.4-52], [17, c.7-26]. 1.3.Обзор темы работыЛюбое оконное приложение, написанное под Windows должно содержать в себе следующие элементы: Функцию регистрации класса окна. Функцию создания окна. Оконную процедуру. Цикл обработки сообщений.
Далее по тексту приводится пример простейшей программы под Windows, которая выводит на экран окно приложения с надписью "Привет, мир!". Данную программу необходимо взять за основу при решении своего варианта задания. Программа содержит, все необходимые для понимания ее работы, комментарии.
#include //подключение библиотеки с функциями API
// Глобальные переменные:
HINSTANCE hInst; //Указатель приложения
//Предварительное описание функций
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
//Основная программа
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
MSG msg;
// Регистрация класса окна
MyRegisterClass(hInstance);
// Создание окна приложения
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}
//Цикл обработки сообщений
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
//FUNCTION: MyRegisterClass()
//Регистрирует класс окна
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW; // стиль окна
wcex.lpfnWndProc = (WNDPROC)WndProc;
// оконная процедура
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;// указатель приложения
wcex.hIcon = MyIcon1;
// определение иконки
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
// определение курсора
wcex.hbrBackground = GetSysColorBrush(COLOR_BTNFACE);
//установка фона
wcex.lpszMenuName = NULL;
//определение меню
wcex.lpszClassName = szWindowClass;
// имя класса
wcex.hIconSm = NULL;
return RegisterClassEx(&wcex);
} // регистрация класса окна
// FUNCTION: InitInstance(HANDLE, int)
// Создает окно приложения и сохраняет
указатель приложения в переменной hInst
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
hInst = hInstance; // сохраняет указатель
приложения в переменной hInst
hWnd=CreateWindow(szWindowClass)
// имя класса окна szTitle,
// имя приложения
WS_OVERLAPPEDWINDOW, // стиль окна
CW_USEDEFAULT, // положение по Х
CW_USEDEFAULT, // положение по Y
CW_USEDEFAULT, // размер по Х
CW_USEDEFAULT, // размер по Y
NULL, // описатель родительского окна
NULL, // описатель меню окна
hInstance, // указатель приложения
NULL); // параметры создания.
if (!hWnd) // Если окно не создалось,
функция возвращает FALSE
{
return FALSE;
} ShowWindow(hWnd, nCmdShow); // Показать окно
UpdateWindow(hWnd);
// Обновить окно
return TRUE;
//Успешное завершение функции
}
// FUNCTION: WndProc(HWND, unsigned, WORD, LONG)-Оконная процедура.
Принимает и обрабатывает
все сообщения, приходящие в приложение.
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
RECT rt;
switch (message)
{ case WM_CREATE:
// Сообщение приходит при создании окна
break;
case WM_PAINT: // Перерисовать окно
hdc = BeginPaint(hWnd, &ps);
// Начать графический вывод
GetClientRect(hWnd, &rt);
// Область окна для рисования
DrawText(hdc, "Привет, мир!", -1, &rt,
DT_SINGLELINE|DT_CENTER | DT_VCENTER);
EndPaint(hWnd, &ps);
// Закончить графический вывод break;
case WM_DESTROY:
// Завершение работы
PostQuitMessage(0);
break;
default:
// Обработка сообщений, которые не обработаны пользователем
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
Особое внимание в первой лабораторной работе уделяется использованию функций регистрации, создания окна и оконной процедуре. Подробное описание параметров этих функций можно узнать при помощи MSDN или Win32 Programmer's Reference, установленных на рабочих местах. Следует обратить внимание, что в дальнейшем по тексту методических указаний будет отсутствовать такое подробное рассмотрения программ, а будут приведены ряд функций, которые соответствуют теме занятия. При необходимости получения их описания необходимо использовать вышеуказанные справочные системы или соответствующую литературу (см. п. Указания по подготовке к выполнению лабораторной работы) 1.4. Задание на лабораторную работу Написать с использованием функций API программу, создающую оконное приложение Windows. Программа должна содержать регистрацию класса окна, процедуру создания окна, оконную процедуру и цикл обработки сообщений. Программа должна выводить в клиентской области окна фамилию, имя, группу студента, выполнившего задание и перерисовывать ее при обработке сообщения WM_PAINT. Параметры создаваемого окна должны соответствовать варианту заданий. Варианты заданий приведены ниже.
Варианты:
Вариант 1 Стиль класса: выравнивание клиентской области по горизонтали;
Тип загружаемой иконки: IDI_APPLICATION,
Тип загружаемого курсора:IDC_ARROW,
Цвет фона окна: БЕЛЫЙ,
Имя класса окна: имя студента (на английском языке).
Стиль окна:
а) окно имеет заголовок и обрамляющую рамку;
б) WS_OVERLAPPEDWINDOW.
Позиция окна: по умолчанию.
Вариант 2
Стиль класса: перерисовка окна при изменении горизонтального размера;
Тип загружаемой иконки: IDI_HAND,
Тип загружаемого курсора: IDC_WAIT,
Цвет фона окна: СВЕТЛОСЕРЫЙ,
Имя класса окна: имя студента (на английском языке).
Стиль окна:
а) у окна есть кнопка минимизации;
б) WS_OVERLAPPEDWINDOW.
Позиция окна: в центре экрана шириной 400 высотой 250 точек.
Вариант 3
Стиль класса: перерисовка окна при изменении вертикального размера;
Тип загружаемой иконки: IDI QUESTION,
Тип загружаемого курсора: IDC_CROSS,
Цвет фона окна: СЕРЫЙ,
Имя класса окна: имя студента (на английском языке).
Стиль окна:
а) у окна есть системное меню;
б) WS_OVERLAPPEDWINDOW.
Позиция окна: с координатами (150,200,480,500),
Вариант 4
Стиль класса: запретить команду в системном меню;
Тип загружаемой иконки: IDI_WINLOGO,
Тип загружаемого курсора: IDC_SIZE,
Цвет фона окна: ТЕМНОСЕРЫЙ,
Имя класса окна: имя студента (на английском языке).
Стиль окна:
а) у окна есть горизонтальная линейная прокрутки;
б) WS_OVERLAPPEDWINDOW.
Позиция окна: верхний угол в координатах (50,90) и высотой 500,
шириной 400 точек.
Вариант 5
Стиль класса: посылать сообщение оконной процедуре при двойном
щелчке мыши, если курсор находится в пределах окно;
Тип загружаемой иконки: IDI_ERROR,
Тип загружаемого курсора: IDC_ICON,
Цвет фона окна: ЧЕРНЫЙ.
Имя класса окна: имя студента (на английском языке).
Стиль окна:
а) у окна есть вертикальная линейка прокрутки;
б) WS_OVERLAPPEDWINDOW.
Позиция окна: по нижнему краю экрана шириной 300 и высотой 200 точек
Вариант 6
Стиль класса: выравнивание клиентской области по горизонтали, перерисовка
окна при изменении вертикального размера;
Тип загружаемой иконки: IDI_INFORMATION.
Тип загружаемого курсора: IDC_NO,
Цвет фона окна: БЕЛЫЙ,
Имя класса окна: имя студента (на английском языке).
Стиль окна:
а) создается изначально минимизируемое окно;
б) WS_OVERLAPPEDWINDOW.
Позиция окна: по верхнему краю экрана шириной 400 и высотой 500 точек
Вариант 7
Стиль класса: запретить команду в системном меню, перерисовка
окна при изменении вертикального и горизонтального размера размера;
Тип загружаемой иконки: IDI_APPLICATION,
Тип загружаемого курсора: IDC_HELP.
Цвет фона окна: СВЕТЛОСЕРЫЙ,
Имя класса окна: имя студента (на английском языке).
Стиль окна:
а) окно имеет заголовок и обрамляющую рамку,
у окна есть кнопка минимизации,
у окна есть системное меню;
б) WS_OVERLAPPEDWINDOW.
Позиция окна: по левому краю экрана шириной 500 и высотой 200 точек
Вариант 8
Стиль класса:
выравнивание клиентской области по горизонтали,
перерисовка окна при изменении горизонтального размера,
перерисовка окна при изменении вертикального размера.
Тип загружаемой иконки: IDI QUESTION,
Тип загружаемого курсора: IDC_ARROW,
Цвет фона окна: СЕРЫЙ,
Имя класса окна: имя студента (на английском языке).
Стиль окна:
а) у окна есть горизонтальная линейная прокрутки,
у окна есть вертикальная линейка прокрутки,
создается изначально минимизируемое окно;
б) WS_OVERLAPPEDWINDOW.
Позиция окна: по правому краю экрана шириной 450 и высотой 440 точек
Вариант 9
Стиль класса:
запретить команду в системном меню,
посылать сообщение оконной процедуре при двойном щелчке мыши, если
курсор находится в пределах окно;
Тип загружаемой иконки: IDI_ERROR,
Тип загружаемого курсора: IDC_CROSS,
Цвет фона окна: ТЕМНОСЕРЫЙ,
Имя класса окна: имя студента (на английском языке).
Стиль окна:
а) окно имеет заголовок и обрамляющую рамку,
у окна есть кнопка минимизации,
у окна есть системное меню;
б) WS_OVERLAPPEDWINDOW.
Позиция окна: по умолчанию.
1.5. Контрольные вопросы и задания В чем заключается объектно-ориентированный подход к программированию? Раскройте особенности архитектуры, управляемой событиями. Каково назначение оконной процедуры приложения? Опишите основные этапы создания окна приложения. Объясните смысл цикла обработки сообщений. Каким образом происходит обработка сообщений в приложениях Windows? Раскройте сущность синхронных и асинхронных сообщений. Каким образом формируются сообщения? Поясните особенности формирования сообщения WM_PAINT. Что такое действительные и недействительные прямоугольники. Какие системные сообщения вы знаете?
Вариант1 Вариант2 Вариант3 Вариант4 Вариант5 Вариант6 Вариант7 Вариант8