連載
» 2010年11月19日 00時00分 公開

ココが変わったWindows Embedded CE 6.0 R3(5):【番外編】スライドショーアプリ開発に挑戦!! (2/2)

[松井俊訓/監修:杉本拓也(富士通ソフトウェアテクノロジーズ),@IT MONOist]
前のページへ 1|2       

サンプルコード1の解説

 アプリケーションの初期化処理は、連載第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 

OSイメージの再構築とターゲット上での実行

 Visual Studio 2005の[ビルド]―[詳細なビルドコマンド]―[現在のBSPおよびサブプロジェクトのビルド]を選択します。

 ビルドが完了したら、ビルド後に生成された「nk.image」と、スライドショーで再生したい複数のPNGファイルをSDメモリに格納します。

 そして、ConnectCore Wi-i.MX51のSDメモリスロットにSDメモリを挿入し、電源を投入します。Windows Embedded CE 6.0 R3が起動したら、ファイルエクスプローラから「\windows\SlideShow.exe」を起動します。すると、以下のような画面が表示されるはずです(画像6)。

サンプルアプリケーションの実行 画像6 サンプルアプリケーションの実行


 たった150行程度のソースコードで、ここまでのアプリケーションが簡単に作成できます。いかがでしょうか。ConnectCore Wi-i.MX51のパフォーマンスを生かし、Silverlight for Windows Embeddedの描画も滑らかに動いているかと思います。

 Blend2を利用し、さまざまな効果を追加したり、Visual Studio上でソースコードを変更し、アプリケーションの内部処理を追加したりすることが可能です。例えば、スライドショーアニメーションにImageコントロールの回転効果を与えることや、FindFirstFile関数の検索条件を増やし、さまざまな画像フォーマットに対応するのもよいかもしれません。今回の内容を参考にぜひチャレンジしてみてください!

前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.