Mobile:NEWS 2003年10月31日 10:42 PM 更新

BREW プログラミング入門(2)
“HelloWorld”プログラムを作ろう(3/3)


前のページ

イベントハンドラ

 ユーザーが携帯電話のキーを押したり、BREWアプレットを中断したりするたびに、BREW実行環境は HelloWorld_HandleEvent() 関数を呼び出します。このような関数を "イベントハンドラ" と呼びます。

 イベントハンドラは、2番目の引数にどのようなイベントが通知されたかを表すイベントコードを受け取ります。

たとえば、ユーザーが何かキーを押しますと、BREW実行環境は2番目の引数にEVT_KEYを指定してイベントハンドラを呼び出します。開発者はEVT_KEYイベントに対して、特定の動作を記述することで、BREWアプレットの振る舞いを実装します。

 BREWウィザードが生成したコードでは、EVT_APP_STARTイベント (アプレットが開始しましたよ〜、という通知) とEVT_APP_STOPイベント (アプレットを終了しますよ〜、という通知)に対して処理を行っています。

// // HelloWorld アプレットのイベント ハンドラ // static boolean HelloWorld_HandleEvent( IApplet * pi, // アプレット構造体が渡される AEEEvent eCode, // イベント コード uint16 wParam, // イベント パラメータ (16ビット) uint32 dwParam) // イベント パラメータ (32ビット) { switch (eCode) { case EVT_APP_START: // ここにコードを追加します。 return TRUE;

case EVT_APP_STOP: // ここにコードを追加します。 return TRUE;

default: break; } return FALSE; }

 イベント ハンドラでは、「アプレットが処理をした」イベントに対してTRUEを返し、「アプレットが処理をしない」イベントに対してFALSEを返さなければなりません。

 ここではEVT_APP_STARTイベントに対してTRUEを返すことで、BREW実行環境に対して「イベントを処理しましたよ〜」と通知しています。

 このような仕組みになっている理由は、アプレットが処理しないイベント (FALSE を返したイベント) に対して、BREW実行環境がデフォルトの処理を行うことがあるからです。

画面への描画

 それではBREWアプレットが起動したタイミングで、携帯電話の画面に文字列を表示してみましょう。

 以下のコードを見てください。分かりやすくするために、EVT_APP_STARTイベントを処理する別の関数を定義しています。

// // イベント ハンドラ // static boolean HelloWorld_HandleEvent( IApplet * pi, // アプレット AEEEvent eCode, // イベントコード uint16 wParam, // イベント パラメータ (16ビット) uint32 dwParam) // イベント パラメータ (32ビット) { switch (eCode) { case EVT_APP_START:

// ここにコードを追加します。 HelloWorld_OnAppStart((AEEApplet*) pi); return TRUE;

case EVT_APP_STOP:

// ここにコードを追加します。 return TRUE;

default: break; } return FALSE; }

// // アプレットが開始したときに呼び出される。 // static void HelloWorld_OnAppStart(AEEApplet* app) { AECHAR text[] = {'H','e','l','l','o',' ','W','o', 'r', 'l', 'd', '\0'};

// 画面ビットマップに文字列を表示する IDISPLAY_DrawText(app->m_pIDisplay, AEE_FONT_BOLD, // 太字のフォント text, // 表示する文字列 -1, // -1 = 文字列をすべて表示する 0, // 無視される 0, // 無視される NULL, // クリッピングしない IDF_ALIGN_CENTER | IDF_ALIGN_MIDDLE); // 左右中央揃え、上下中央揃え

// 更新された画面ビットマップを表示する IDISPLAY_Update (app->m_pIDisplay);

}

 描画処理の詳細については今回は説明を行いません。ここに書いたとおり、そのまま入力してくださって結構です。

 あれっ?と気づいた方おられるでしょう。HelloWorld_HandleEvent() 関数のIApplet* 引数がAEEApplet*に強制キャストされています。

 詳細は次回以降の連載で解説しますが、イベント ハンドラの第1引数には、AEEClsCreateInstance() 関数で作成したアプレット構造体が渡されます。また、アプレット構造体は IApplet 構造体を拡張した構造体でなければならず、実際AEEAppletはIAppletを拡張した形で定義されています。

 したがって、IApplet* の引数を AEEApplet* に強制キャストしても何も害はないということです。

BREWエミュレータ用にコンパイルする

 さて、すべてのソースコードの準備ができました。もう一度すべてのファイルを確認してみましょう。

ファイル説明
HelloWorld.bidHelloWorldアプレットのクラスIDを格納しているヘッダー ファイル。
HelloWorld.mifHelloWorldモジュールのメタ情報を格納しているファイル。HelloWorldアプレットの情報を含んでいる。
AEEAppGen.cBREWプロジェクトで共通に使われるソース ファイル。
AEEModGen.cBREWプロジェクトで共通に使われるソース ファイル。
HelloWorld.cHelloWorldアプレットを実装しているソース ファイル。

 コンパイルを行うには、Visual C++のメニューから [ビルド]-[ビルド] を選択します。ソースコードに誤りがなければ、正常にビルドが行われ、アウトプット ウィンドウに次のようなメッセージが表示されます。

HelloWorld.dll - エラー 0、警告 0

 HelloWorld プロジェクト フォルダのDebugサブフォルダに、HelloWorld.dllというファイルが作成されているはずです。

BREWエミュレータで実行する

 BREWエミュレータで動作させるためには、HelloWorld.dllファイルと HelloWorld.mif ファイルが必要です。この二つのファイルを次のような場所にコピーします。

C:\Applet\HelloWorld.mif
C:\Applet\HelloWorld\HelloWorld.dll

 BREWエミュレータを起動します。デフォルトではBREW SDKのExamplesフォルダにあるBREWアプレットがエミュレータ画面に表示されますので、エミュレータの読み取るフォルダをC:\Appletに変更する必要があります。

 メニューから [ファイル]-[アプレットディレクトリの変更] を選択し、[フォルダの参照] ダイアログで C:\Applet フォルダを選択して [OK] を押します。

 右図のように最初のアイコンを選択した状態で画面に "Hello World" というタイトルが表示されていれば、BREWエミュレータがMIFファイルを認識している証拠です。この段階ではアプリケーション本体である.dllは実行されていません。

 この "Hello World" というテキストは、MIFファイルの [アプレット] タブの [名前] 項目に入力したものが表示されます。

 アイコンを選択した状態でEnterを押しましょう。画面中央に太字で "Hello World" と表示されたでしょうか。

 おめでとうございます! 初めてのBREWアプリケーションを作成することができました!

※今回の記事のソースコードは、ソフィア・クレイドル のサイトからダウンロードできます。

著者紹介
倉谷智尋:ソフィア・クレイドル研究開発部チーフサイエンティスト。ソフィア・クレイドルは、2002年2月京都市にて、無限の可能性を秘めたソフトウェア職人たちが楽しく集い、自ずと自己実現が達成される場になることを目指して創業。在籍スタッフの平均年齢は20歳台前半と若いが、その大半がプログラミング歴10年以上とそのプロフェッショナリティは極めて濃い集団である。

 これまでにBREW用アプリケーションフレームワークケータイJavaプログラム圧縮技術ケータイJavaブラウザ技術、ケータイメッセンジャー技術などを総合的に研究開発し、「高品質な共通プラットフォーム」の実現を目指してきた。

ご感想、ご質問はこちら(zdnet-contact@s-cradle.com)まで。



関連記事
▼ BREW プログラミング入門(1):BREW SDKをインストールしよう
本連載は、BREWに興味がありプログラミングを始めてみたいけれど、どこから手をつけてよいか分からない方々を対象に、ステップ・バイ・ステップでBREWプログラミングを行う方法を解説していきます。

▼ Qualcomm、携帯電話向けプラットフォーム「BREW」発表──au端末に搭載
▼ “携帯電話のOS”を目指すBREW──国内でも1号機
▼ BREWとは何か?──Javaとの違い

[倉谷智尋, ITmedia]

Copyright © ITmedia, Inc. All Rights Reserved.

前のページ | 3/3 | 最初のページ



モバイルショップ

最新スペック搭載ゲームパソコン
高性能でゲームが快適なのは
ドスパラゲームパソコンガレリア!

最新CPU搭載パソコンはドスパラで!!
第3世代インテルCoreプロセッサー搭載PC ドスパラはスピード出荷でお届けします!!