Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
26
Добавлен:
08.05.2015
Размер:
26.5 Кб
Скачать

1-я Лабораторная работа Вариант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

Соседние файлы в папке Html