Wintoastは、C ++で書かれた軽くライブラリで、 Windows 8 、 Windows 10 、およびWindows 11の最新のトースト通知を完全に統合します。
トースト通知により、アプリは、新しいインスタントメッセージ、新しい友達リクエスト、速報、カレンダーイベントなど、アプリ内で表示する必要がある関連情報とタイムリーなイベントについてユーザーに通知できます。
Wintoastは、ToastTemplateType列挙で利用可能なすべての標準テンプレートを統合します。
| テンプレート | 説明 | 例 |
|---|---|---|
ImageAndText01 | 大きな画像と単一の文字列が3行のテキストに巻き付けられています。 | ![]() |
ImageAndText02 | 大きな画像、最初の行に1つの大胆なテキスト、1つの文字列の通常のテキストが2行目と3行目に巻き付けられました。 | ![]() |
ImageAndText03 | 大きな画像、最初の2行に包まれた大胆なテキストの1つ、3行目の通常のテキストの1つの文字列。 | ![]() |
ImageAndText04 | 大きな画像、最初の行に1つの太字のテキスト、2行目の通常のテキストの文字列、3行目の通常のテキストの文字列。 | ![]() |
Text01 | 3行のテキストに巻き付けられた単一の文字列。 | ![]() |
Text02 | 最初の行に1つの太字のテキスト、2番目と3行目に包まれた通常のテキストの1つの文字列。 | ![]() |
Text03 | 最初の2行に巻き付けられた1つの太字のテキスト、3行目の通常のテキストの文字列。 | ![]() |
Text04 | 最初の行に1つの太字のテキスト、2行目の通常のテキストの1つの文字列、3行目の通常のテキストの文字列。 | ![]() |
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 ;
};通知コンテンツの完全なドキュメントはこちら。
重要な通知、アラーム、リマインダー、および着信通話通知を作成するには、単に割り当てられたシナリオ値を使用して通常のアプリ通知を使用するだけです。シナリオは、いくつかの動作を調整して、一貫した統一されたユーザーエクスペリエンスを作成します。可能なシナリオ値は4つあります。
トースト通知が最新または有効と見なされなくなり、表示されるべきではない時間を設定します。 Windowsは、ショーに電話した直後にトースト通知を上げようとするため、このプロパティはめったに使用されません。
Windows 8.Xアプリの場合、このプロパティは、指定されたデータと時間に到達すると、アクションセンターからトースト通知を削除します。
注:デフォルトのWindowsの動作は、Windowsのアクセス設定の容易さで設定された後に自動的に通知を非表示にすることです。 Windows Action Centerの通知を長期間保存する必要がある場合は、 WinToastTemplate::setExpirationメソッドに電話する必要があります。
Microsoftスタイルのガイドラインは、アプリとシェル間の人々の一貫した表現を提供するために、円形の画像でプロファイル写真を表現することを推奨しています。ヒントクロッププロパティを円を描くように円形の作物で画像をレンダリングします。
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にすることができます。
メソッドの2番目のパラメーター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 " );
トーストが表示する時間。この属性には、次の値のいずれかを持つことができます。-システム:デフォルトシステム構成。 -ショート:デフォルトのシステム短時間構成。 -ロング:デフォルトのシステム長い時間構成。
サウンドのさまざまな動作を変更できます。-デフォルト:オーディオファイルを1回だけ再生します。 -サイレント:音をオフにします。 -ループ:トーストの存在中に与えられたサウンドをループで再生します。
WintoAstを使用すると、デフォルトのオーディオファイルを変更できます。指定されたファイルをプロジェクトリソース( MS-Appx://またはms-appdata:// pathでなければなりません)を追加し、呼び出して定義します:
WinToastTemplate::setAudioPath
デフォルトでは、Wintoastは、サポートされていないものを無視して、システムが機能をサポートするかどうかをチェックします。
Wintoastが失敗する可能性がある理由はいくつかあります。そのため、ライブラリは失敗の理由について発信者に通知します。これらは、各障害のコードです。
| wintoasterror | エラーコード | エラーメッセージ |
|---|---|---|
NoError | 0x00 | エラーなし。プロセスは正しく実行されました |
NotInitialized | 0x01 | ライブラリは初期化されていません |
SystemNotSupported | 0x02 | OSはWintoastをサポートしていません |
ShellLinkNotCreated | 0x03 | ライブラリはアプリのシェルリンクを作成できませんでした |
InvalidAppUserModelID | 0x04 | オーミは有効なものではありません |
InvalidParameters | 0x05 | ライブラリの構成に使用されるパラメーターは、無効なaumiまたはアプリ名があるため、通常は有効ではありません |
NotDisplayed | 0x06 | トーストは正しく作成されましたが、ウィントーストはトーストを表示できませんでした |
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;
}アプリユーザーモデルIDを構成します。これは、既存のヘルパーを使用して実行できます。
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;
}Shao Voon Wongは、Wintoastの使用に関する素晴らしい記事を書きました。ここで見つけることができます。
パッケージマネージャーを使用している場合、VCPKG用のポートがあります。それ以外の場合、最も簡単な方法は、ソースファイルを外部依存関係としてコピーすることです。
Windowsを使用すると、トースト通知のデフォルト動作を構成できます。これは、他のオプションタブを変更することにより、アクセス構成の容易さで実行できます。
システム構成は、音の視覚通知をオンにする際に、通知を(5秒から5分)に表示する時間を定義するのに役立ちます。