Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СПО_лабораторные работы_часть 1.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
397 Кб
Скачать
☆

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);

}

Назначение полей структуры:

  1. style – стиль класса (один или несколько). Может принимать различные значения, например, CS_HREDRAW – рабочую область перерисовывать при изменении ширины окна; CS_VREDRAW - рабочую область перерисовывать при изменении высоты окна; CS_DBLCLKS – оконная функция будет реагировать на двойной щелчок мыши над рабочей областью окна.

  2. lpfnWndProc – функция окна, описывающая реакцию на поступающие сообщения. Имя этой функции WndProc.

  3. cbClsExtra – количество дополнительных байт класса.

  4. cbWndExtra – количество дополнительных байт окна этого класса.

  5. hInstance – дескриптор текущего приложения.

  6. hIcon – имя иконки, в которую превращается окно при минимизации. Иконку загружают функцией LoadIcon(hInstance, (LPCTSTR)IDI_LABRAB_1).

  7. hCursor – задаёт вид курсора мыши при его прохождении над окном.

  8. hbrBackground – задаёт дескриптор кисти закрашивания окна.

  9. lpszMenuName – имя ресурса главного меню для окон этого класса. Если задать NULL, то окна этого класса не будут иметь меню.

wcex.lpszMenuName = (LPCTSTR)IDC_LABRAB_1;

  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 – дочернее окно и др.