WinToast is a lightly library written in C++ which brings a complete integration of the modern toast notifications of Windows 8 & Windows 10.
Toast notifications allows your app to inform the users about relevant information and timely events that they should see and take action upon inside your app, such as a new instant message, a new friend request, breaking news, or a calendar event.
WinToast integrates all standard templates availables in the ToastTemplateType enumeration.
First step, Import the header file wintoastlib.h to your project. You should check if your Windows Version is supported by the library.
using namespace WinToastLib;
....
if (!WinToast::isCompatible()) {
std::wcout << L"Error, your system in not supported!" << std::endl;
}
For an easy usage, you can just use the available singleton instance and start to configure your App User Model Id, this can be done by using the existing helper:
using namespace WinToastLib;
....
WinToast::instance()->setAppName(L"WinToastExample");
const auto aumi = WinToast::configureAUMI(L"mohabouje", L"wintoast", L"wintoastexample", L"20161006");
WinToast::instance()->setAppUserModelId(aumi);
Now is time to initialize all the dependencies and check if WinToas has been initialized successfully before starting using it:
if (!WinToast::instance()->initialize()) {
std::wcout << L"Error, could not initialize the lib!" << std::endl;
}
To manage the different user actions, you can implement your own handler, subclassing the interface IWinToastHandler
:
class WinToastHandlerExample : public IWinToastHandler {
public:
WinToastHandlerExample();
// Public interfaces
void toastActivated() const;
void toastDismissed(WinToastDismissalReason state) const;
void toastFailed() const;
};
To notify any event just configure your own toast template and launch it:
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);
if (!WinToast::instance()->showToast(templ, handler)) {
std::wcout << L"Error: Could not launch your toast notification!" << std::endl;
}
If your system support the new modern features (Version > Windows 8.1) available in Windows 10, you can add some interesting fields as:
- Actions: you can add your own actions, this fact allow you to interact with user in a different way:
WinToastTemplate templ = WinToastTemplate(WinToastTemplate::Text02);
templ.setTextField(L"Do you think this feature is cool?", WinToastTemplate::FirstLine);
templ.setTextField(L"Ofc,it is!", WinToastTemplate::SecondLine);
std::vector<std::wstring> actions;
actions.push_back(L"Yes");
actions.push_back(L"No");
for (auto const &action : actions)
templ.addAction(action);
WinToast::instance()->showToast(templ, handler)
- Attribution text: you can add/remove the attribution text, by default is empty. Use
WinToastTemplate::setAttributionText
to modify it. - Audio Properties: you can modify the different behaviors of the sound:
- Default: plays the audio file just one time.
- Silent: turn off the sound.
- Loop: plays the given sound in a loop during the toast existence.
WinToast allows the modification of the default audio file. Add the given file in to your projects resources (must be ms-appx:// or ms-appdata:// path) and define it by calling:
WinToastTemplate::setAudioPath
By default, WinToast checks if your systems support the features, ignoring the not supported ones.