- •2. Цикл обработки сообщений (GetMessage):
- •3. Оконная функция, назначение, параметры, обработка сообщений:
- •4. Структура оконного класса, поля, их назначение, инициализация:
- •5. Классы окон, регистрация оконного класса:
- •6. Создание экземпляра оконного класса:
- •7. Отображение окна на экране:
- •8. Управление положением и размерами окна:
- •9. Обновление оконной области на экране.
- •10. Установки фона.
- •11. Курсор приложения. Типы курсоров, их прикрепление к приложению.
5. Классы окон, регистрация оконного класса:
После инициализации класса окна его надо зарегистрировать для каждого с помощью функции RegisterClass(). В данной программе регистрация производилась с помощью функции MyRegisterClass() и требовалось зарегистрировать 3 класса MyRegisterClass(),MyRegisterClass1(),MyRegisterClass2().
ATOM MyRegisterClass1(HINSTANCE hInstance)
{
WNDCLASSEX wcex1; // Определение структуры
... // Инициализация полей структуры была приведена выше
return RegisterClassEx(&wcex1);
}
Регистрация оконного класса:
MyRegisterClass(hInstance);
MyRegisterClass1(hInstance);
MyRegisterClass2(hInstance);
6. Создание экземпляра оконного класса:
Создание экземпляров главного или дочернего окна осуществляется при помощи функции CreateWindow()
Создаём главное окно:
hWnd = CreateWindow( szWindowClass, // Имя зарегистрированного класса
szTitle, // Имя окна
WS_OVERLAPPEDWINDOW, // Стиль окна
CW_USEDEFAULT, NULL // Горизонтальная и вертикальная позиция окна
CW_USEDEFAULT, NULL // Ширина и высота окна
NULL, // Дескриптор родительского окна
NULL, // Дескриптор меню окна или идентификатора дочернего окна
hInstance, // Дескриптор приложения
NULL); // Указатель на значение, передаваемое окну
if (!hWnd)
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
Создаём дочерние окна hWnd1 и hWnd2, hWnd – родитель:
hWnd1 = CreateWindow(L"cl_1", szTitle, WS_OVERLAPPEDWINDOW | WS_CHILD | WS_CLIPSIBLINGS , 100, 80, 800, 300, hWnd, NULL, hInstance, NULL);
if (!hWnd1)
{
return FALSE;
}
ShowWindow(hWnd1, nCmdShow);
UpdateWindow(hWnd1);
hWnd2 = CreateWindow(L"cl_2", szTitle, WS_OVERLAPPEDWINDOW | WS_CHILD | WS_CLIPSIBLINGS, 600, 80, 100, 100, hWnd1, NULL, hInstance, NULL);
if (!hWnd2)
{
return FALSE;
}
ShowWindow(hWnd2, nCmdShow);
UpdateWindow(hWnd2);
У дочерних окон дескриптор дочернего окна заменяется с NULL на hWnd1 и hWnd2.
Так же идёт проверка, успешно ли созданы окна:
if (!hWnd)
{
return FALSE;
}
if (!hWnd1)
{
return FALSE;
}
if (!hWnd2)
{
return FALSE;
}
7. Отображение окна на экране:
Окно отображается при помощи функции ShowWindow():
ShowWindow(
hWnd, // Дескриптор окна
nCmdShow); // Режим отображения окна
UpdateWindow(hWnd); // Обновляет клиентскую область заданного окна
ShowWindow(hWnd1, nCmdShow);
UpdateWindow(hWnd1);
ShowWindow(hWnd2, nCmdShow);
UpdateWindow(hWnd2);
8. Управление положением и размерами окна:
Управлять положением и размерами окна можно на этапе создания при помощи параметров функции CreateWindow() и на этапе выполнения при помощи функции SetWindowPos(). Изменение размера на этапе создания:
hWnd1 = CreateWindow(L"cl_1", szTitle, WS_OVERLAPPEDWINDOW | WS_CHILD | WS_CLIPSIBLINGS ,
100, // Горизонтальная позиция верхнего угла окна
80, // Вертикальная позиция верхнего угла окна
800, // Ширина окна
300, // Высота окна
hWnd, NULL, hInstance, NULL);
Изменение размера на этапе выполнения программы:
case WM_RBUTTONDOWN:
SetWindowPos(hWnd1, HWND_TOP, 0, 0, 1000, 400, SWP_NOMOVE);
break;