Wintoast - это слегка библиотека, написанная в C ++, которая обеспечивает полную интеграцию современных уведомлений Windows 8 , Windows 10 и Windows 11 .
Тосты уведомлений позволяют вашему приложению информировать пользователей о соответствующей информации и своевременных событиях, которые они должны видеть, и предпринять действия в вашем приложении, например, новое мгновенное сообщение, новый запрос на дружбу, новость или событие календаря.
Wintoast интегрирует все стандартные шаблоны, доступные в перечисление ToastTemplateType.
| Шаблон | Описание | Пример |
|---|---|---|
ImageAndText01 | Большое изображение и одна строка, обернутая по трем строкам текста. | ![]() |
ImageAndText02 | Большое изображение, одна строка смелого текста на первой строке, одна строка обычного текста, обернутая через вторую и третью строки. | ![]() |
ImageAndText03 | Большое изображение, одна строка жирного шрифта, обернутую через первые две строки, одна строка обычного текста на третьей строке. | ![]() |
ImageAndText04 | Большое изображение, одна строка жирного шрифта на первой строке, одна строка обычного текста на второй строке, одна строка обычного текста на третьей строке. | ![]() |
Text01 | Одиночная строка, завернутая в три строки текста. | ![]() |
Text02 | Одна строка жирного шрифта на первой строке, одна строка обычного текста, обернутая через вторую и третью строки. | ![]() |
Text03 | Одна строка из жирного жирного текста, обернутая через первые две строки, одна строка обычного текста на третьей строке. | ![]() |
Text04 | Одна строка жирного шрифта на первой строке, одна строка обычного текста на второй строке, одна строка обычного текста на третьей строке. | ![]() |
Пример шаблона ImageAndText02 :
WinToastTemplate templ = WinToastTemplate(WinToastTemplate::ImageAndText02);
templ.setTextField( L" title " , WinToastTemplate::FirstLine);
templ.setTextField( L" subtitle " , WinToastTemplate::SecondLine);
templ.setImagePath( L" C:/example.png " ); Примечание. Пользователь может использовать звук системы по умолчанию или указать звук для воспроизведения, когда отображается уведомление о тосте. То же поведение для изображения уведомлений о тосте, по умолчанию Windows попытайтесь использовать значок приложения.*
Wintoast обрабатывает разные события:
Создайте свой пользовательский обработчик для взаимодействия с действиями пользователя, подкладывая интерфейс IWinToastHandler :
class WinToastHandlerExample : public IWinToastHandler {
public:
WinToastHandlerExample ();
// Public interfaces
void toastActivated () const override ;
void toastActivated ( int actionIndex) const override ;
void toastDismissed (WinToastDismissalReason state) const override ;
void toastFailed () const override ;
};Полная документация контента уведомления здесь.
Чтобы создать важные уведомления, аварийные сигналы, напоминания и входящие уведомления вызовов, вы просто используете обычное уведомление приложения со значением сценария, назначенным ему. Сценарий корректирует несколько поведений для создания последовательного и унифицированного пользовательского опыта. Есть четыре возможных значения сценария:
Установите время, после чего уведомление о тосте больше не считается текущим или действительным и не должно отображаться. Windows пытается поднять уведомления о тосте сразу после вызова Show, поэтому это свойство редко используется.
Для приложения Windows 8.x это свойство также приводит к удалению уведомления о тосте из центра действий после достижения указанных данных и времени.
ПРИМЕЧАНИЕ. Поведение Windows по умолчанию - автоматически скрывать уведомление после времени, установленного в настройках Anstoy Assoce Asmand. Если вам нужно сохранить уведомление в Центре действий Windows в течение более длительного периода времени, вы должны вызвать метод WinToastTemplate::setExpiration .
Рекомендации по стилю Microsoft рекомендуют представлять изображения профиля с круговым изображением, чтобы обеспечить постоянное представление людей по приложениям и оболочке. Установите свойство Hintcrop на круг, чтобы отобразить изображение с помощью круговой культуры.
WinToastTemplate templ = WinToastTemplate(WinToastTemplate::ImageAndText02);
templ.setTextField( L" Matt sent you a friend request " , WinToastTemplate::FirstLine);
templ.setTextField( L" Hey, wanna dress up as wizards and ride around on hoverboards? " , WinToastTemplate::SecondLine);
templ.setImagePath( L" C:/example.png " );
templ.setHintCrop(WinToastTemplate::Circle);
Образ героя - это большое изображение, которое появляется в верхней части тоста. Изображение героя необязательно и может использоваться для предоставления дополнительного контекста пользователю.
Примечание. Изображение героя не поддерживается в Windows 8.1 и Windows Phone 8.1.
WinToastTemplate templ = WinToastTemplate(WinToastTemplate::ImageAndText02);
templ.setTextField( L" Mary Anne " , WinToastTemplate::FirstLine);
templ.setTextField( L" Check out where we camped last night! " , WinToastTemplate::SecondLine);
templ.setHeroImagePath( L" C:/example.png " );
Образ героя определяется, вызывая метод WinToastTemplate::setHeroImagePath . Путь изображения может быть локальным путем файла или URI.
Второй параметр метода WinToastTemplate::setHeroImagePath - это логическое значение, которое указывает, должно ли изображение быть вставлено в уведомление о тосте.
WinToastTemplate templ = WinToastTemplate(WinToastTemplate::ImageAndText01);
templ.setTextField( L" Feature image of the day " , WinToastTemplate::FirstLine);
templ.setHeroImagePath( L" C:/example.png " , true );
Вы можете добавить свои собственные действия, этот факт позволяет вам взаимодействовать с пользователем по -другому:
WinToastTemplate templ = WinToastTemplate(WinToastTemplate::ImageAndText01);
templ.setTextField( L" New product in stock " , WinToastTemplate::FirstLine);
std::vector<std::wstring> actions;
actions.push_back( L" See more details " );
actions.push_back( L" Remind me later " );
// ...
for ( auto const &action : actions) {
templ. addAction (action);
}
WinToast::instance ()->showToast(templ, handler) 
Новое в годовщине обновления: если вам нужно ссылаться на источник вашего контента, вы можете использовать текст атрибуции. Этот текст всегда отображается ниже любых текстовых элементов, но выше встроенных изображений. В тексте используется немного меньший размер, чем стандартные текстовые элементы, чтобы помочь отличить от обычных текстовых элементов.
WinToastTemplate templ = WinToastTemplate(WinToastTemplate::Text02);
templ.setTextField( L" Mary Anne " , WinToastTemplate::FirstLine);
templ.setTextField( L" Check out where we camped last night! " , WinToastTemplate::SecondLine);
templ.setHeroImagePath( L" C:/example.png " );
templ.setAttributionText( L" Via SMS " );
Количество времени, которое тост должен отображать. Этот атрибут может иметь одно из следующих значений: - Система : конфигурация системы по умолчанию. - Коротко : Система по умолчанию короткая конфигурация. - Long : Система по умолчанию долгое время конфигурация.
Вы можете изменить различное поведение звука: - По умолчанию : воспроизводит аудиофайл только один раз. - Тихо : выключите звук. - Loop : воспроизводит данный звук в петле во время тоста.
Wintoast позволяет изменять аудиофайл по умолчанию. Добавьте данные файла в ресурсы ваших проектов ( должен быть ms-appx: // или ms-appdata: // path ) и определить его, позвонив:
WinToastTemplate::setAudioPath
По умолчанию Wintoast проверяет, поддерживают ли ваши системы функции, игнорируя не поддерживаемые.
Есть несколько причин, по которым Wintoast может потерпеть неудачу, поэтому библиотека уведомляет Caller о неудачной причине. Это код для каждой неудачи:
| Wintoasterror | Код ошибки | Сообщение об ошибке |
|---|---|---|
NoError | 0x00 | Нет ошибки. Процесс был выполнен правильно |
NotInitialized | 0x01 | Библиотека не была инициализирована |
SystemNotSupported | 0x02 | ОС не поддерживает Wintoast |
ShellLinkNotCreated | 0x03 | Библиотека не смогла создать ссылку на оболочку для приложения |
InvalidAppUserModelID | 0x04 | Ауми не является действительным |
InvalidParameters | 0x05 | Параметры, используемые для настройки библиотеки, не являются действительными обычно, потому что неверное имя AUMI или приложения |
NotDisplayed | 0x06 | Тост был создан правильно, но Wintoast не смог показать тост |
UnknownError | 0x07 | Неизвестная ошибка |
Распространенным примером использования является проверка при инициализации библиотеки или показывая уведомление о тосте. Возможный код сбоя:
WinToast::WinToastError error;
const auto succedded = WinToast::instance()-> initialize (&error);
if (!succedded) {
std::wcout << L" Error, could not initialize the lib. Error number: "
<< error << std::endl;
}
...
// Configure the template
...
const auto toast_id = WinToast::instance()-> showToast (templ, handler, &error);
if (toast_id < 0 ) {
std::wcout << L" Error: Could not launch your toast notification. Error: "
<< error << std::endl;
}Для легкого использования вы можете просто использовать доступный экземпляр Singleton.
Первый шаг, импортируйте заголовок файл wintoastlib.h в ваш проект. Вы должны проверить, поддерживается ли ваша версия Windows.
using namespace WinToastLib ;
....
if (!WinToast::isCompatible()) {
std::wcout << L" Error, your system in not supported! " << std::endl;
}Настройте идентификатор модели пользователя приложения, это можно сделать с помощью существующего помощника:
WinToast::instance ()->setAppName( L" WinToastExample " );
const auto aumi = WinToast::configureAUMI( L" mohabouje " , L" wintoast " , L" wintoastexample " , L" 20161006 " );
WinToast::instance ()->setAppUserModelId(aumi); Инициализируйте все зависимости и проверьте, успешно ли в вашей системе инициализируется Wintoast:
if (!WinToast::instance()-> initialize ()) {
std::wcout << L" Error, could not initialize the lib! " << std::endl;
} Реализуйте свой собственный обработчик действий, подкладывая интерфейс IWinToastHandler и пользовательский шаблон:
WinToastHandlerExample* handler = new WinToastHandlerExample;
WinToastTemplate templ = WinToastTemplate(WinToastTemplate::ImageAndText02);
templ.setImagePath( L" C:/example.png " );
templ.setTextField( L" title " , WinToastTemplate::FirstLine);
templ.setTextField( L" subtitle " , WinToastTemplate::SecondLine);Наконец -то покажите результаты:
const auto toast_id = WinToast::instance()-> showToast (templ, handler, &error);
if (toast_id < 0 ) {
std::wcout << L" Error: Could not launch your toast notification! " << std::endl;
}Шао Вун Вонг написал отличную статью об использовании Wintoast. Вы можете найти это здесь.
Если вы используете диспетчер пакетов, есть порт для VCPKG. В противном случае самый простой способ - копировать исходные файлы в качестве внешних зависимостей.
Windows позволяет конфигурации поведения по умолчанию тоста уведомления. Это может быть сделано в простоте конфигурации доступа , изменяя другую вкладку «Параметры» .
Конфигурация системы помогает вам определить, как долго вы хотите, чтобы уведомления появились в течение (от 5 секунд до 5 минут) как включение визуальных уведомлений для звука.