最初に知っておくべきことは、Windows Phone 8 の LiveTiles は、C++ ではなく C#/.NET コードからのみ実装できるということです。ネイティブ ライブラリは LiveTiles にアクセスできないため、.NET API を使用する必要があります。
次... アプリが DirectX を使用する C++ で記述されている場合は、Direct3D 相互運用機能を備えた XAML を使用する必要があります。つまり、少なくとも 2 つの VS プロジェクトがあり、1 つは XAML/C# を使用し、もう 1 つは C++ を使用します。LiveTiles はコールバックとデリゲートを通じて更新され、C++ コンポーネントから C# XAML コンポーネントにイベントを送信します。(アプリが C#/.NET のみを使用している場合、コールバックは必要ありません)
もう 1 つ: Windows Phone で常に動作する LiveTile のタイプは、FlipTile タイプだけです。アイコン タイルを使用する場合、WP8 は通常、色を無視し、白と透明のみを表示します。
これが私の C++ コンポーネントのスニペットです。
std:string dummyStd = "test string to display";
std::wstring dummyWs.assign(dummyStd.begin(), dummyStd.end());
Platform::String^ dummy = ref new Platform::String(separatorWs.c_str());
m_d3DInterop->OnLiveTilesUpdates(dummy);
C# コンポーネントからのスニペット:
public void OnLiveTilesUpdates(String s)
{
String szTitle = "title";
String szText = s;
ShellTile oTile = ShellTile.ActiveTiles.First();
{
FlipTileData oFliptile = new FlipTileData();
oFliptile.Title = "";
oFliptile.Count = 0;
oFliptile.BackTitle = szText;
oFliptile.BackContent = szTitle;
oFliptile.WideBackContent = szTitle;
oFliptile.SmallBackgroundImage = new Uri("/Assets/Tiles/FlipTileFrontSmall.png", UriKind.Relative);
oFliptile.BackgroundImage = new Uri("/Assets/Tiles/FlipTileFrontMedium.png", UriKind.Relative);
oFliptile.WideBackgroundImage = new Uri("/Assets/Tiles/FlipTileFrontHigh.png", UriKind.Relative);
oFliptile.BackBackgroundImage = new Uri("/Assets/Tiles/FlipTileFrontMedium.png", UriKind.Relative);
oFliptile.WideBackBackgroundImage = new Uri("/Assets/Tiles/FlipTileFrontHigh.png", UriKind.Relative);
oTile.Update(oFliptile);
}
イベントとデリゲート/コールバックを使用して、コードの 2 つのスニペットをバインドする必要があることに注意してください (Direct3D 相互運用で XAML を使用する場合のみ)。また、WP8 では DrawingSurfaceBackgroundGrid には z オーダーの問題があり、SwapChainBackgroundPanel は WP8 ではサポートされていないため、レンダリングに使用するのに最適なコンポーネントは DrawingSurface であることがわかります。
PS: セカンダリ タイルに関する調査も行う必要があります。