Новые возможности в WinAPI на Windows 11

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

С выходом новой операционной системы, у Microsoft изменились приоритеты в дизайне - теперь у интерфейса появились анимации, да и в целом он стал менее острым. В данной статье я поделюсь некоторыми фишками, с которыми столкнулся в процессе работы с WinAPI.

Все параметры в этой статье появились с выходом сборки 22000. И используются с помощью DWM, вызывая функцию DwmSetWindowAttribute.

Оформление Mica

Пример дизайна Mica с сайта Microsft
Пример дизайна Mica с сайта Microsft

Mica - это новый стиль в Windows 11, пришедший на замену Fluent. По словам Microsoft, он разрабатывался так, что бы дать пользователю максимальную производительность. В отличие от своего предшественника, Mica можно включить в WinApi приложениях без особых костылей.

Сделать это можно, используя переменную, которая официально не задокументирована - DWMWA_MICA_EFFECT. Она имеет значение 1029.

Вот как его использовать на практике:

#define DWMWA_MICA_EFFECT DWORD(1029);	// Mica

int useMica = 1;
DwmSetWindowAttribute(hwnd, DWMWA_MICA_EFFECT, &useMica, sizeof(int));
Эффект Mica на окне WPF
Эффект Mica на окне WPF

К сожалению, Microsoft сообщили, что в будущих релизах Windows данный способ работать не будет.

Поэтому, начиная со сборки 22523, на смену пришёл другой способ, с небольшим бонусом в виде новых стилей:

const auto DWMSBT_DISABLE 				= 1 // Default
const auto DWMSBT_MAINWINDOW 			= 2 // Mica
const auto DWMSBT_TRANSIENTWINDOW = 3 // Acrylic
const auto DWMSBT_TABBEDWINDOW 		= 4 // Tabbed

DwmSetWindowAttribute(hwnd, 
                      DWMWA_SYSTEMBACKDROP_TYPE, &DWMSBT_MAINWINDOW,
                      sizeof(int));

Параметр не имеет ограничений по использованию, поэтому его можно натянуть на любое окно. (Этим воспользовались в Microsoft, и наконец немного изменили дизайн проводника)

Для C#, например, существует несколько библиотек, нацеленных на симулирование элементов управления из Mica в WPF.

WPF приложение с дизайном Mica
WPF приложение с дизайном Mica

Изменение цвета окна

Продолжаем список изменений в Dwm... Следующим идёт небольшой набор параметров для изменения цвета заголовка, текста на нём, и границ самого окна.

  • DWMWA_CAPTION_COLOR - Цвет заголовка

  • DWMWA_TEXT_COLOR - Цвет текста в заголовке

  • DWMWA_BORDER_COLOR - Цвет границы окна

Вот небольшой пример использования:

#define DWMWA_BORDER_COLOR DWORD(34)
#define DWMWA_TEXT_COLOR DWORD(36)
#define DWMWA_CAPTION_COLOR DWORD(35)

auto caption = RGB(45, 80, 45);
auto text = RGB(20, 180, 180);
auto border = RGB(255, 0, 0);
DwmSetWindowAttribute(hwnd, DWMWA_CAPTION_COLOR, &caption, sizeof(COLORREF));
DwmSetWindowAttribute(hwnd, DWMWA_TEXT_COLOR, &text, sizeof(COLORREF));
DwmSetWindowAttribute(hwnd, DWMWA_BORDER_COLOR, &border, sizeof(COLORREF));
Пример использования цветов окна
Пример использования цветов окна

В результате может получиться такой вот кошмар дизайнера...

Кстати, это нововведение уже долгое время использует десктопный клиент Telegram.

Стоит сказать, что до появления всех этих параметров, приходилось создавать своё оформление окна, рисовать кнопки, накидывать на это обработку сообщения WM_NCHITTEST, а так же решать проблемы с анимацией Aero... В общем, жить стало проще.

Закругление окна

Вам не нравятся новые закруглённые окна в Windows 11? Тогда у Microsoft есть решение - параметр DWMWA_WINDOW_CORNER_PREFERENCE!

У него есть целых три значения:

  • 0/2 - Обычный

  • 3 - Чуть закруглённый

  • 1 - Квадратный

#define DWMWA_WINDOW_CORNER_PREFERENCE DWORD(33);

const auto DWMWCP_DONOTROUND = 1;		// Rectangular
const auto DWMWCP_ROUND = 2;				// Default
const auto DWMWCP_ROUNDSMALL = 3;		// Semi-rounded

DwmSetWindowAttribute(hwnd, 
                      DWMWA_WINDOW_CORNER_PREFERENCE, &DWMWCP_DONOTROUND,
                      sizeof(int));
Сравнение закруглений: Квадратный, Обычный, Чуть круглый
Сравнение закруглений: Квадратный, Обычный, Чуть круглый

Возможно, этот параметр был добавлен Microsoft для личного использования. Ведь если развернуть окно на половину или четверть экрана, то его углы так же станут квадратными.

Заключение

Это не все нововведения в кастомизации внешнего вида окон. "За кадром" остались параметры для изменения толщины границы, и отзеркаливания всего окна. Но это очень специфические возможности, о которых я решил не рассказывать.

Надеюсь, для кого-то эта статья окажется полезной.

Источник: https://habr.com/ru/post/658067/


Интересные статьи

Интересные статьи

Обзор на лучших функций, включенных в последнюю итерацию Python. Пришло время, выход новой версии Python неизбежен. Сейчас она в бета-версии (3.9.0b3), но скоро мы увидим полну...
В данной статье мы продолжаем рассказывать про работу с Windows Server Core 2019. В прошлых постах мы рассказали как готовим клиентские виртуальные машины на примере нашего нового тарифа VDS Ultr...
Под недорогим VPS чаще всего понимают виртуальную машину, работающую на GNU/Linux. Сегодня мы проверим, есть ли жизнь на Марсе Windows: в список тестирования попали бюджетные предложения отечеств...
В комментариях к недавней статье вы задали много вопросов по поводу новой версии нашего Windows Terminal. Сегодня постараемся ответить на некоторые из них. Под катом приведены некоторые из наи...