- •Методичні вказівки до лабораторних робіт по курсу "системне програмування "
- •Методичні вказівки
- •До лабораторних робіт по курсу
- •"Системне програмування "
- •Частина 1. “Програмування для Windows 95/nt”
- •1.Общие положения
- •1.2. Порядок выполнения работы
- •1. 4. Оценивание выполнения работы
- •2. Структура windows - приложений. Оконная процедура. Обработка сообщений
- •2.1. Цель работы
- •2.2. Указания по подготовке к выполнению лабораторной работы
- •2.4. Задание на лабораторную работу
- •2.5. Контрольные вопросы и задания
- •3. Контексты устройств. Вывод текста
- •3.1. Цель работы
- •3.2. Указания по подготовке к выполнению лабораторной работы
- •3.3. Обзор темы работы
- •3.4. Задание на лабораторную работу
- •3.5. Контрольные вопросы и задания
- •4. Графический интерфейс пользователя (graphical user interface, gui)
- •4.1. Цель работы
- •4.2. Указания по подготовке к выполнению лабораторной работы
- •4.3. Сущность работы
- •4.4. Задание на лабораторную работу
- •4.5. Контрольные вопросы и задания
- •5. Средства ввода информации
- •5.1. Цель работы
- •5.2. Указания по подготовке к выполнению лабораторной работы
- •5.3. Обзор темы работы
- •5.4. Задание на лабораторную работу
- •5.5. Контрольные вопросы и задания
- •6. Использование ресурсов
- •6.1. Цель работы
- •6.2. Указания по подготовке к выполнению лабораторной работы
- •6.3. Обзор темы работы
- •6.4. Задание на лабораторную работу
- •6.5. Контрольные вопросы и задания
- •7. Многозадачность и многопоточность
- •7.1. Цель работы
- •7.2. Указания по подготовке к выполнению лабораторной работы
- •7.3. Обзор темы работы
- •7.4. Задание на лабораторную работу
- •7.5. Контрольные вопросы и задания
- •8. Многооконный интерфейс
- •8.1. Цель работы
- •8.2. Указания по подготовке к выполнению лабораторной работы
- •7.3. Обзор темы работы
- •7.4. Задание на лабораторную работу
- •8.5. Контрольные вопросы и задания
- •9.4. Задание на лабораторную работу
- •9.5. Контрольные вопросы и задания
- •Список литературы
- •Содержание
1. 4. Оценивание выполнения работы
Курс "Системное программирование" заканчивается модульным экзаменом, что определяет выставление оценок за каждый вид занятий и работ, проводимых в рамках курса.
Оценкой "отлично" оцениваются работы, выполненные в соответствии с заданием и вышеизложенными требованиями, выполненными самостоятельно, имеющими оригинальные технические решения. При оценке проекта важную роль играют четкие ответы на поставленные вопросы. Оценкой "хорошо" оцениваются работы, имеющие частные недостатки в реализации, некоторые пробелы в проработке отдельных вопросов, неполные ответы на вопросы. Оценкой "удовлетворительно" оцениваются работы, имеющие существенные недостатки в реализации, слабую проработку ключевых вопросов, недостаточно аргументированные ответы на вопросы.
2. Структура windows - приложений. Оконная процедура. Обработка сообщений
2.1. Цель работы
Ознакомление со структурой Windows - приложений, организацией взаимодействия программ с операционной системой, получение практических навыков по составлению, написанию и отладке простых программ, содержащих описание вида окна приложения, оконную процедуру, и обрабатывающих элементарные сообщения от клавиатуры, мыши и др. устройств.
2.2. Указания по подготовке к выполнению лабораторной работы
Необходимо изучить принцип построения и логику работы Windows-приложения, обратив внимание на порядок создания приложения (формирование структуры класса окна, регистрация класса, написание оконной процедуры, создание и отображение окна, цикл обработки сообщений).
При подготовке к работе необходимо изучить конспект лекций по указанной теме, методические указания, а также разделы, указанные в [16, c.4-52], [17, c.7-26].
Обзор темы работы
Любое оконное приложение, написанное под Windows должно содержать в себе следующие элементы:
Функцию регистрации класса окна.
Функцию создания окна.
Оконную процедуру.
Цикл обработки сообщений.
Далее по тексту приводится пример простейшей программы под 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, установленных на рабочих местах.
Следует обратить внимание, что в дальнейшем по тексту методических указаний будет отсутствовать такое подробное рассмотрения программ, а будут приведены ряд функций, которые соответствуют теме занятия. При необходимости получения их описания необходимо использовать вышеуказанные справочные системы или соответствующую литературу (см. п. Указания по подготовке к выполнению лабораторной работы)
