Wintoast es una biblioteca ligera escrita en C ++ que trae una integración completa de las notificaciones de tostadas modernas de Windows 8 , Windows 10 y Windows 11 .
Toast Notifications permite a su aplicación informar a los usuarios sobre la información relevante y los eventos oportunos que deben ver y tomar medidas dentro de su aplicación, como un nuevo mensaje instantáneo, una nueva solicitud de amistad, noticias de última hora o un evento calendario.
Wintoast integra todas las plantillas estándar disponibles en la enumeración de ToastTempLateType.
| Plantilla | Descripción | Ejemplo |
|---|---|---|
ImageAndText01 | Una imagen grande y una sola cadena envuelta en tres líneas de texto. | ![]() |
ImageAndText02 | Una imagen grande, una cadena de texto en negrita en la primera línea, una cadena de texto regular envuelto en la segunda y tercera líneas. | ![]() |
ImageAndText03 | Una imagen grande, una cadena de texto en negrita envuelto en las dos primeras líneas, una cadena de texto regular en la tercera línea. | ![]() |
ImageAndText04 | Una imagen grande, una cadena de texto en negrita en la primera línea, una cadena de texto regular en la segunda línea, una cadena de texto regular en la tercera línea. | ![]() |
Text01 | Cadena única envuelta en tres líneas de texto. | ![]() |
Text02 | Una cadena de texto en negrita en la primera línea, una cadena de texto regular envuelto en la segunda y tercera líneas. | ![]() |
Text03 | Una cadena de texto en negrita envuelto en las dos primeras líneas, una cadena de texto regular en la tercera línea. | ![]() |
Text04 | Una cadena de texto en negrita en la primera línea, una cadena de texto regular en la segunda línea, una cadena de texto regular en la tercera línea. | ![]() |
Ejemplo de una plantilla de ImageAndText02 :
WinToastTemplate templ = WinToastTemplate(WinToastTemplate::ImageAndText02);
templ.setTextField( L" title " , WinToastTemplate::FirstLine);
templ.setTextField( L" subtitle " , WinToastTemplate::SecondLine);
templ.setImagePath( L" C:/example.png " ); Nota: El usuario puede usar el sonido del sistema predeterminado o especificar un sonido para reproducirse cuando se muestra una notificación de tostadas. El mismo comportamiento para la imagen de notificación de tostadas, de forma predeterminada, Windows intente usar el icono de la aplicación.*
Wintoast maneja diferentes eventos:
Cree su controlador personalizado para interactuar con las acciones del usuario subclasificando la interfaz 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 ;
};La documentación completa del contenido de notificación aquí.
Para crear notificaciones importantes, alarmas, recordatorios y notificaciones de llamadas entrantes, simplemente use una notificación de aplicación normal con un valor de escenario asignado. El escenario ajusta algunos comportamientos para crear una experiencia de usuario consistente y unificada. Hay cuatro valores de escenario posibles:
Establezca el tiempo después de lo cual una notificación de tostadas ya no se considera actual o válida y no debe mostrarse. Windows intenta aumentar las notificaciones de tostadas inmediatamente después de llamar a la exhibición, por lo que rara vez se usa esta propiedad.
Para la aplicación Windows 8.x, esta propiedad también hace que la notificación de tostadas se elimine del centro de acción una vez que se alcanzan los datos y el tiempo especificados.
Nota: El comportamiento predeterminado de Windows es ocultar la notificación automáticamente después del tiempo establecido en la configuración de facilidad de acceso de Windows. Si necesita preservar la notificación en Windows Action Center por un período de tiempo más largo, debe llamar al método WinToastTemplate::setExpiration .
Las pautas de estilo de Microsoft recomiendan representar imágenes de perfil con una imagen circular para proporcionar una representación consistente de personas en las aplicaciones y el shell. Establezca la propiedad de Hintcrop para encender la imagen con un cultivo circular.
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);
La imagen del héroe es una imagen grande que aparece en la parte superior de una notificación de tostadas. La imagen del héroe es opcional y se puede usar para proporcionar un contexto adicional al usuario.
Nota: La imagen del héroe no es compatible con Windows 8.1 y 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 " );
La imagen del héroe se especifica llamando al método WinToastTemplate::setHeroImagePath . La ruta de imagen puede ser una ruta de archivo local o una URI.
El segundo parámetro del método WinToastTemplate::setHeroImagePath es un valor booleano que especifica si la imagen debe ingresarse en la notificación de tostadas.
WinToastTemplate templ = WinToastTemplate(WinToastTemplate::ImageAndText01);
templ.setTextField( L" Feature image of the day " , WinToastTemplate::FirstLine);
templ.setHeroImagePath( L" C:/example.png " , true );
Puede agregar sus propias acciones, este hecho le permite interactuar con el usuario de una manera diferente:
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) 
Nuevo actualización del aniversario: si necesita hacer referencia a la fuente de su contenido, puede usar el texto de atribución. Este texto siempre se muestra debajo de los elementos de texto, pero por encima de las imágenes en línea. El texto utiliza un tamaño ligeramente más pequeño que los elementos de texto estándar para ayudar a distinguir de los elementos de texto regulares.
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 " );
La cantidad de tiempo que debe mostrar el tostado. Este atributo puede tener uno de los siguientes valores: - Sistema : configuración predeterminada del sistema. - Breve : Sistema predeterminado Configuración de tiempo corto. - Largo : sistema predeterminado Configuración de largo tiempo.
Puede modificar los diferentes comportamientos del sonido: - predeterminado : reproduce el archivo de audio solo una vez. - Silencioso : apague el sonido. - Loop : reproduce el sonido dado en un bucle durante la existencia de tostadas.
Wintoast permite la modificación del archivo de audio predeterminado. Agregue el archivo dado a los recursos de sus proyectos ( debe ser MS-apx: // o ms-apdata: // ruta ) y defina llamando:
WinToastTemplate::setAudioPath
Por defecto, Wintoast verifica si sus sistemas admiten las características, ignorando las no compatibles.
Hay varias razones por las que Wintoast puede fallar, por eso la biblioteca notifica a la persona que llama sobre el motivo de Fail. Esos son el código para cada falla:
| Wintoasterror | Código de error | Mensaje de error |
|---|---|---|
NoError | 0x00 | Sin error. El proceso se ejecutó correctamente |
NotInitialized | 0x01 | La biblioteca no se ha inicializado |
SystemNotSupported | 0x02 | El sistema operativo no admite wintoast |
ShellLinkNotCreated | 0x03 | La biblioteca no pudo crear un enlace de shell para la aplicación |
InvalidAppUserModelID | 0x04 | El aumi no es válido |
InvalidParameters | 0x05 | Los parámetros utilizados para configurar la biblioteca no son válidos normalmente porque un nombre o nombre de la aplicación no válido |
NotDisplayed | 0x06 | La tostada se creó correctamente, pero Wintoast no pudo mostrar la tostada |
UnknownError | 0x07 | Error desconocido |
Un ejemplo común de uso es verificar al inicializar la biblioteca o mostrar una notificación de tostadas el posible código de falla:
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;
}Para un uso fácil, puede usar la instancia de Singleton disponible.
Primer paso, importe el archivo de encabezado wintoastlib.h a su proyecto. Debe verificar si su versión de Windows es compatible con la biblioteca.
using namespace WinToastLib ;
....
if (!WinToast::isCompatible()) {
std::wcout << L" Error, your system in not supported! " << std::endl;
}Configurar su ID de modelo de usuario de su aplicación, esto se puede hacer utilizando el ayudante existente:
WinToast::instance ()->setAppName( L" WinToastExample " );
const auto aumi = WinToast::configureAUMI( L" mohabouje " , L" wintoast " , L" wintoastexample " , L" 20161006 " );
WinToast::instance ()->setAppUserModelId(aumi); Inicialice todas las dependencias y verifique si Wintoast se ha inicializado con éxito en su sistema:
if (!WinToast::instance()-> initialize ()) {
std::wcout << L" Error, could not initialize the lib! " << std::endl;
} Implemente su propio manejador de acción subclasificando la interfaz IWinToastHandler y personalizado su plantilla:
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);Finalmente muestra los resultados:
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;
}Shao Voon Wong escribió un excelente artículo sobre el uso de Wintoast. Puedes encontrarlo aquí.
Si está utilizando un Administrador de paquetes, hay un puerto para VCPKG. De lo contrario, la forma más fácil es copiar los archivos de origen como dependencias externas.
Windows permite la configuración del comportamiento predeterminado de una notificación de tostadas. Esto se puede hacer en la facilidad de configuración de acceso modificando la pestaña Otras opciones .
La configuración del sistema lo ayuda a definir cuánto tiempo desea que aparezcan notificaciones durante (5 segundos a 5 minutos) como activar las notificaciones visuales para el sonido.