それでは最後に、前回実装したHello関数の中を見てみましょう。
BREWプログラムは、基本的にGUIプログラムであるため、単なるテキスト描画であってもディスプレイ座標に対して文字を描画する処理が必要になります。
static void Hello(AEEApplet* app){ AECHAR str[] = {'H','e','l','l','o','W','o','r','l','d','\0'}; uint32 dwFlags = (IDF_ALIGN_CENTER | IDF_ALIGN_MIDDLE); // テキストを描画 IDISPLAY_DrawText(app->m_pIDisplay, AEE_FONT_BOLD, // 文字フォント str, // 表示する文字 -1, // すべて表示(-1:文字長自動計算) 0, // 描画座標X 0, // 描画座標Y NULL, // クリッピング領域(NULLは全体) dwFlags); // 描画位置 // 画面の更新 IDISPLAY_Update(app->m_pIDisplay); }
ここでのポイントは、“BREWの文字列の扱い”と“IDisplayインターフェイスの扱い”です。
ここでは、文字列を格納するために「AECHAR」という型を使っています。AECHARは、ワイド文字を格納するための型で、内部表現がすべて16bits幅で行われています(シングルバイト文字は「0x00」でパディングされます)。BREWは、マルチリンガルを想定しているため、日本の「Shift-JIS」などのマルチバイトの文字列を格納するために、このAECHARを用意しています(注5)。もちろん、「char型」を利用することもできますが、どちらを使うかはアプリケーションの内容次第になります。
実際、文字を描画している処理の部分に「IDISPLAY_」というプリフィックスが付いた関数が利用されています。これらの関数は「IDisplayインターフェイス」が提供する関数です。
IDisplayインターフェイスは、携帯電話のディスプレイを操作するために必要な表示形のインターフェイスで、BREWアプリケーションからBREW AEEに対してアクセスする際のインターフェイスとなります。このインターフェイスにより、BREWアプリケーションは携帯電話のディスプレイデバイスを直接意識することなく、ディスプレイに対しての操作を行うことができます。また、IDisplayインターフェイスは、AEEApplet構造体のメンバからアクセスできるようになっており、アプリケーション側が任意で生成する必要なく利用できます。AEEApplet構造体は、アプリケーションごとの構造体によって拡張されているため、Hello関数内でいうと「app->m_pIDisplay」という形でアクセスできるようになっています。
このIDisplayインターフェイスを利用して文字描画を行っているのが、「IDISPLAY_DrawText()」です。「IDISPLAY_DrawText()」は、引数で指定した条件で画面上にテキスト描画を行う関数です。第2引数に描画対象の文字列である“HelloWorld”を指定しています。そして、設定した描画内容をディスプレイに反映させるために、「IDISPLAY_Update()」を実行しています。
画面更新は負荷の掛かる処理であるため、プログラマが一定の処理をまとめてから画面更新ができるように、この関数が用意されています。このように、IDisplayインターフェイスを利用することにより、ディスプレイの操作を簡単に行うことができます。ちなみに、IDisplayインターフェイスはグラフィックス系の描画などにも利用され、描画処理のプログラムに多く登場するインターフェイスです。
さて、次回はこのIDisplayインターフェイスをより理解していただくという意味も込めて、“グラフィックス系のBREWプログラム”について解説していきたいと思います。ご期待ください!(次回に続く)
Copyright © ITmedia, Inc. All Rights Reserved.