Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
System programming / Методические указания / Методичка к лабораторным работам (рус).doc
Скачиваний:
53
Добавлен:
08.05.2015
Размер:
218.11 Кб
Скачать

1. 4. Оценивание выполнения работы

Курс "Системное программирование" заканчивается модульным экзаменом, что определяет выставление оценок за каждый вид занятий и работ, проводимых в рамках курса.

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

2. Структура windows - приложений. Оконная процедура. Обработка сообщений

2.1. Цель работы

Ознакомление со структурой Windows - приложений, организацией взаимодействия программ с операционной системой, получение практических навыков по составлению, написанию и отладке простых программ, содержащих описание вида окна приложения, оконную процедуру, и обрабатывающих элементарные сообщения от клавиатуры, мыши и др. устройств.

2.2. Указания по подготовке к выполнению лабораторной работы

Необходимо изучить принцип построения и логику работы Windows-приложения, обратив внимание на порядок создания приложения (формирование структуры класса окна, регистрация класса, написание оконной процедуры, создание и отображение окна, цикл обработки сообщений).

При подготовке к работе необходимо изучить конспект лекций по указанной теме, методические указания, а также разделы, указанные в [16, c.4-52], [17, c.7-26].

    1. Обзор темы работы

Любое оконное приложение, написанное под Windows должно содержать в себе следующие элементы:

  1. Функцию регистрации класса окна.

  2. Функцию создания окна.

  3. Оконную процедуру.

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

Далее по тексту приводится пример простейшей программы под Windows, которая выводит на экран окно приложения с надписью "Привет, мир!". Данную программу необходимо взять за основу при решении своего варианта задания. Программа содержит, все необходимые для понимания ее работы, комментарии.

#include <windows.h> // подключение библиотеки с функциями 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, установленных на рабочих местах.

Следует обратить внимание, что в дальнейшем по тексту методических указаний будет отсутствовать такое подробное рассмотрения программ, а будут приведены ряд функций, которые соответствуют теме занятия. При необходимости получения их описания необходимо использовать вышеуказанные справочные системы или соответствующую литературу (см. п. Указания по подготовке к выполнению лабораторной работы)