« [わんくま名古屋] 第21回は 4月 14日 - Windows 8 Metro をやるよ~♪ | トップページ | Windows 8 のスタート画面って、壁紙が… »

2012年4月15日 (日)

[わんくま名古屋] 第21回: Metro サンプルコード解説 (1/3)

わんくま名古屋勉強会 #21 4/14に開催された わんくま名古屋勉強会 で、 Windows 8 の Metro スタイルアプリについて喋りました。 そのときデモしたサンプルコードについて、 ちょっと解説しておきます。

当日の資料とサンプルコードは、 こちらから。 ⇒ 勉強会などで使った資料 - わんくま勉強会 名古屋#21
Metro のサンプルコードは、 WankumaNagoya21.zip です。

ソリューションには 3つのプロジェクトが入っていますが、 この記事では、 ひとつめの Demo1 だけを。

Demo01_1a

このデモでお見せすること

  • ユーザーがファイルを指定して、ファイルの読み書き
  • ユーザーがファイルを指定せず、プログラムからファイルの書き込み
  • Windows API の利用

 
■ ユーザーに指定してもらって、ファイルの読み書き

FileOpenPicker / FileSavePicker を使います。

◆ FileOpenPicker でテキストファイルの読み込み
①のボタンを押すと、 FileOpenPicker の画面に切り替わるので、 そこでユーザーがテキストファイルを選んで OK すると、 ファイルが読み込まれて右側のテキストボックスに表示されます。

そのコードは次のようになります。

FileOpenPicker の PickSingleFileAsync() メソッドを呼び出すと、 Metro ランタイム側が管理しているファイル選択画面に切り替わり、 そこでユーザーがテキストファイルを選んで OK すると StorageFile オブジェクトが返ってきます。
StorageFile オブジェクトの OpenStreamForReadAsync() メソッドを使うと、 ファイルを読み出すことができます。

注意点:

  • StorageFile オブジェクトは、パスやファイル名のプロパティを持っていますが、パスやファイル名から StreamReader オブジェクトを作ることはできません。
  • ユーザーがファイルを選択しなかったときは、 PickSingleFileAsync() は null を返します。

 
◆ FileOpenPicker で画像ファイルの読み込み
②のボタンを押すと、前と同様にして、 今度は画像ファイルを読み込みます。
詳細は省略。

なお、 FileOpenPicker では、 File Open Picker contract に対応したアプリを通じてファイルを読み込むこともできます。(FileSavePicker も同じ)
下の画像では、 FileOpenPicker で SkyDrive アプリを通じて、 SkyDrive に置いてあるファイルが選択できる状態になっています。

Demo01_2

画面全体は FileOpenPicker のものです (濃緑の部分) が、 その中に SkyDrive アプリ (白い部分) が埋め込まれたような恰好になっています。

※ コードのほうでは StorageFile オブジェクトを通じて読み書きをしているだけです。 それはローカルファイルだと思っていると、 じつは SkyDrive 上のファイルかもしれないのです。

 
◆ FileSavePicker でテキストファイルの書き出し
③のボタンを押すと、 FileSavePicker の画面に切り替わるので、 そこでユーザーがテキストファイルを選ぶか、 ファイル名を入力して OK すると、 ファイルが書き出されます。

  • ユーザーがキャンセルしたときは、 PickSaveFileAsync() は null を返します。
  • 上書きの確認は、 FileSavePicker の中で行われます。 呼び出し側では気にする必要がありません。

 
■ ユーザーの指定によらず、プログラムからファイルを書き出す

④のボタンを押すと、ユーザーのドキュメント フォルダー (マイ ドキュメント) に AutoSaved.txt という名前でファイルを書き出そうとします。

このコードを記述しただけだと、 実行時に System.UnauthorizedAccessException が発生してしまいます。 正しく実行できるようにするには、 package.appxmanifest に次の設定が必要です。

  • Capability(「機能」)に「ドキュメント ライブラリ」
  • Declaration(宣言)に、「ファイルの種類の関連付け」(.txt)

※ Capability については、 @IT の記事 「Metroスタイル・アプリの開発者が知るべき3つのこと」(2012/03/13) でも解説しています。

 
■ Windows API の利用

⑤のボタンを押すと、 テキストボックス中のひらがながカタカナに変換されます。 ⑥のボタンでは、 逆にひらがなに変換されます。
これは、 次のように Win32 API の LCMapStringW() を呼び出しています。

警告も出ずにビルドできて、 きちんと動作します。 しかし、 Windows App Cert Kit (WACK, Windows アプリ検証キット) でチェックすると FAILED とレポートされ、 Windows Store で配布できません。

Demo01_3

WinRT だけを使っていればまず心配は無用なんでしょうが、 そうでないなら、 開発中にも頻繁に検証キットに掛けてみることをお勧めします。

|

« [わんくま名古屋] 第21回は 4月 14日 - Windows 8 Metro をやるよ~♪ | トップページ | Windows 8 のスタート画面って、壁紙が… »

プログラミング」カテゴリの記事

-プログラミング ( わんくま )」カテゴリの記事

-プログラミング ( VS2012 )」カテゴリの記事

* プログラミング ( Metro スタイル )」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: [わんくま名古屋] 第21回: Metro サンプルコード解説 (1/3):

« [わんくま名古屋] 第21回は 4月 14日 - Windows 8 Metro をやるよ~♪ | トップページ | Windows 8 のスタート画面って、壁紙が… »