Регистрация класса окна
Во-первых, сразу стоит сказать, что класс окна это не класс C++, а скорее структура данных используемая внутри ОС Windows. В Windows-приложении, каждое создаваемое окно должно быть связано с классом окна, даже если программа создает всего один экземпляр окна. Окна регистрируются во время выполнения программы. Для этого нужно создать и заполнить структуру WNDCLASS.// Register the window class.
const wchar_t CLASS_NAME[] = L"Sample Window Class";
WNDCLASS wc = { };
wc.lpfnWndProc = WindowProc;
wc.hInstance = hInstance;
wc.lpszClassName = CLASS_NAME;
Необходимо установить значения следующим членам структуры:
- lpfnWndProc - указатель на определенную приложением функцию, называемой процедурой окна или оконной процедурой.
- hInstance - дескриптор экземпляра приложения, полученный из функции WinMain
- lpszClassName - строка, которая определяет имя класса окна.
Далее необходимо передать созданную структуру WNDCLASS функции RegisterClass. Она зарегистрирует окно в ОС.
RegisterClass(&wc);
Создание окна
Для создания окна используется функция CreateWindowEx.
HWND hwnd = CreateWindowEx(
0, // Optional window styles.
CLASS_NAME, // Window class
L"Learn to Program Windows", // Window text
WS_OVERLAPPEDWINDOW, // Window style
// Size and position
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, // Parent window
NULL, // Menu
hInstance, // Instance handle
NULL // Additional application data
);
if (hwnd == NULL)
{
return 0;
}
Как мы видим она принимает много параметров. Рассмотрим их.
- Необязательные дополнительные параметры (например, прозрачность), установка 0 означает параметр по умолчанию.
- CLASS_NAME имя класса окна, зарегистрированного выше
- Текст заголовка окна.
- Стиль окна, определяемый набором флагов. Флаг WS_OVERLAPPENDWINDOW это наиболее распространенное окно с заголовком, границей, поддержкой системы меню и кнопки свертывания и развертывания.
- Далее идут 4 параметра определяющие размер и позиция окна. Для позиционирования по умолчанию ставим везде CW_USEDEFAULT.
- Родитель окна, если это окно верхнего уровня устанавливаем NULL
- Меню окна. В данном случае меню не используется ставим NULL
- Дескриптор обработчика переданным функции WinMain
- Указатель на произвольные типы данных, установим в NULL
CreateWindowEx возвращает дескриптор нового окна или NULL, если окно создать не удалось.
Для отображения окна, вызываем функцию ShowWindow.
ShowWindow(hwnd, nCmdShow);
Параметр hwnd это дескриптор окна возвращенный функцией CreateWindowEx. Параметр nCmdShow может быть использован для минимизации или максимизации окна. ОС передает этот параметр в функцию WinMain
Комментариев нет:
Отправить комментарий