- •Системное программное обеспечение
- •1 40 01 01 “Программное обеспечение информационных технологий”
- •1 40 01 02 “Информационные системы и технологии”
- •Содержание
- •Часть 1 3
- •Часть 1 Лабораторная работа № 1 Простейшее приложение на базе win32 api
- •1.2 Постановка задачи: Выбор варианта!
- •2. Классы окон, регистрация оконного класса.
- •3. Создание экземпляра оконного класса.
- •1.3 Теоретические сведения:
- •1. Структура оконного класса, поля, их назначение, инициализация.
- •4. Отображение окон на экране.
- •5. Управление положением и размерами окна
- •6. Обновление оконной области на экране.
- •7. Установка фона.
- •8. Курсор приложения. Типы курсоров, их прикрепление к приложению.
- •9. Цикл обработки сообщений
- •10. Оконная функция
- •Лабораторная работа № 2 Программирование внешних устройств
- •2.2 Постановка задачи:
- •2.3 Теоретические сведения:
- •1. Механизм сообщений от клавиатуры
- •2. Коды oem, ansi, ascii, виртуальные коды
- •3. Виртуальные клавиши
- •4. Символьные сообщения
- •1. Захват и освобождение окном мыши
- •2. Обработка сообщений от мыши
- •3. Координаты X,y
- •1. Установка таймера
- •2. Функция таймера
- •Лабораторная работа № 3 Диалоги и элементы управления
- •3.2 Постановка задачи:
- •3.3 Теоретические сведения:
- •3.3.1 Модальное диалоговое окно
- •3.3.2 Немодальное диалоговое окно
- •3.3.3 Процедура диалогового окна
- •3.3.4 Элементы управления диалогового окна
- •3.3.5 Принципы работы с элементами управления
- •3.3.6 Класс “edit”
- •3.3.7 Класс “listbox”
- •3.3.7. Класс “ combobox ”
- •3.3.8 Корректность вводимых данных.
- •3.3.9 Окна сообщений. Использование окон сообщений.
- •Лабораторная работа № 4 Работа с файлами.
- •4.2. Постановка задачи:
- •4.3 Теоретические сведения:
- •Создание текстового файла. Запись в текстовый файл.
- •Литература
1.3 Теоретические сведения:
1. Структура оконного класса, поля, их назначение, инициализация.
Оконный класс - шаблон, который определяет базовые свойства окна. Каждому такому шаблону присваивается имя, уникальное в его области видимости.
Структура оконного класса следующая:
// функция регистрирования класса в ОС
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;//стиль класса
wcex.lpfnWndProc = (WNDPROC)WndProc; //функция окна
wcex.cbClsExtra = 0; // доп. байты класса
wcex.cbWndExtra = 0; // доп. байты окна класса
wcex.hInstance = hInstance; // дескриптор приложения
wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_LABRAB_1); // дескриптор пиктограммы 32*32
wcex.hCursor = LoadCursor(NULL, IDC_ARROW); // дескриптор курсора
wcex.hbrBackground = CreateSolidBrush(RGB(192,220,192)); // дескриптор кисти
wcex.lpszMenuName = (LPCTSTR)IDC_LABRAB_1; // меню
wcex.lpszClassName = szWindowClass; // имя класса
wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL); //дескриптор пиктограммы 16*16
RegisterClassEx(&wcex);
wcex.hbrBackground = CreateSolidBrush(RGB(192,192,192));
wcex.lpszClassName = szWindowClassSub;
return RegisterClassEx(&wcex);
}
Назначение полей структуры:
style – стиль класса (один или несколько). Может принимать различные значения, например, CS_HREDRAW – рабочую область перерисовывать при изменении ширины окна; CS_VREDRAW - рабочую область перерисовывать при изменении высоты окна; CS_DBLCLKS – оконная функция будет реагировать на двойной щелчок мыши над рабочей областью окна.
lpfnWndProc – функция окна, описывающая реакцию на поступающие сообщения. Имя этой функции WndProc.
cbClsExtra – количество дополнительных байт класса.
cbWndExtra – количество дополнительных байт окна этого класса.
hInstance – дескриптор текущего приложения.
hIcon – имя иконки, в которую превращается окно при минимизации. Иконку загружают функцией LoadIcon(hInstance, (LPCTSTR)IDI_LABRAB_1).
hCursor – задаёт вид курсора мыши при его прохождении над окном.
hbrBackground – задаёт дескриптор кисти закрашивания окна.
lpszMenuName – имя ресурса главного меню для окон этого класса. Если задать NULL, то окна этого класса не будут иметь меню.
wcex.lpszMenuName = (LPCTSTR)IDC_LABRAB_1;
lpszClassName – строка, содержащая имя класса окон.
TCHAR szWindowClass[]="MainClass";
……
wcex.lpszClassName = szWindowClass;
2. Классы окон, регистрация оконного класса.
После инициализации полей классов необходимо их зарегистрировать для создания экземпляров класса. Для регистрации класса использовалась приведенная выше функция RegisterClassEx (&wcex). При успешной регистрации класса она возвращает ненулевое значение, иначе – нуль.
3. Создание экземпляра оконного класса.
После того как класс окна определен и зарегистрирован, приложение может создавать окна этого класса с помощью функции CreateWindow:
hWnd = CreateWindow( szWindowClass, //указатель на имя класса
szTitle, // заголовок окна
WS_OVERLAPPEDWINDOW,// стиль окна
250, // координата левого края
100, // верхнего
500, // ширина
500, // высота
NULL, // дескриптор окна-родителя
NULL, // меню
hInstance, // дескриптор приложения
NULL); // указатель на стр-ру, кот. исп-ся при инициализации экземпляра класса
Стиль окна может принимать различные значения. В данном случае, WS_OVERLAPPEDWINDOW – перекрывающееся окно, имеющее заголовок и рамку.
Также могут быть и другие значения: WS_VSCROLL – окно с вертикальной полосой просмотра; WS_CHILD – дочернее окно и др.
