アプリケーションの初期化処理は、連載第2回で解説した内容とほぼ同じです。
今回は、スライドショー再生でタイマを利用します。タイマメッセージを処理するためのウィンドウプロシージャ「HostHookProc」関数を実装しています。また初期化処理では、以下のコードでウィンドウプロシージャを登録しています。
XRWindowCreateParams wp; ZeroMemory(&wp, sizeof(XRWindowCreateParams)); wp.Style = WS_OVERLAPPED; wp.pTitle = TEXT("SlideShow"); wp.Left = 0; wp.pHookProc = HostHookProc;
ウィンドウプロシージャ内では、ウィンドウ生成時(WM_CREATE)にタイマを設定します。Win32 APIの「SetTimer」関数を呼び出し、6秒ごとにタイマメッセージが発生するようにしています。
case WM_CREATE: ulStyle = ::GetWindowLong(hwnd, GWL_STYLE); ulStyle = ulStyle & ~ulStyle; ::SetWindowLong(hwnd, GWL_STYLE, ulStyle); g_nTimer = ::SetTimer(hwnd, NUM_TIMER_ID, 6000, NULL);
ウィンドウプロシージャ内のタイマメッセージのハンドリング部分では、「GetNextFileName」関数を呼び出し、次に表示する画像ファイル名を取得します。GetNextFileName関数内では、Win32 APIのFindFirstFile、FindNextFile APIを利用してSDメモリ内のPNGファイルを検索します。
次に、「GetSource」関数を利用し、XAMLファイル作成時に追加したImage1とImage2のイメージオブジェクトを取得します。
case WM_TIMER: if (wParam == NUM_TIMER_ID) { (中略) GetNextFileName(g_szCurrentFileName, szNextFileName); (中略) if(FAILED(result=g_btnImage1->GetSource(&pBitmapImage1))) (中略) if(FAILED(result=g_btnImage2->GetSource(&pBitmapImage2))) (中略)
Image1には、前回表示していた画像が割り当てられていますので、Image2に現在表示している画像ファイルのパスを取得するため、「GetUriSource」関数を呼び出します。
取得した画像ファイルのパスをImage1のイメージオブジェクトに設定するため、「SetUriSource」関数を呼び出します。Image2には、次の画像イメージを割り当てるため、GetNextFileName関数から取得した次のファイルパスを指定し、SetUriSource関数を呼び出します。最後にアニメーションを再生するため、「Begin」関数を呼び出します。
pBitmapImage2->GetUriSource(&bstrImageName); if(FAILED(result=pBitmapImage1->SetUriSource(bstrImageName))) (中略) if(FAILED(result=pBitmapImage2->SetUriSource(szNextFilePath))) (中略) g_pStoryboard1->Begin();
続いて、連載第2回の「3. Visual Studio 2005でWCEアプリケーションを作成」の注釈に記載している「sources」ファイルの編集を行います。また、OSイメージにSlideShowアプリケーションを追加するため、ソリューションエクスプローラの「パラメータファイル」―「ConnectCore MX51 Wi-MX51:ARMV4I」―「project.bib」を選択し、以下の設定を追加します。なお、「default.png」は、SlideShowアプリケーションで最初に表示する画像ファイルです(黒色の背景画像など適当なPNGファイルを用意してください)。
MODULES SlideShow.exe $(_FLATRELEASEDIR)\SlideShow.exe NK FILES Page.xaml <開発環境のフルパス>\Page.xaml NK default.png <開発環境のフルパス>\default.png NK
Visual Studio 2005の[ビルド]―[詳細なビルドコマンド]―[現在のBSPおよびサブプロジェクトのビルド]を選択します。
ビルドが完了したら、ビルド後に生成された「nk.image」と、スライドショーで再生したい複数のPNGファイルをSDメモリに格納します。
そして、ConnectCore Wi-i.MX51のSDメモリスロットにSDメモリを挿入し、電源を投入します。Windows Embedded CE 6.0 R3が起動したら、ファイルエクスプローラから「\windows\SlideShow.exe」を起動します。すると、以下のような画面が表示されるはずです(画像6)。
たった150行程度のソースコードで、ここまでのアプリケーションが簡単に作成できます。いかがでしょうか。ConnectCore Wi-i.MX51のパフォーマンスを生かし、Silverlight for Windows Embeddedの描画も滑らかに動いているかと思います。
Blend2を利用し、さまざまな効果を追加したり、Visual Studio上でソースコードを変更し、アプリケーションの内部処理を追加したりすることが可能です。例えば、スライドショーアニメーションにImageコントロールの回転効果を与えることや、FindFirstFile関数の検索条件を増やし、さまざまな画像フォーマットに対応するのもよいかもしれません。今回の内容を参考にぜひチャレンジしてみてください!
Copyright © ITmedia, Inc. All Rights Reserved.