2006年02月20日

シンビアンCEO、「FOMA F900iTもSymbianを採用」

6月3日、英Symbian CEO(最高経営責任者)のデビッド・レビン氏が来日し、Symbian OSの現状と取り組みについて紹介した。

 Symbianは携帯機器向けの高機能OSを開発している企業。NokiaやSamsungのほか、松下電器産業やSony Ericssonなども出資している。

 2000年にEricssonがSymbian OSを搭載した携帯電話を発売したのをきっかけに、現在では世界の携帯電話ベンダーの約85%が顧客であるという。 レビン氏によると「2003年12月にSymbian OS搭載電話機の出荷台数が月間100万台を超えた」といい、現在までの総出荷台数は1200万台以上とのことだ。
Symbian OSを搭載したNTTドコモのFOMA F900iT。タッチパネルやBluetooth機能を搭載している

 国内ではNTTドコモが2003年9月に同社と契約を結び、FOMA用のOSとして採用することを決定している。なかでもSymbian OSへの取り組みを積極的に進めているのが富士通で、今までにF2051、F2102V、F900iにおいてSymbian OSを搭載していた。

 レビン氏によると、NTTドコモが6月1日に発表したBluetooth機能搭載のF900iTにもSymbian OSが採用されているという。「Symbianの採用によって、端末の開発サイクルが速くなっている」(レビン氏)。日本法人のシンビアン代表取締役社長久晴彦氏の話によれば、富士通ではSymbian OSに対応するためにF2051の開発には1年以上かかったものの、その後の開発期間は半年程度に短縮しているという。

 「Symbianは携帯端末にカーネルなど共通部分の技術を提供する。これにより、携帯端末ベンダーは製品の差別化となる部分に注力することができる」(レビン氏)

 国内ベンダーとしては、ソニーエリクソンが欧米向けのGSM端末「P900」でSymbian OSを採用しているほか、松下電器もGSM端末「X700」を提供している。また、三菱電機はFOMA向けにSymbian OS搭載端末を開発中という。

 携帯電話向けの高機能OS市場は、Microsoftがねらっている分野でもある。この点についてレビン氏は、Microsoftに対する3つの優位性を挙げる。「第1に、我々は端末ベンダーが差別化を実現するような余地を提供している。第2に、Symbianは携帯端末向けというDNAを持っている。携帯電話にCtrl+Alt+Deleteボタンを付けて欲しいと思ったことはない。第3に、我々はオープンで透明性の高い事業モデルを採用しており、すべてのベンダーと同じ契約を結んでいる。したがって、当然ライセンス料もみな同じ価格だ」(レビン氏)

 NECなどが採用を進めているLinuxについては、「Linuxは統一バージョンがなく、それぞれのベンダーがそれぞれの市場で製品を出している。したがって、統一バージョンのLinux携帯電話というものもない」とした。

 高機能携帯電話と競合することになるPDAの今後については、「PDAは死に向かっている。まもなく死んでしまうだろう」と発言。「ソニーエリクソンの端末のように、PDAの機能を携帯電話に組み込んでしまう方法が正解ではないか」とした。なお、PDAに関しては、先日ソニーが日本以外での撤退を発表している。
posted by シンビアン at 20:02| Comment(0) | TrackBack(0) | NOKIA SMARTPHONE HACKS | このブログの読者になる | 更新情報をチェックする

Symbian OS とは

「Symbian OS」は英Symbian社が開発し、様々なメーカーにライセンスしているOSです。同社は、携帯電話関連においてはノキア、モトローラ、サムスン、ソニー・エリクソン・モバイルコミュニケーションズといった世界の主要な携帯電話メーカーに「Symbian OS」をライセンスしており、海外では「スマートフォン」と呼ばれる多機能携帯電話に搭載されています。ちなみにSymbian自体は、エリクソン、ノキア、サイオン、モトローラ、松下通信工業などによって設立されたPSION Groupの1企業です。

 2002年現在、ソニー・エリクソン「P800」や、ノキア「Nokia 7650」「Nokia 3650」、そして「N-Gage」を含む20機種の携帯電話がSymbian OSを使って現在開発中であると公式にアナウンスされています。また、日本市場向けの端末では、富士通製の「F2051」がはじめてSymbian OSを採用しています。
posted by シンビアン at 19:59| Comment(0) | TrackBack(0) | NOKIA SMARTPHONE HACKS | このブログの読者になる | 更新情報をチェックする

ノキア、企業向け開発者支援プログラム「Forum Nokia PRO」

ノキア・ジャパンは、企業を対象とした開発者サポートプログラム「Forum Nokia PRO」を、6月から国内で開始する。同プログラムは会員制の有料プログラムで、世界市場に向けたコンテンツ制作を、開発・マーケティングなどの側面からサポートする。年会費は40万円で、申込受付は同社Webサイトにて開始されている。

 今回発表された「Forum Nokia PRO」は、2004年2月から世界各国で開始されている企業向けの開発者サポートプログラム。5月現在、世界で116社が加盟しており、テスト環境やテクニカル・サポート、ビジネス開拓、マーケティングサポート、コミュニティプログラムなどが提供される。


ノキア・ジャパン代表取締役社長 ヘイッキ・テンフネン氏
 会員となった企業は、国内に数カ所用意されている試験施設「Nokia Developer HUB」の利用が、当初は1社につき月5時間使用できる予定で、日本にいながらGSM端末のコンテンツやアプリを開発・検証できる。また、ノキアの携帯電話端末や開発者向けSDKなどがセットになった開発キットが年1回提供されるほか、無料トレーニングセッション、日本語テクニカルサポート、会員企業による交流会など、各種のサポートプログラムが提供される。

 同社は19日、都内で携帯コンテンツプロバイダを集めて「Forum Nokia PRO」に関する発表会を開催した。発表会の冒頭、壇上に上がったノキア・ジャパン代表取締役社長のヘイッキ・テンフネン氏は、同プログラムの日本市場への導入が世界各国で展開される政策の一環としながらも、日本の携帯電話市場については「モバイルコンテンツでは日本は最も進んだ市場。戦略的市場と位置づけている」とし、同プログラムを日本で導入する意気込みを語った。


ノキア・ジャパン Forum Nokia日本代表 大塚孝之氏
 続いて登壇した、同社 Forum Nokia日本代表の大塚孝之氏は、同プログラムを「トッププロバイダ向けに、世界で成功していただくために用意したプログラム」と述べ、会員企業に質の高いサポートが提供されることを説明した。発売前のプロトタイプの端末を貸し出すことが可能なことも明らかにされたほか、毎年40種類以上の新製品が世界で発売される同社製端末が、会員向けに優先的に用意されるとのこと。また、会員情報は世界各国のForum Nokiaチームで共有され、具体的な海外展開の際にも役立てられるという。

 同プログラムは、世界で1,000万台以上出荷された同社のプラットフォーム「Series 60」を中心に大きく4つのプラットフォームが扱われる予定で、国内で開発から検証までをサポートすることにより、海外投資を抑えたい企業や、これから世界市場向けのコンテンツを制作する企業にとって「海外ビジネスに対する登竜門、パスポートになる」(大塚氏)としている。
posted by シンビアン at 12:19| Comment(0) | TrackBack(3) | Forum Nokia | このブログの読者になる | 更新情報をチェックする

最新Symbian OS搭載のスマートフォン、ソニエリが発表

Sony Ericssonの新端末「P990」はSymbian OS 9.1とUIQ 3ソフトプラットフォームを搭載し、Wi-Fiネットワークにも対応。ユーザーはOpera 8でWebサイトを閲覧できる。(IDG)

 来年第1四半期に、Sony Ericsson Mobile Commnunicationsは、Symbian OS 9.1とUIQ 3ソフトプラットフォームを搭載した初のスマートフォンを発売する。同社が10月10日、明らかにした。

 この発表と同日に、Symbianの子会社UIQ Technologyは最新版ソフトプラットフォームUIQ 3向けのSDK(ソフト開発キット)を発表した。UIQ 3はSymbianをベースとしており、開発者はこれを使うと、UIQに対応した各社のスマートフォンで動作するアプリケーションを開発できる。携帯電話開発者は、それぞれの端末向けにアプリケーションを書き直したり、調整しなければならないことが多い。UIQプラットフォームはそうした作業を取り除くことを目指している。

 このSDKは、UQIの開発者コミュニティープログラムに登録し、Smartphone Showに参加した500人の開発者に提供される。Smartphone ShowはSymbianの年次カンファレンスで、10月11日から12日までロンドンで開催される。このSDKの最終版は、UIQの開発者プログラムサイトで10月26日からダウンロード提供される。

 Sony Ericssonの新端末「P990」は最新のSymbian OSを走らせるほか、UMTSとWi-Fiネットワークに対応し、2メガピクセルカメラを搭載する。ユーザーはOpera 8でWebサイトを閲覧できる。80Mバイトの内蔵メモリと64Mバイトのメモリースティックを備え、また別売りの4Gバイトメモリースティックも利用できる。

 Sony Ericssonは発表文で、発売前にこの端末を発表したのは、この端末が発売されてすぐに使えるアプリケーションを構築する時間を開発者に与えるためだと述べている。開発者はC++またはJavaでプログラムを構築できる。

 同社はこの端末をSmartphone Showで展示する予定だ。
posted by シンビアン at 11:26| Comment(0) | TrackBack(0) | NOKIA SMARTPHONE HACKS | このブログの読者になる | 更新情報をチェックする

ソケットの作成と接続

ソケットの作成と接続

 サーバ名からIPアドレスを解決した後は、そのIPアドレスに対してソケットの接続を確立します。

// ソケットの作成
TInetAddr addr ;
RSocket socket ;
addr.SetPort(80);
TInt32 addNum = TInetAddr::Cast(nameRecord.iAddr).Address() ;
addr.SetAddress( addNum );

User::LeaveIfError(socket.Open(socketServ, KAfInet, KSockStream,
KProtocolInetTcp));
socket.Connect( addr, status );
User::WaitForRequest( status );

if( status != KErrNone ){
User::Leave(KErrCouldNotConnect);
}

 TInetAddrクラスは、アドレスとポート番号をカプセル化したクラスです。このクラスのインスタンスに対して、DNSで獲得したIPアドレスと、今回用いるポート番号(80)を指定します。

 その後、TInetAddrで表されるIPアドレスとポート番号に対してRSocket::Open、RSocket::Connect関数でソケットの確立を行います。Connect関数も非同期になっておりますので、呼び出しの直後にUser::WaitForRequest関数を呼び出し、この非同期関数の実行終了を待ちます。

 Open関数での第一引数はソケットサーバのインスタンスです。第二引数以降はおそらく説明は必要ないかと思います。

HTTPのHEADメソッドの発行

 今回はHTTP/1.0のHEADメソッドを発行し、その結果を受けます。HTTPはテキストベースのプロトコルですから、単純に文字列をサーバに渡すだけです。

_LIT8(KHead, "HEAD / HTTP/1.0\n\n");
socket.Write(KHead, status);
User::WaitForRequest( status );

if( status != KErrNone ){
User::Leave(10);
}
TBuf8<256> result ;
socket.Read( result, status );
User::WaitForRequest( status );
if( status != KErrNone ){
User::Leave(KErrCouldNotConnect);
}
TBuf<256> result16 ;
result16.Copy( result) ;

 ここで注意が必要な点として、ディスクリプタの幅の問題があります。Series60ではUnicodeを用いていますが、HTTPの通信はAscii コードなどになります。したがって、通信を受けた部分では8bitのディスクリプタで受け、それを表示する段階で16bitのディスクリプタにコピーをしたものを利用しています。

最後にサンプルについて

 今回のサンプルは「コードをひとつの関数にまとめる」意味から、アクティブオブジェクトを使用しておりません。本来であれば、非同期の処理としてアクティブオブジェクトを利用する場所でも、処理の終了を同期的に待っております(User::WaitForRequest関数を使用している箇所です)。
posted by シンビアン at 11:18| Comment(0) | TrackBack(0) | Series60プログラミングテクニック | このブログの読者になる | 更新情報をチェックする

今回のサンプル

今回のサンプル「DumbBrowser」は、HTTPサーバのルートコンテキスト(「http://サーバー名/」の形式のアドレス)にHTTP/1.0のHEADメソッドを用いて通信を試みます。そのためには、以下の流れになります。

1. DNSを用いてIPアドレスを解決
2. 1で取得したIPアドレスを持つサーバに対して書き込み(“HEAD / HTTP/1.0\n\n”)
3. 2に対するサーバからのレスポンスを取得

 今回のサンプルは、こちらからダウンロード可能です(DumbBrowser.zip)。

サンプルの実行

 サンプルをダウンロードして、これまでと同様にビルドしますと、エミュレータのメニューに次のようなアイコンが追加されます(画面2)。

■ 画面2

 このアプリケーションを実行し、[オプション]→[サーバにHTTP/HEADで..]とメニューを選択しますと、次のようなダイアログが現れます(画面3)。

■ 画面3

 ここにサーバ名を入れます(プロトコル名「http://」は入れないで下さい)。例えば、「www.hicorp.co.jp」と入力すると、次のような実行結果になります。なお、実行には多少の時間がかかることがあります(画面4)。

■ 画面4

RSocketServについて

 コードの説明に入る前に、RSocketServクラスについて解説をしておきたいと思います。このクラスはプラットフォームがもつネットワーク機能へアクセスする際のハンドルになります。

 プラットフォーム側では、ネットワーク機能はSocket Serverで実現されており、このSocket Serverに対して依頼を発行するときの窓口になります。したがって以下のサンプルでも、このクラスのインスタンスは、ネットワークの接続が必要な箇所で引数で渡される使われ方をします。

DNSを用いた名前解決

 DNSを用いて名前解決を行うコードは次の通りです。

// void CDumbBrowserContainer::LoadHTMLData関数より抜粋
RSocketServ socketServ ;
RHostResolver hostResolver ;

this->iHostNameLabel->SetTextL( url );

User::LeaveIfError( socketServ.Connect() );
User::LeaveIfError( hostResolver.Open(socketServ,
KAfInet, KProtocolInetUdp) );

TNameEntry nameEntry ;
TRequestStatus status ;

// DNSによる名前解決
hostResolver.GetByName( url, nameEntry , status );
User::WaitForRequest( status );

if( status != KErrNone ){
User::Leave(KErrCouldNotConnect);
}

// 取得したIPアドレスの確認
TNameRecord nameRecord = nameEntry();

TInetAddr addr ;
TBuf<15> ipAddr;
TInetAddr::Cast(nameRecord.iAddr).Output(ipAddr);
this->iIpLabel->SetTextL( ipAddr );

 名前解決は、RHostResolverクラスが行います。RHostResolverのメンバ関数であるOpen関数の第一引数に渡すのは、ソケットサーバーであるRsocketServクラスのインスタンスになります。このクラスは名前が示す通り、IPプロトコルのエンドポイントを表すクラスになります。

 また、KafInetは使用されるIPのプロトコルがIPv4であること、KProtocolInetUdpはIPレイヤの上位のプロトコルがUDPであることを表しています。おそらく、このあたりのセッションの確立方法はUnixなどのほかのOSでネットワークプログラムを作成した経験があれば、さほど難しくないと思います。

 最後に、RSocketServ、RHostResolverクラスはやはりRクラスになっていますので、作成にはConnect関数やOpen関数など、また終了処理にはCloseなどの関数を呼び指します。LoadHTMLData関数の一番下にこの終了処理がまとめて記述されています。

 実際の名前解決は、以下のコードで行われます。

// DNSによる名前解決
hostResolver.GetByName( url, nameEntry , status );
User::WaitForRequest( status );

 GetByName関数は、非同期の処理になります。したがって、本来はアクティブオブジェクトを用いて処理を行うのが本筋になりますが、ここではコードのわかり易さを優先して、非同期の関数であるGetByNameの実行終了をUser::WaitForRequest関数で待ちます。第二引数に名前解決の結果が格納されます。最後にDNSに問い合わせた結果を画面に表示します。
posted by シンビアン at 11:11| Comment(0) | TrackBack(0) | Series60プログラミングテクニック | このブログの読者になる | 更新情報をチェックする

ネットワーク接続

いよいよ秋も深まり、皆様いかがお過ごしでしょうか? 今回は本連載の最終回として、ネットワークの接続を見ていきたいと思います。また、サンプルとしてHTTPを用いた簡単なアプリケーションを用意しました。この連載の読者の方に「TCP/IPとは」と書いても釈迦に説法になると思いますので、ネットワークの基本的な知識は既知のものとして扱います。
Series60でのTCP/IP

 Series60のAPIレベルでは、IPv4とIPv6の双方が使用可能です。また、IP over BluetoothやIrDAなども利用することが可能です。

エミュレータ上のネットワーク設定

 エミュレータ上で[tools]→[Preference]→[Ethernet Settings]と選択すると、次のような画面が現れます。また、複数のネットワークカードをもつマシンであれば、一番下に[Select the adapter to use]の項目から使用するネットワークカードを選択して下さい(画面1)。

■ 画面1

 基本的には、一番上にある「promiscuous mode」にチェックを入れて、proxyなどの設定を適切に行えば問題ないはずです。

補足:

エミュレータでは仮想ネットワークドライバを利用し、新たなIPを要求します。筆者の失敗談になりますが、普段仕事をしている環境では、DHCPがMac アドレス認証を利用して物理的な無線LANカードにひとつのIPアドレスのみを割り当てるようになっていました。エミュレータの仮想的なネットワークドライバがIPアドレスを要求しますので、どうしても上手く動作しないときは原因のひとつとして疑ってみてください。
posted by シンビアン at 10:33| Comment(0) | TrackBack(0) | Series60プログラミングテクニック | このブログの読者になる | 更新情報をチェックする

描画対象のグラフィックスディバイスの取り出しとフォントの設定

次に文字列を描画しますが、文字列の描画にはフォント情報が必要であり、フォント情報はグラフィックスディバイスクラスが管理をしています。そこで、グラフィックスディバイスのインスタンスを取得する必要があるのです。この一連の処理は、以下の形で行われています。

// 文字列の描画
CFont* iFont;
TTypefaceSupport myTypefaceSupport;
TFontSpec myFontspec(myTypefaceSupport.iTypeface.iName.Des(), 100 );

CGraphicsDevice* device= gc.Device();
User::LeaveIfError(
device->GetNearestFontInTwips(iFont, myFontspec));
gc.UseFont( iFont );

再描画のタイミング

 再描画を強制するためには、CCoeControl クラスにある DrawNow関数を呼び出します。今回のサンプルでは、以下の様に背景色を変更するときに、この関数を呼び出しています。

void CGraphicsTestContainer::ChangeBgColor()
{
if( bgColor == KRgbBlue )
bgColor = KRgbGray ;
else
bgColor = KRgbBlue ;
DrawNow();
}

ビットマップの使用について

 今回はサンプルとしては触れていませんが、ビットマップを画面に貼り付けることも可能です。ただし、注意が必要な点として、ビットマップはいわゆる Windows形式のビットマップから独自形式であるマルチビットマップ(拡張子:mbm)に変更する必要があります。最新のSDKであれば、プロジェクトの設定ファイルであるmmpファイルに使用するビットマップを記述すれば、ビルド時にマルチビットマップに変換をしてくれます。記述例としては下記のようになります。

START BITMAP graphicslab.mbm
HEADER
TARGETPATH ..\..\..\..\wins\c\system\apps\graphicslab
SOURCEPATH ..\bitmaps
SOURCE c12 background.bmp
SOURCE c12 ball.bmp
SOURCE c12 ball_mask.bmp
SOURCE c12 other_ball.bmp
SOURCE c12 other_ball_mask.bmp

 アプリケーションがビルドされると、筆者の環境では以下のパスにマルチビットマップのファイルができています。

C:\Symbian\8.0a\S60_2nd_FP2_J\epoc32\wins\c\System\
Apps\GRAPHICSLAB\graphicslab.mbm
-----
補足:筆者の環境では、以下のパスがエミュレータの
ファイルシステムのルートになっています。
-----
C:\Symbian\8.0a\S60_2nd_FP2_J\epoc32\wins

 このマルチビットマップ形式は「複数のビットマップファイルをひとつにまとめたもの」です。したがって、プログラム上で元のビットマップを取り出すには、そのインデックスを指定する必要があります。

 このインデックスの指定は、SDKディレクトリ以下のIncludeディレクトリに自動的にヘッダファイルを生成しますので、これを利用します(graphicslab.mbg:ファイル名はマルチビットマップファイル名と同一、ただし拡張子がmbgになる)。筆者の環境では以下に生成されています。

C:\Symbian\8.0a\S60_2nd_FP2_J\epoc32\include

 次回はTCP/IPを用いた通信について見ていく予定です。
posted by シンビアン at 10:32| Comment(0) | TrackBack(0) | Series60プログラミングテクニック | このブログの読者になる | 更新情報をチェックする

描画を用いた簡単なサンプル

描画を用いた簡単なサンプル

 それでは、描画の処理を用いた簡単なサンプルを見て行きましょう(GraphicsTest.zip)。今回のサンプルでは、以下の処理を行います。

1. 背景の塗りつぶし
2. 直線の描画
3. 楕円(円)の描画
4. 文字の描画

 サンプルをダウンロードしていただき、これまでと同様にビルドしていいただければ、エミュレータ上で次のようなアイコンが表示されていると思います(画面1)。


 このアプリケーションを実行すると、次のような画面になります(画面2)。


 さらにメニューから「背景色の変更」を選択すると、次のような画面になります(画面3)。


サンプルコードの確認

 描画の処理を行っているコードはGraphicsTestContainerクラスのDraw関数に記載されています。それでは、この関数の中で行われている処理を見て行きましょう。まずは、関数の処理の先頭に

void CGraphicsTestContainer::Draw(const TRect& aRect) const
{
CWindowGc& gc = SystemGc();

と書かれていると思います。これはこのアプリケーションがもっている(主に液晶画面描画用の)グラフィックスコンテキストを取得してくる部分です。SystemGC関数自体はCcoeControlクラスに定義されている関数です。

 この次には、背景や直線、楕円(円)の描画の処理が続きます。こちらの部分に関しては、コードを追っていただければ特に説明は要らないと思います。

// 背景色を現在の色に設定する。
gc.SetBrushColor( bgColor );
gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
gc.DrawRect( aRect );

// 直線を描画する
gc.SetPenColor( KRgbGreen );
gc.SetPenStyle( CGraphicsContext::ESolidPen );
gc.DrawLine( TPoint(10,10), TPoint(100,100 ) );
gc.SetPenStyle( CGraphicsContext::ENullPen );

// 描画モードを変更する。
gc.SetDrawMode( CGraphicsContext::EDrawModeOR );
gc.SetBrushColor( KRgbRed );
gc.DrawEllipse( TRect(50,50,150,150 ) );
gc.SetDrawMode( CGraphicsContext::EDrawModePEN );

-----
補足:通常の描画用APIと同様に、左上端が原点(0,0)です。

 また、楕円(円)の描画部分に関しては、描画モードをビットのORをとるように設定している点にもご注意ください。
posted by シンビアン at 10:11| Comment(0) | TrackBack(0) | Series60プログラミングテクニック | このブログの読者になる | 更新情報をチェックする

グラフィックス描画

アミューズメント系アプリケーションや、通常のコントロールでは表示できないような描画を行う場合、グラフィックスの処理がどうしても必要になります。今回はこのグラフィックスの処理を見ていきましょう。
グラフィックスディバイスとグラフィックスコンテキスト

 Series60では、Win32 APIなどのようにグラフィックス関連の操作は抽象化が行われてます。この抽象化により、単に「画面上ある点から他の点に線を引く」「矩形に塗りつぶす」といった処理を行うことができます。この抽象化を担うのが「グラフィックスディバイス」と「グラフィックスコンテキスト」です。

 グラフィックスディバイスは、描画対象を表すクラスになります。通常、描画の対象となるものは(携帯でしたら)液晶画面と考えるのが一番自然でしょう。しかし、画面のチラツキを抑えるためにダブルバッファリングを行うと、どうしてもビットマップを別途用意する必要があります。このようなビットマップへの書き込みも、ビットマップを表すグラフィックスディバイスを用います。

 これに対して、グラフィックスコンテキストは描画のための関数や制御を提供するクラスになります。よくある説明としては、

* グラフィックスディバイスは描画される紙やキャンパスにあたる
* グラフィックスコンテキストは描画する際に用いるペンや筆である

といわれることが多々ありますが、今回もこのように考えれば大丈夫です。

グラフィックスディバイス

 先に述べたとおり、グラフィックスディバイスは「描画の対象を抽象化する」ためのクラスです。しかし、液晶画面に描画するのか、ビットマップ領域に描画するのかで使用するクラスが異なってきます。

 Series60では、APIとしてC++のライブラリを利用していますので、複数クラスがある場合は当然、クラスの階層関係が考えられます。グラフィックスディバイス関連のクラス階層の頂点(つまりもっとも抽象的なクラス)がCGraphicsDeviceクラスになります。そして、各々の描画対象を表すクラスは、このCGraphicsDeviceクラスを継承する形で定義されています(図1)。

■ 図1 グラフィックスディバイスのクラス構成 (出典:NRIラーニングネットワーク 「ノキア Series 60 C++開発入門コース」より)

 CGraphicsDeviceクラスが持つメンバ関数としては以下のものがあります。つまり直感的には、描画を行う際に必要な情報を管理していると見ていただいても構わないと思います。

* ディスプレイ領域の管理
SizeInPixelsやSizeInTwipsなどの関数
* フォントの管理と取得
GetNearestFontInTwipsなどの関数
* カラーフォーマットの管理
DisplayMode関数

グラフィックスコンテキスト

 一方、グラフィックコンテキストは描画を行う際に利用するペンやブラシのようなものです。ですので、具体的な描画用関数はこのグラフィックスコンテキストクラスが持っています(図2)。

■ 図2 グラフィックスコンテキストのクラス構成 (出典:NRIラーニングネットワーク 「ノキア Series 60 C++開発入門コース」より)

 CgraphicsContext クラスが持つメンバとしては以下のものがあげられます。

* 自身が描画を行う対象であるグラフィックスディバイス
Device関数
* 文字描画に使用するフォントの選択
UseFontやDiscardFont関数
* 図形描画に使用する各種設定を行う関数
SetPenSize、SetBrushColorなどの関数
* 実際に図形/文字の描画を行う関数
DrawEllipse, DrawLine, DrawText, DrawBitmapなどの関数群

posted by シンビアン at 10:08| Comment(0) | TrackBack(0) | Series60プログラミングテクニック | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は1年以上新しい記事の投稿がないブログに表示されております。