(57)【要約】  特にリソースが制限されたセットトップボックス環境おける使用のために適合されているシステムが説明される。システムは、特にセットトップボックス環境における使用のために構成されたインタープリタベースの共通言語ランタイム（ＣＬＲ）を使用する。また、システムは、特にセットトップボックス環境における使用のために構成された独特なアプリケーションマネージャおよびＵＩｐａｎｅマネージャを含む。アプリケーションマネージャは、別のアプリケーションが現在のアプリケーションのユーザインターフェースの表示を妨げるユーザインターフェースの表示をもたらすときに現在のアプリケーションを中断する。さらに、システムは、ユーザがカラーパレットおよび解像度を変更することなどを可能にするために遷移効果などを提供するグラフィックス機能を含む。グラフィックス機能は、可能なときはいつでもセットトップボックスのグラフィックス機能（セットトップボックスのライン制御レジスタなど）を直接使用して、アプリケーションがより高速に実行されることを可能にする。
2008536384.tif 000002
【特許請求の範囲】
【請求項１】
セットトップボックスシステムによって提供されるハードウェア機能を表すハードウェアレイヤと、
セットトップボックス環境における使用のために構成されたインタープリタベースのコアランタイムエンジンと
を含み、
前記セットトップボックスシステムは、前記ハードウェアレイヤと前記インタープリタベースのコアランタイムエンジンとを使用して機能を実行することができるアプリケーションを実行するように構成されていることを特徴とするセットトップボックスシステム。
【請求項２】
前記ハードウェア機能は５ＭＢ未満のメモリを含むことを特徴とする請求項１に記載のセットトップボックスシステム。
【請求項３】
前記セットトップボックス環境における使用のために構成された、アプリケーションを管理するためのアプリケーションマネージャをさらに含むことを特徴とする請求項１に記載のセットトップボックスシステム。
【請求項４】
前記アプリケーションマネージャは、別のアプリケーションがアクティブ化されるときに現在のアプリケーションを中断するように、および前記別のアプリケーションが非アクティブ化されるときに前記現在のアプリケーションを再開するように構成されていることを特徴とする請求項３に記載のセットトップボックスシステム。
【請求項５】
前記セットトップボックス環境における使用のために構成された、ユーザインターフェースの表示を管理するためのＵＩマネージャをさらに含むことを特徴とする請求項１に記載のセットトップボックスシステム。
【請求項６】
あるグラフィカルな表示から別のグラフィカルな表示に切り換えるときに遷移効果を提供するように構成されたグラフィックス機能をさらに含むことを特徴とする請求項１に記載のセットトップボックスシステム。
【請求項７】
前記遷移効果は、デシメーション、フェーディング、スクロール、および露出のうちの１つまたは複数を含むことを特徴とする請求項６に記載のセットトップボックスシステム。
【請求項８】
グラフィカルな表示のカラーパレットを変更するように構成されたグラフィックス機能をさらに含むことを特徴とする請求項１に記載のセットトップボックスシステム。
【請求項９】
グラフィカルな表示の解像度を変更するように構成されたグラフィックス機能をさらに含むことを特徴とする請求項１に記載のセットトップボックスシステム。
【請求項１０】
フォントファイルから情報を取り除くことによってフォント処理を簡素化するように構成されたグラフィックス機能をさらに含むことを特徴とする請求項１に記載のセットトップボックスシステム。
【請求項１１】
フォントに対するアンチエイリアシングを提供するように構成されたグラフィックス機能をさらに含むことを特徴とする請求項１に記載のセットトップボックスシステム。
【請求項１２】
前記ハードウェア機能は、ディスプレイデバイスのそれぞれのラインに対応する記憶域を提供するライン制御レジスタ（ＬＣＲ）を含み、
前記セットトップボックスシステムは、前記ＬＣＲを操作することによってグラフィックス効果を提供するように構成されたグラフィックス機能をさらに含む
ことを特徴とする請求項１に記載のセットトップボックスシステム。
【請求項１３】
制限された量のリソースを有するセットトップボックスシステムであって、
前記セットトップボックスシステムによって提供されるハードウェア機能を表すハードウェアレイヤと、
セットトップボックス環境における使用のために構成されたインタープリタベースの処理モジュールと
を含み、
前記ハードウェア機能は、ディスプレイデバイスのそれぞれのラインに対応する記憶域を提供するライン制御レジスタ（ＬＣＲ）を含み、
前記セットトップボックスシステムは、前記ＬＣＲを操作することによってグラフィックス効果を提供するように構成されたグラフィックス機能をさらに含む
ことを特徴とするセットトップボックスシステム。
【請求項１４】
請求項１３に記載のセットトップボックスシステムを実装するための命令を含むことを特徴とする１つまたは複数の機械可読媒体。
【請求項１５】
現在のアプリケーションをロードおよび初期化することと、
セットトップボックス環境における使用のために構成されたインタープリタベースの処理モジュールを使用して前記現在のアプリケーションを実行することと、
前記現在のアプリケーションのユーザグラフィックス表示を妨げる別のアプリケーションがアクティブ化されるときに前記現在のアプリケーションを中断することと、
前記別のアプリケーションが非アクティブ化されるときに前記現在のアプリケーションを再開することと、
終了イベントの発生と同時に前記現在のアプリケーションを終了することと
を含むことを特徴とする、リソースが制限されたセットトップボックス環境においてアプリケーションを実行する方法。
【請求項１６】
前記初期化することは前記アプリケーションのためのメッセージスレッドを確立することを含むことを特徴とする請求項１５に記載の方法。
【請求項１７】
あるグラフィックス表示から別のグラフィックス表示に切り換えるときに遷移効果を提供することをさらに含むことを特徴とする請求項１５に記載の方法。
【請求項１８】
あるグラフィックス表示から別のグラフィックス表示に切り換えると同時にパレットおよび解像度のうちの１つまたは複数を変更することをさらに含むことを特徴とする請求項１５に記載の方法。
【請求項１９】
請求項１５に記載の方法を実行するための命令を含むことを特徴とする１つまたは複数の機械可読媒体。
【請求項２０】
請求項１５に記載の方法を実行するように構成された論理を含むことを特徴とするセットトップボックスシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、リソースが制限されたセットトップボックス環境などのリソースが制限された環境においてアプリケーションを開発および実行することに関する。
【背景技術】
【０００２】
セットトップボックスは、ソース（ヘッドエンド配信サイトなど）からメディア情報を受信し、メディア情報を処理し、処理されたメディア情報を出力デバイス（従来のテレビジョンユニットなど）上に表示する。既存のおよび将来のテレビジョンセットトップボックスがより多用途に使用できて魅力的なアプリケーションを実行することを可能にする機能を提供することに対する増大しつつある要求がある。例示的なアプリケーションは、ゲームアプリケーション、ビデオオンデマンド（ＶＯＤ）および電子番組案内（ＥＰＧ）アプリケーション、ニュース表示アプリケーションなどを含む。
【０００３】
セットトップボックスの多用途性を向上することに対する１つのアプローチは、セットトップボックスのプラットフォームに「完全な」デスクトッププログラミング環境の機能を複製することである。今日使用されている１つの例示的なフレームワークは、Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎの．ＮＥＴ  Ｆｒａｍｅｗｏｒｋである。．ＮＥＴ技術は、概してプログラムの実行を実施するために使用される物理的プラットフォームにおける根本的な複雑性に影響されないやり方でプログラムを実行するためのバーチャルマシン（ＶＭ）環境を提供する。概観として、．ＮＥＴ  Ｆｒａｍｅｗｏｒｋは、ソースコード（例えばＣ＃のソースコード）を中間言語（ＩＬ）コードおよびメタデータに変換するためのコンパイラを使用する。実行フェーズにおいて、．ＮＥＴ  Ｆｒａｍｅｗｏｒｋは、共通言語ランタイム（ＣＬＲ）ローダおよびジャストインタイム（ＪＩＴ）コンパイラを使用してＩＬおよびメタデータを特定の実行プラットフォームに固有のネイティブコードに変換する。
【０００４】
その他の技術が、リソースが制限されたコンピューティングデバイスにおける使用のための上述のバーチャルマシンの原理を拡張する。（リソースが制限された環境におけるジャストインタイムコンパイラの使用を採用するそのような技術は、本明細書においては「コンパクトなＪＩＴベースの技術」と呼ばれる。例えば、Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎの．ＮＥＴ  Ｃｏｍｐａｃｔ  Ｆｒａｍｅｗｏｒｋ（．ＮＥＴ  ＣＦ）は、リソースが制限されたコンピューティングデバイスに用いるために上述の「完全な」．ＮＥＴ  Ｆｒａｍｅｗｏｒｋを適合させる。そのようなコンパクトなＪＩＴベースの技術は、共通言語ランタイム（ＣＬＲ）の完全な．ＮＥＴ  Ｆｒａｍｅｗｏｒｋアーキテクチャを継承することができ、．ＮＥＴ  Ｆｒａｍｅｗｏｒｋのクラスライブラリのサブセットをサポートし、．ＮＥＴ  ＣＦ専用に設計されたクラスを含む。動作中、そのようなコンパクトなＪＩＴベースの技術は、ＪＩＴコンパイラを使用して中間言語の命令を実行することができる。サポートされるデバイスは、携帯情報端末（ＰＤＡ）（ポケットＰＣなど）と、携帯電話と、一部のセットトップボックスと、自動車用コンピューティングデバイスと、特別に設計された組み込みデバイスとを含む。概して、そのようなコンパクトなＪＩＴベースの技術（．ＮＥＴ  ＣＦなど）は、少なくとも８〜１６ＭＢのＲＡＭを備えたシステムに対して最適に設計される。
【０００５】
【非特許文献１】David Chappell, Understanding .NET: A Tutorial and Analysis, Addison-Wesley publishers, 2002
【非特許文献２】David S. Platt, Introducing Microsoft .NET, Microsoft Press, 2003
【非特許文献３】"What are Set-top Boxes"
【非特許文献４】Donald Thomson, "Smart Personal Object Technology (SPOT): Part I: An introduction to hardware, network, and system software."
【発明の開示】
【発明が解決しようとする課題】
【０００６】
上述のコンパクトなＪＩＴベースの技術は、多くの種類のセットトップボックスにおいて実行可能な解決策を提供する。しかし、この技術は、特に制限された量のリソースを有するセットトップボックスなどの全てのセットトップボックスにおける使用に関して十分に満足できるものではない。例えば、イリノイ州ＳｃｈａｕｍｂｕｒｇのＭｏｔｏｒｏｌａ  Ｉｎｃ．により供給される人気の高いＤＣＴ２０００セットトップボックスは、２７ＭＨｚのＣＰＵと制限された量のメモリ（例えば、１．５ＭＢのＲＡＭおよび１．２５ＭＢのフラッシュメモリ）とを含む。これらのリソースは、そのプラットフォーム上でコンパクトなＪＩＴベースのアプリケーションを実行するための最適なプラットフォームを提供しない。例えば、従来の．ＮＥＴ環境で使用されるＪＩＴは、元のＩＬのアセンブリと「ＪＩＴ化された」ネイティブコードとを両方ともメモリ内に保持する必要がある。この要件は、リソースが制限されたセットトップボックスのメモリリソースを酷使する可能性がある。さらに、ＪＩＴベースの技術は、全てのマネージコードを実行するのに先立ってその全てのマネージコードをＪＩＴコンパイルすることによって機能する。この手続きは、アプリケーションを起動するときに望ましくない遅延をもたらす。
【０００７】
上で確認された要因の結果として、厳しくリソースが制限されたセットトップボックスに対するコンパクトなＪＩＴベースの技術の使用は低い性能をもたらす。例えば、この解決策は、アプリケーションが許容できないほど低速に実行される原因となる可能性がある。この解決策は、いくつかの新しいアプリケーションの機能の開発を明らかに妨げる可能性もある。
【０００８】
少なくとも上で確認された理由によって、リソースが制限されたセットトップボックス、およびその他のリソースが制限された環境でアプリケーションを開発および実行するためのより十全なシステムに対する典型的なニーズが存在する。
【課題を解決するための手段】
【０００９】
１つの例示的な実装によれば、セットトップボックスによって提供されるハードウェア機能を表すハードウェアレイヤと、セットトップボックス環境における使用のために構成されたインタープリタベースのコアランタイムエンジン（ｃｏｒｅ  ｒｕｎｔｉｍｅ  ｅｎｇｉｎｅ）（例えば、インタープリタベースの共通言語ランタイム）とを含むセットトップボックスシステムが本明細書において説明される。セットトップボックスシステムは、ハードウェアレイヤとインタープリタベースのコアランタイムエンジンとを使用して機能を実行することができるアプリケーションを実行するように構成される。
【００１０】
別の例示的な特徴によれば、セットトップボックスシステムは、５ＭＢ未満のメモリを含む。
【００１１】
別の例示的な特徴によれば、セットトップボックスシステムは、セットトップボックス環境における使用のために構成された、アプリケーションを管理するためのアプリケーションマネージャをさらに含む。
【００１２】
別の例示的な特徴によれば、アプリケーションマネージャは、別のアプリケーションがアクティブ化されるときに現在のアプリケーションを中断するように、およびその別のアプリケーションが非アクティブ化されるときに現在のアプリケーションを再開するように構成される。
【００１３】
別の例示的な特徴によれば、セットトップボックスシステムは、セットトップボックス環境における使用のために構成された、ユーザインターフェースの表示を管理するためのＵＩｐａｎｅマネージャをさらに含む。
【００１４】
別の例示的な特徴によれば、セットトップボックスシステムは、
１つのグラフィカルな表示から別のグラフィカルな表示に切り換えるときに遷移効果を提供する（デシメーション（ｄｅｃｉｍａｔｉｏｎ）、フェーディング、スクロール、露出（ｅｘｐｏｓｉｎｇ）など）
グラフィカルな表示のカラーパレットを変更する
グラフィカルな表示の解像度を変更する
フォントファイルから情報を取り除くことによってフォントの処理を簡素化する
フォントに対してアンチエイリアシングを提供する
のうちの１つまたは複数を実行するように構成されたグラフィックス機能をさらに含む。
【００１５】
別の例示的な特徴によれば、セットトップボックスシステムの上述のハードウェア機能は、ディスプレイデバイスの各ラインに対応する記憶域を提供するライン制御レジスタ（ｌｉｎｅ  ｃｏｎｔｒｏｌ  ｒｅｇｉｓｔｅｒ）（ＬＣＲ）を含み、セットトップボックスシステムは、ＬＣＲを操作することによってグラフィカルな効果を提供するように構成されたグラフィックス機能をさらに含む。
【００１６】
さらなる例示的な実装が以下で説明される。
【発明を実施するための最良の形態】
【００１７】
同様のコンポーネントおよび機能を参照するために開示および図の全体を通じて同じ番号を使用する。１００番台の番号は図１で初めて見られた機能を参照し、２００番台の番号は図２で初めて見られた機能を参照し、３００番台の番号は図３で初めて見られた機能を参照し、その他同様である。
【００１８】
以下の説明は、セットトップボックス環境、およびその他のリソースが制限された環境でアプリケーションを開発および実行するためのシステムについて述べる。１つの例示的な実装において、システムは、セットトップボックス環境における使用のために適合されたインタープリタベースの共通言語ランタイム（ＣＬＲ）を使用する。例えば、インタープリタベースのＣＬＲは、これに限定されないが、Ｍｉｃｒｏｓｏｆｔ  ＣｏｒｐｏｒａｔｉｏｎのＳｍａｒｔ  Ｐｅｒｓｏｎａｌ  Ｏｂｊｅｃｔｓ  Ｔｅｃｈｎｏｌｏｇｙ（ＳＰＯＴ）の機能を使用して実装されることができる。
【００１９】
改善点の中でもとりわけ、本明細書において説明されるシステムは以下の特徴を提供する。
【００２０】
・システムは、デジタルビデオレコーダ（ＤＶＲ）アプリケーション、選局に関連するアプリケーション、ペアレンタルコントロールに関連するアプリケーション、番組案内および検索アプリケーション、ビデオオンデマンド（ＶＯＤ）アプリケーション、ゲームアプリケーション、情報（例えばニュース）表示アプリケーション、投票アプリケーション、インスタントメッセンジャ（ＩＭ）アプリケーション、その他多数などのリッチアプリケーションを開発するための柔軟で効果的なフレームワークを提供する。さらに、システムは（言語の中でもとりわけ）Ｃ＃言語を使用して書かれたユーザアプリケーションをサポートする。
【００２１】
・システムは、（「完全な」．ＮＥＴ  Ｆｒａｍｅｗｏｒｋまたはその知られた簡易バージョンと比較して）セットトップボックス上でのプログラミングを簡素化するために新しい「ＴＶ」名前空間を提供する。概して、この名前空間によって参照される機能は、完全な．ＮＥＴ環境またはその簡易バージョンと比較してはるかに少ないリソースしか消費しない。同時に、システムは、．ＮＥＴ  Ｆｒａｍｅｗｏｒｋを補完するプログラミングフレームワークを使用し、プログラマが非常に少ない追加のトレーニングだけでセットトップボックスのためのプログラミングを始めることを可能にする。
【００２２】
・システムは、同時に実行される複数のアプリケーションをサポートするための独特なアプリケーションマネージャを提供する。特徴の中でもとりわけ、アプリケーションマネージャは、同時に実行される異なるアプリケーションを（たとえこれらのアプリケーションが異なるシステムカラーパレット、異なるディスプレイ解像度などを使用する可能性があったとしても）管理するための中断／再開メカニズムおよび通知フレームワークを提供する。例えば、（第２のアプリケーションに関連する）第２のユーザインターフェースの表示が（第１のアプリケーションに関連する）第１のユーザインターフェースの表示に取って代わるときに、システムは自動的に第１のアプリケーションを中断し、第２のアプリケーションがシステムの処理能力の大半を受け取ることを可能にすることができる。このように、それによってシステムはユーザインターフェースの表示が互いに重なることを防止することができる。
【００２３】
・システムは、制限されたセットトップボックスのリソースを用いて（セットトップボックス環境に適合された）より適切なユーザ管理を提供するためのＵＩｐａｎｅマネージャを提供する。例えば、システムは新しいＵＩｐａｎｅフォームを採用する。
【００２４】
・システムは、セットトップボックスのハードウェアに対してできるだけ多くのレンダリングを割り当てるグラフィックス機能を提供する。このことは、最小限のリソースを消費しながら非常に高速に実行されるグラフィックス機能をもたらす。特徴の中でもとりわけ、グラフィックス機能は、全２５６色サポートを提供し、あるアプリケーションから別のアプリケーションに切り換えると同時にカラーパレットおよび解像度を切り換える機能を提供する。さらに、グラフィックス機能は、１つのアプリケーションから別のアプリケーションに切り換えるときに遷移効果（ｔｒａｎｓｉｔｉｏｎ  ｅｆｆｅｃｔ）を提供する。遷移効果は、セットトップボックスのライン制御レジスタ（ＬＣＲ）を直接操作することによって働く。さらに、システムは、線、楕円、角丸長方形などをレンダリングするためのアルゴリズムなどの、その他のシステムにおいて提供される最速のアルゴリズムの一部を活用する。
【００２５】
・さらに、システムは、リソースの利用効率のよいフォントのインストールおよび管理アルゴリズムと、リソースの利用効率のよいアンチエイリアシングされたＴｒｕｅ  Ｔｙｐｅフォントのレンダリングアルゴリズムとを提供する。さらにリソースの消費を低減するために、システムは、フォントファイルから情報の一部を取り除くためのフォントストリッピングメカニズム（ｆｏｎｔ  ｓｔｒｉｐｐｉｎｇ  ｍｅｃｈａｎｉｓｍ）も使用する。
【００２６】
本明細書において説明される方策（Ｓｔｒａｔｅｇｉｅｓ）は多くの利点をもたらす。１つの主な利点によれば、システムは、大きくリソースが制限されたセットトップボックス上で魅力的な多用途に使用できるアプリケーションを開発するための強力なフレームワークを提供する。同時に、システムは従来のフレームワークを補完し、したがってそれらのフレームワーク（およびＣ＃などの関連するプログラミング言語）のプログラマの今ある知識を活用することができる。
【００２７】
本方策のさらなる特徴および付随する利点がこの説明で述べられる。最初に、以下の検討は主にセットトップボックス環境内に備えるためのインタープリタベースのＣＬＲ技術（上述のＳＰＯＴ技術など）の使用との関連で組み立てられるが、システムを構築するための基礎としてその他の種類のリソースの利用効率のよい技術が使用されることができる。さらに、そのようなその他のメモリの利用効率のよい技術は、．ＮＥＴのパラダイム（またはいずれかのバーチャルマシンフレームワークのパラダイム）を採用する必要がない。さらに、システムはリソースが制限された環境内に備えるのに最適であるが、システムはそのような環境に限定されず、例えば、システムは完全な．ＮＥＴの配備に対応するのに十分なだけの処理リソースを有する環境において使用されることができる。さらに、システムは、任意の種類のウェアラブルデバイス（例えば、腕時計デバイス）、携帯情報端末（ＰＤＡ）デバイス、携帯電話などの（セットトップボックス以外の）その他のデバイス上で使用されることができる。
【００２８】
用語に関して、用語「メディア情報」は、ユーザによって消費されることができる、電子的な形式で表された任意のデータを指す。メディア情報は、オーディオリソース（例えば、音楽、言葉で語られた対象など）、静止画リソース（例えば、デジタル写真など）、動画リソース（例えば、オーディオビジュアルテレビ番組、映画など）、コンピュータプログラム（例えば、ゲームなど）などのオーディオおよび／またはビデオ情報を運ぶ任意の情報を含むことができる。
【００２９】
用語「ＵＩｐａｎｅ」は、ユーザに対する表示のためのグラフィックスオブジェクトを表す。ある場合、ＵＩｐａｎｅはＷｉｎｄｏｗｓ（登録商標）型のユーザインターフェースのペインに対応する可能性がある。
【００３０】
用語「オンスクリーンディスプレイ（ＯＳＤ）」はセットトップボックスによって可能にされるディスプレイ表示を指す。
【００３１】
上記の用語に加えて、本開示は多くの標準的な．ＮＥＴの用語を使用する。読者は、．ＮＥＴの概念の背景理解のために多くの入門テキスト（例えば、非特許文献１および非特許文献２）を参照させられる。．ＮＥＴ環境に関するさらに追加的な情報は、ＭｉｃｒｏｓｏｆｔのＭＳＤＮサイトによってオンラインで提供されるＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎの技術ライブラリ上で見つけることができる。本開示内の広く用いられている用語を含む以下の用語解説は、ＭＳＤＮサイトで提供される情報から得られる。
【００３２】
・「アセンブリ」は、バージョン管理され、構成単位として配置される１つまたは複数のファイルの集まりを指す。アセンブリは、．ＮＥＴ  Ｆｒａｍｅｗｏｒｋアプリケーションの主要な基本構成要素である。全てのマネージタイプおよびマネージリソース（ｍａｎａｇｅｄ  ｔｙｐｅｓ  ａｎｄ  ｒｅｓｏｕｒｃｅｓ）はアセンブリ内に含まれ、当該アセンブリ内でのみアクセス可能であるように、またはその他のアセンブリ内のコードからアクセス可能であるように特徴付けられる。
【００３３】
・「Ｃ＃」（「シーシャープ」と発音される）言語は、．ＮＥＴ  Ｆｒａｍｅｗｏｒｋ上で実行されるアプリケーションを構築するために設計された１つのプログラミング言語を指す。ＣおよびＣ＋＋の発展であるＣ＃は、型安全であり、オブジェクト指向である。
【００３４】
・「コールバック関数」は、決められたイベントが発生するときにシステムまたはサブシステムが呼び出す、アプリケーションにより定義された関数を指す。
【００３５】
・「クラス」は、データ（定数およびフィールド）と、動作（メソッド、プロパティ、インデクサ、イベント、オペレータ、インスタンスコンストラクタ、スタティックコンストラクタ、およびデストラクタ）とをカプセル化する参照型であり、入れ子にされた型を含むことができる。クラス型は、それによって派生クラスがベースクラスを拡張し、特殊化することができるメカニズムである継承をサポートする。
【００３６】
・「コンストラクタ」は、クラスのインスタンスが宣言される度に自動的に呼び出される特殊な初期化関数を指す。コンストラクタはクラス自体と同じ名前を持つ必要があり、値を返してはならない。
【００３７】
・「デリゲート」は、Ｃ＋＋関数ポインタのマネージバージョンである参照型である。
【００３８】
・共通言語ランタイム（ＣＬＲ）は、マネージコードの実行の中核をなすエンジンを指す。ランタイムは、マネージコードと共に、言語間の統合、コードアクセスセキュリティ、オブジェクトの有効期間の管理、ならびにデバッグおよびプロファイルのサポートなどのサービスを提供する。用語「コアランタイムエンジン」は、本明細書においては、上述の種類のサービスを提供し、したがってＣＬＲ技術を包含する機能を説明するために使用されるが、用語「コアランタイムエンジン」はＣＬＲ技術に限定されない（およびさらに言えば．ＮＥＴ技術にも限定されない）。
【００３９】
・「コンテキスト」は、その環境内に常駐するオブジェクトのために環境を定義する順序付けられた一連のプロパティを指す。
【００４０】
・「列挙型（ｅｎｕｍ）」は、Ｓｙｓｔｅｍ．Ｅｎｕｍから継承し、基になるプリミティブ型の値に対して別名を与える特別な形式の値型を指す。列挙型は、名前と、基になる型と、フィールドの組とを有する。
【００４１】
・「フォーム」（Ｗｉｎｄｏｗｓ（登録商標）型のフォームなど）は、アプリケーション内で、またはアプリケーション間で一貫した動作およびユーザインターフェースを提供する複合的なコントロールを指す。
【００４２】
・「ガベージコレクション（ＧＣ）」は、もはや使用されていないオブジェクトを削除するためのプロセスを指す。
【００４３】
・「ＪＩＴコンパイル」は、実行時にコードが必要とされる時点で中間言語（ＭＳＩＬ）をマシンコードに変換する（従来の「完全な」．ＮＥＴ環境における）コンパイルを指す。
【００４４】
・「有効期間」は、オブジェクトがメモリに割り当てられるときに始まり、ガベージコレクタがメモリから当該オブジェクトを削除するときに終わる期間を指す。
【００４５】
・「マネージコード」は、共通言語ランタイム環境によって実行されるコードを指す。マネージデータは、共通言語ランタイムによって管理される有効期間を有するオブジェクトを指す。
【００４６】
・「名前空間」は、関連する型をグループ化するための論理的な名前付けスキームを指す。．ＮＥＴ  Ｆｒａｍｅｗｏｒｋは、関連する機能の論理的なカテゴリに型をグループ化するための階層型の名前付けスキームを使用する。
【００４７】
・「プライベート」アセンブリは、当該アセンブリと同じディレクトリ構造内のクライアントだけが使用できるアセンブリを指す。
【００４８】
・「リフレクション」は、アセンブリとそれらのアセンブリ内で定義される型についての情報を取得し、実行時に型のインスタンスを作成し、呼び出し、アクセスするプロセスを指す。
【００４９】
・「ユニフォームリソース識別子（Ｕｎｉｆｏｒｍ  Ｒｅｓｏｕｒｃｅ  Ｉｄｅｎｔｉｆｉｅｒ）（ＵＲＩ）」は、要素または属性を一意に識別する番号または名前を指す。ＵＲＩは、ユニフォームリソース名（Ｕｎｉｆｏｒｍ  Ｒｅｓｏｕｒｃｅ  Ｎａｍｅｓ）（ＵＲＮ）およびユニフォームリソースロケータ（ＵＲＬ）の両方を含む。
【００５０】
・「アンマネージコード」は、共通言語ランタイム環境外で直接実行されるコードを指す。
【００５１】
・拡張可能なマーク付け言語（ＸＭＬ）は、Ｗｅｂ上での送達に最適化された標準一般化マーク付け言語（ＳＧＭＬ）のサブセットを指す。ＸＭＬは、アプリケーションまたはベンダによらない構造化されたデータを記述および交換するための一貫した方法を提供する。
【００５２】
本開示は以下のセクションを含む。
Ａ．システム概要（図１および２）
Ａ．１．システム
Ａ．２．セットトップボックス
Ｂ．例示的なシステムのソフトウェア機能（図３〜６）
Ｂ．１．機能の概要
Ｂ．２．ＡｐｐｌｉｃａｔｉｏｎＢａｓｅ機能
Ｂ．３．ＵＩｐａｎｅ機能
Ｂ．４．アプリケーションマネージャ
Ｂ．４．１．初期化動作
Ｂ．４．２．実行およびメモリ管理動作
Ｂ．４．３．中断および再開動作
Ｂ．４．４．アンロード／終了動作
Ｂ．４．５．その他の動作
Ｂ．４．６．要約（図５）
Ｂ．５．ＵＩｐａｎｅマネージャ
Ｂ．５．１．ＵＩｐａｎｅ管理動作
Ｂ．５．２．イベントルーティング動作
Ｂ．５．２．ＵＩｐａｎｅフォーカスおよびナビゲーション動作
Ｂ．６．グラフィックス機能
Ｂ．６．１．遷移効果
Ｂ．６．２．パレットおよび解像度効果
Ｂ．６．３．Ｂｌｔ効果
Ｂ．６．４．フォントレンダリング機能
Ｃ．例示的な動作方法（図７）
Ｄ．付録
Ｄ．１．ＩＵＩｐａｎｅインターフェース
Ｄ．２．ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．ＵＩｐａｎｅｓ
Ｄ．２．１．ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．ＵＩｐａｎｅｓ名前空間の概要
Ｄ．２．２．ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．ＵＩｐａｎｅｓ．ＵＩｐａｎｅＢａｓｅ
Ｄ．２．３．ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．ＵＩｐａｎｅｓ．Ｆｏｒｍ
Ｄ．２．４．ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．ＵＩｐａｎｅｓ．Ｃｏｎｔｒｏｌ
Ｄ．２．５．ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．ＵＩｐａｎｅｓ．Ｂｕｔｔｏｎ
Ｄ．２．６．ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．ＵＩｐａｎｅｓ．ＵＩｐａｎｅＥｖｅｎｔＨａｎｄｌｅｒ
Ｄ．２．７．ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．ＵＩｐａｎｅｓ．ＫｅｙＥｖｅｎｔＨａｎｄｌｅｒ
Ｄ．２．８．ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．ＵＩｐａｎｅｓ．Ｔｒａｎｓｉｔｉｏｎ
Ｄ．２．９．ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．ＵＩｐａｎｅｓ．ＴｒａｎｓｉｔｉｏｎＥｖｅｎｔＨａｎｄｌｅｒ
Ｄ．２．１０．ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．ＵＩｐａｎｅｓ．ＢｕｔｔｏｎＳｔｙｌｅ
Ｄ．２．１１．ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．ＵＩｐａｎｅｓ．Ｋｅｙｓ
Ｄ．３．ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．Ｓｈｅｌｌ．ＴＶＬｉｔｅＡｐｐｌｉｃａｔｉｏｎＢａｓｅ
Ｄ．４．ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．Ｄｒａｗｉｎｇ名前空間
Ｄ．４．１．概要
Ｄ．４．２．ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．Ｄｒａｗｉｎｇ．Ｇｒａｐｈｉｃｓクラス
Ｄ．４．３．ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅで使用されるＲＬＥ圧縮画像フォーマット
Ｄ．５．フォントメソッド
Ｄ．５．１．フォントのインストールおよびアンインストール
Ｄ．５．２．グラフィックスオブジェクトのフォントに関連するメソッド
Ｄ．６．ネイティブイベントおよびマネージ非同期コールバック（Ｍａｎａｇｅｄ  Ａｓｙｎｃ  ＣａｌｌＢａｃｋ）
【００５３】
Ａ．システム概要（図１および２）
概して、図を参照して説明される機能のいずれも、ソフトウェア、ファームウェア（例えば、固定の論理回路）、手動による処理、またはこれらの実装の組合せを使用して実装されることができる。概して、本明細書において使用される用語「論理」、「モジュール」、または「機能」は、ソフトウェア、ファームウェア、またはソフトウェアおよびファームウェアの組合せを表す。例えば、ソフトウェアによる実装の場合、用語「論理」、モジュール、または「機能」は、１つの処理デバイスまたは複数の処理デバイス上で実行されるときに指定されたタスクを実行するプログラムコード（および／または宣言型の命令）を表す。プログラムコードは、１つまたは複数のコンピュータ可読メモリデバイスに記憶されることができる。より全般的に言って、論理、モジュール、および機能の別々のユニットへの図示された分割は、そのようなソフトウェアおよび／またはハードウェアの実際の物理的なグループ化および割り当てを反映する可能性があるか、または単一のソフトウェアプログラムおよび／またはハードウェアユニットによって実行される異なるタスクの概念的な割り当てに対応する可能性がある。図示された論理、モジュール、および機能は、（例えば、１つの処理デバイスによって実装されるように）単一の場所に配置されることができるか、または複数の場所に渡って分散されることができる。
【００５４】
Ａ．１．システム
図１は、そのシステムに本明細書において説明される改善された機能が備えられることができるシステム１００の概要を示す。概要として、システム１００は、接続メカニズム１０８を介してソース１０６からメディア情報（またはその他の情報）を受信するための複数のリソースが制限されたデバイス（１０２、１０４）を含む。
【００５５】
メディア配信の場合、ソース１０６は、メディア情報を受信デバイス（１０２、１０４）に送達するためのヘッドエンドインフラストラクチャを表す可能性がある。例えば、ソース１０６は、従来のケーブルメディア配信インフラストラクチャ、従来の無線メディア配信インフラストラクチャ（衛星メディア配信インフラストラクチャなど）などを表す可能性がある。または、ソース１０６は、１つまたは複数のデジタルネットワークを介してメディア情報を送達するメディア情報のネットワークソースを表す可能性がある。さらに別の場合には、ソース１０６は、受信デバイス（１０２、１０４）に対してローカルな場所から受信デバイス（１０２、１０４）にメディア情報を供給するエンティティ（ビデオジュークボックスなど）を表す可能性がある。いずれの場合も、ソース１０６は、例えば電子番組案内（ＥＰＧ）によって反映されるように、決められた時間スケジュールに従っていくつかの放送チャネルにおいて受信デバイス（１０２、１０４）にメディア情報を送達することができる。または、ソース１０６は、オンデマンドの方法を使用して受信デバイス（１０２、１０４）にメディア情報を送達することができる。
【００５６】
接続メカニズム１０８は、ソース１０６を受信デバイス（１０２、１０４）に接続する。この接続メカニズム１０８は、異なる技術的および商業的環境に適合するために異なるやり方で実装されてよい。例えば、接続メカニズム１０８は、ケーブルルーティングインフラストラクチャ、衛星ルーティングインフラストラクチャ、地上波アンテナルーティングインフラストラクチャ（およびそのようなルーティングインフラストラクチャの任意の組合せ）などの任意の種類の従来の配信インフラストラクチャを含んでよい。または、接続メカニズム１０８は、広域ネットワーク（例えばインターネット）、イントラネットなどのデジタルネットワーク（またはネットワークの組合せ）を含んでよい。情報を配信するためにデジタル加入者線（ＤＳＬ）インフラストラクチャが使用される場合、接続メカニズム１０８は、電話接続インフラストラクチャのサービスを一部利用することができる。
【００５７】
この説明の例示の目的のために、ソース１０６および接続メカニズム１０８は受信デバイス（１０２、１０４）へのメディア情報のケーブルまたは衛星による送達を提供するという簡略化の仮定がなされる。ソース１０６と受信デバイス（１０４、１０６）の間のリンクは、（情報がソース１０６から受信デバイスに向かってのみ流れる）単方向リンクとして、または好ましくは（受信デバイスのユーザがソース１０６にデータを送信することもできる）双方向リンクとして実装されることができる。双方向通信が使用される場合、デバイスからソースへのリンクは、デバイス（１０２、１０４）がソース１０６からメディア情報を受信するために使用する同じチャネルによって、または異なるチャネルによって実装されてよい。
【００５８】
受信デバイスは、セットトップボックス１０２を含む。セットトップボックス１０２は、ソース１０６からメディア情報を受信し、受信されたメディア情報に対して様々な処理を実行し（メディア情報を復号化する、および場合によってはメディア情報を解凍するなど）、処理された情報を出力デバイスに転送する。メディア配信環境の場合、出力デバイスはテレビジョンユニット１１０に対応する可能性がある。ある場合、セットトップボックス１０２は、テレビジョンユニット１１０とは別個のユニットとして実装されることができ、テレビジョンユニット１１０は任意の種類の接続メカニズム（例えば、物理的な配線、無線接続など）を介してセットトップボックス１０２に接続することができる。別の場合、セットトップボックス１０２は、テレビジョンユニット１１０内の一体型ユニットとして実装されることができる。さらに別の場合、セットトップボックス１０２からメディア情報を受信する出力デバイスは、従来のテレビジョン以外の別の種類のディスプレイデバイス（コンピュータモニタなど）、オーディオ出力デバイス（ステレオシステムなど）などを含むことができる。
【００５９】
その他の受信デバイス１０４は、任意の種類のウェアラブル処理メカニズム（例えば、ＭｉｃｒｏｓｏｆｔのＳＰＯＴウォッチなどの腕時計）、携帯電話、携帯情報端末（ＰＤＡ）、タブレット型デバイスなどの、処理および出力機能を有する任意のメカニズムを含むことができる。しかし、検討を容易にするために、この説明の残りの部分は、受信デバイスがセットトップボックス１０２（上述のように、テレビジョンユニット１１０と分かれていてよく、またはテレビジョンユニット１１０と一体化されていてもよい）に対応することを仮定する。
【００６０】
セットトップボックス１０２は、テレビジョンユニット１１０の画面１１４上にユーザインターフェースの表示１１２を表示することができる（これから説明されることになる）機能を含む。画面１１４は、本発明においてはオンスクリーンディスプレイ（ＯＳＤ）とも呼ばれる。ユーザは、リモートコントロールデバイス１１６、または何らかのその他の種類の入力デバイスを介してユーザインターフェースの表示１１２と対話することができる。例えば、セットトップボックス１０２は、セットトップボックスの筐体に直接一体化された入力キー（図示せず）を含むことができる。
【００６１】
Ａ．２．セットトップボックス
図２は、例示的なセットトップボックス１０２の構成を示す。セットトップボックス１０２は、以下で確認される、セットトップボックス１０２に付与されたタスクを実行するためのいくつかのモジュールを含むことができる。まず第１に、セットトップボックスはインターフェースモジュール２０２を含むことができる。インターフェースモジュール２０２は、任意の接続メカニズムを使用してソース１０６からメディア情報を受信するための任意の機能を表すことができる。例えば、インターフェースモジュール２０２は、ＤＳＬモデム、ケーブルモデム、無線ネットワークインターフェース、イーサネット（登録商標）ＮＩＣ、またはその他の種類のネットワークインターフェース機器を含むことができる。
【００６２】
・セットトップボックス１０２は、メディア情報を復号化すること、場合によってメディア情報を解凍することなどの、受信されたメディア情報に対する任意の種類の初期的な処理を実行するためのチューナ／デコーダモジュール２０４も含むことができる。放送サービスの場合、選局／復号化モジュール２０４は、任意の種類の選局メカニズムを介して（所望のチャネルを提供する所定の物理的な周波数に同調することによるなどして）１つまたは複数のメディア情報のチャネルを選択することができる。メディア情報のネットワークによる送達の場合、選局／復号化メカニズムは、（例えば、メディア情報の所定のユニキャストまたはマルチキャストソースに「同調する」ことによって）チャネルを受信するための仮想的な選局メカニズムを利用することができる。
【００６３】
・セットトップボックス１０２は、セットトップボックス１０２の機能を実行する命令を実行するための１つまたは複数の処理装置２０６を含むことができる。
【００６４】
・セットトップボックス１０２は、メモリ２０８（ＲＡＭメモリ、フラッシュメモリなど）を含むことができる。メモリ２０８の一部は、メディア情報が復号化されるのに先立ってメディア情報を記憶するためのＦＩＦＯ型のバッファ（図示せず）を含んでもよい。メモリの別の部分は、ライン制御レジスタ（ＬＣＲ）２１０を含むことができる。ＬＣＲ２１０は、出力デバイスの画面上の各ラインに対応するそれぞれの記憶域を含む。セットトップボックス１０２は、ＬＣＲ２１０を使用して情報を出力デバイスにレンダリングすることができる。これから説明されるように、セットトップボックス１０２は、ＬＣＲ２１０を操作することによって様々なグラフィックス効果（遷移効果など）を提供することもできる。
【００６５】
・セットトップボックス１０２は、１つまたは複数の入力デバイス（例えば、リモートコントローラ１１６など）を介してユーザとインタラクションするためのＩ／Ｏインターフェース２１２を含むことができる。
【００６６】
・セットトップボックス１０２は、テレビジョンユニット１１０（またはその他の出力デバイス）に適切なフォーマットのメディア情報を供給するためのＡ／Ｖインターフェースモジュール２１４を含むことができる。
【００６７】
・セットトップボックス１０２は、任意の種類のデータおよび／またはプログラム情報を記憶するためのオプションのローカルの記憶装置２１６を含むことができる。
【００６８】
・セットトップボックス１０２は、図に具体的に挙げられていない様々なその他のモジュール２１８を含むことができる。例えば、セットトップボックス１０２は、選局／復号化モジュール２０４からのメディア情報の映像コンポーネントをグラフィックス情報と合成するためのグラフィックス合成器を含むことができる。グラフィックス情報は、メディア情報の上に重ねられる様々なユーザインターフェースの表示を含んでよい。
【００６９】
最後に、セットトップボックス１０２は、上で確認されたコンポーネントを互いに接続するための１つまたは複数のバス２２０を含むことができる。
【００７０】
多様なセットトップボックスに関する追加的な情報は、いくつかのソース（例えば、非特許文献３内のオンラインＴＶ辞書）で見つけることができる。
【００７１】
いずれにせよ、以下で説明されることになるシステムは、制限された処理リソースを有するセットトップボックスに特に適する（しかし、このシステムは制限されたリソースを有するボックスに限定されない）。例えば、Ｍｏｔｏｒｏｌａによって製造された人気の高いＤＣＴ２０００ボックスは制限されたリソースを有する。このボックスの処理装置は２７ＭＨｚで動作し、メモリは１．５ＭＢのＲＡＭおよび１．２５ＭＢのフラッシュメモリを含む。本発明によって対処される困難は、その環境においてアプリケーションを開発および実行するための、これらの種類のリソースが制限された環境に適するように多様な機能を提供することである。
【００７２】
１つの例示的な実装によれば、システムは、セットトップボックス環境における使用のために適合されたインタープリタベースの共通言語ランタイム（ＣＬＲ）を使用することができる。このことは、上で概説されたコンパクトなジャストインタイムベースの（コンパクトなＪＩＴベースの）アプローチと対称的である。ＪＩＴベースのアプローチでは、プラットフォームは、アプリケーションの起動に先立って全てのマネージコードのＪＩＴコンパイルを必要とする。このことは、少なくとも２つのデメリットを有する。第１に、ＪＩＴコンパイルは、アプリケーションが実行される前の遅れをもたらす。第２に、ＪＩＴコンパイルは、元のアセンブリおよび「ＪＩＴ化された」ネイティブコードを記憶するために大量のメモリを必要とする。対称的に、インタープリタベースのＣＬＲは、個別的に、すなわちコードを必要に応じて解釈することによってコードの解釈および実行を行う。このことは、アプリケーションを起動するために必要とされる時間、およびアプリケーションのメモリ要件の両方を低減し、後者の利点は制限されたメモリリソースを有するリソースが制限されたデバイスに対して特に有益である。
【００７３】
インタープリタベースのＣＬＲは、様々な技術を使用して実装されることができる。１つの例示的で非限定的な事例では、インタープリタベースのＣＬＲは、Ｍｉｃｒｏｓｏｆｔ  ＣｏｒｐｏｒａｔｉｏｎのＳｍａｒｔ  Ｐｅｒｓｏｎａｌ  Ｏｂｊｅｃｔｓ  Ｔｅｃｈｎｏｌｏｇｙ（ＳＰＯＴ）を使用して実装されることができる。ＳＰＯＴ技術は、いくつかのソース（例えば、非特許文献４によるオンライン論文を含む）で説明されている。．ＮＥＴ組み込み技術を説明している文献は、ＳＰＯＴ技術に関連している。より具体的には、ワシントン州シアトルのｎｅｔｃｐｕ（商標）Ｃｏｒｐｏｒａｔｉｏｎは、ＳＰＯＴ技術に関連するｎｅｔｃｐｕ（商標）製品および関連するＳＤＫを供給する。
【００７４】
上述の技術に特有の実装は、例示的であるに過ぎない。その他のインタープリタベースの機能は、Ｊａｖａ（登録商標）プログラミングフレームワークなどの、．ＮＥＴ  Ｆｒａｍｅｗｏｒｋ以外のその他のプログラミングフレームワークを使用することができる。上で定義されたように、より包括的な用語「インタープリタベースのコアランタイムエンジン」は、インタープリタベースのＣＬＲ（ＳＰＯＴのＴｉｎｙＣＬＲなど）の使用を包含するが、この技術に限定されない（およびさらに言えば．ＮＥＴ技術にも限定されない）。
【００７５】
インタープリタベースのＣＬＲは、本開示の以降のセクションで十分に説明されるやり方でセットトップボックス環境における使用のために適合されることができる。概して、インタープリタベースのＣＬＲは、「完全な」．ＮＥＴ  Ｆｒａｍｅｗｏｒｋによって提供される機能と比較して少ない機能の組を提供することができる。それでも、インタープリタベースのＣＬＲは、概して．ＮＥＴのパラダイムに従い、開発者が大きくリソースが制限された環境において．ＮＥＴのパラダイムを使用してアプリケーションを提供することを可能にすることが好ましい。
【００７６】
より具体的には、デスクトップ環境は、キーボードおよびマウスなどのいくつかの可能な入力デバイスを介してユーザから入力を受け取る。さらに、デスクトップ環境は、非常に複雑なＵＩｐａｎｅ管理の方策を要求する、複数の重なり合うＵＩｐａｎｅを用いた同様に複雑なユーザインターフェースの表示を提供するように構成される。一方、セットトップボックス環境は、概して制限された数の単純な入力メカニズム（例えば、リモートコントローラ）を介してユーザから入力を受け取る。さらに、概してセットトップ環境は複数のアプリケーションを提供するように期待されるが、（デスクトップ環境と異なり）概してこれらのアプリケーションを複雑なレイヤ化されたやり方で表示しない。したがって、本発明によれば、インタープリタベースのＣＬＲプラットフォームは、セットトップボックス環境に最もよく役立つように適合される。
【００７７】
次のセクションで説明されるように、例示的な改善は、特にセットトップボックス環境に適合された名前空間と、アプリケーションを中断および再開するための独特なアプリケーションマネージャと、独特なウィンドウマネージャと、種々の独特なグラフィックスおよびフォント関連装備とを含む。
【００７８】
Ｂ．例示的なシステムのソフトウェア機能（図３〜６）
Ｂ．１．機能の概要
図３は、本明細書においてＴＶ．Ｌｉｔｅと呼ばれる（これはセットトップボックスシステムがテレビジョンセットトップボックス環境で用いるための比較的「軽い（ｌｉｇｈｔｗｅｉｇｈｔ）」機能を提供するためである）セットトップボックスシステムのソフトウェアスタック３００の概要を提供する。上述のように、スタック３００は、本明細書において説明される独特な装備によってセットトップボックス環境における使用のために適合された、インタープリタベースのＣＬＲによって提供される機能を含むことができる。従来のやり方で、スタック３００内のレイヤはシステムにおける異なる機能の相対的な依存性を示し、ここで最も低いレベルはシステムの最も基本的な機能を実行し、最も高いレベルはシステムにおける最も抽象的なまたは高レベルな機能を実行する。
【００７９】
まず第１に、最も低いセットトップボックスレイヤ３０２が、セットトップボックス１０２の様々なハードウェア機能を含む、セットトップボックス１０２の物理構造に対応する。例えば、このレイヤ３０２は、ＬＣＲ２１０を含む、図２で確認されたセットトップボックスの構成要素を含む。
【００８０】
次に高いレイヤ、セットトップボックスＯＳレイヤ３０４は、セットトップボックス１０２によって実行される様々な基本機能を提供する。例えば、ＭｏｔｏｒｏｌａのＤＣＴ２０００セットトップボックスに関しては、セットトップボックスＯＳレイヤ３０４はＭｏｔｏｒｏｌａによって提供される「ＧＩＯＳ」オペレーティングシステムに対応する。このレイヤ３０４は、メモリ管理、スケジューリング、ハードウェア制御などを提供することができる。
【００８１】
次に高いレイヤは、インタープリタベースのＣＬＲ３０６（これに限定されないがＳＰＯＴベースのＣＬＲなど）、およびＧＦＸライブラリ３０８を提供する。概して、例示的な．ＮＥＴによる実装において、インタープリタベースのＣＬＲ３０６は、特にセットトップボックス環境の要求に適合された、．ＮＥＴ共通言語ランタイム（ＣＬＲ）機能のサブセットを含む。インタープリタベースのＣＬＲ３０６は、スタック内で（「完全な」．ＮＥＴ  Ｆｒａｍｅｗｏｒｋと比べて）比較的低位であり、このことはアプリケーションの機能と低レベルのＯＳ機能の間の差異を（従来のシステムと比較して）より小さくする。
【００８２】
ＧＦＸライブラリ３０８は、特にセットトップボックス環境の使用に適合された、セットトップボックスシステムにおいて用いるための様々なグラフィックス機能を提供する。
【００８３】
次に高いレイヤは、アプリケーションマネージャ３１０と、ＵＩｐａｎｅマネージャ３１２と、フォームおよびコントロール３１４とを提供する。タスクの中でもとりわけ、アプリケーションマネージャ３１０は、複数のアプリケーションのロード、実行、およびシャットダウンを制御する。
【００８４】
ＵＩｐａｎｅマネージャ３１２とフォームおよびコントロール３１４とは、ＵＩｐａｎｅ（これらに限定されないが、Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステム環境において提供される表示オブジェクトと同様の表示オブジェクトなど）の表示を制御する様々な機能を提供する。セットトップボックス環境に不要な機能を除外するために、このＵＩｐａｎｅ機能において（従来のデスクトップ環境と比較して）ＡＰＩの数が検討された。それでも、ＡＰＩはデスクトップ環境において提供される完全なＡＰＩの組を補完し、それによって開発者が全く新しいプログラミングのパラダイムを学ぶことなしにセットトップボックス環境のためのアプリケーションの記述を始めることを可能にする。
【００８５】
最上位のレイヤは、いくつかのアプリケーション（３１６、３１８、３２０、．．．３２２）を提供する。これらのアプリケーション（３１６、３１８、３２０、．．．３２２）は、任意の目的に役立つように設計された任意のコード機能を含むことができる。例えば、これらのアプリケーション（３１６、３１８、３２０、．．．３２２）は、デジタルビデオレコーダ（ＤＶＲ）、選局に関連するアプリケーション、ペアレンタルコントロールに関連するアプリケーション、番組案内および検索アプリケーション、ビデオオンデマンド（ＶＯＤ）アプリケーション、ゲームアプリケーション、情報（例えばニュース）表示アプリケーション、投票アプリケーション、インスタントメッセンジャ（ＩＭ）アプリケーションなどを提供することができる。アプリケーション（３１６、３１８、３２０、．．．３２２）は、（言語の中でもとりわけ）Ｃ＃言語を使用して書かれたユーザアプリケーションをやはりサポートする。
【００８６】
以下のサブセクションは、図３に示されたソフトウェアスタック３００に関する追加的詳細を提供する。
【００８７】
Ｂ．２．ＡｐｐｌｉｃａｔｉｏｎＢａｓｅ機能
スタック３００内の機能は、一部分において、セットトップボックス環境のために開発された独特な名前空間によって実装されることができる。その名前空間の基底において、名前空間は、そのシェルから追加的な機能が階層的なやり方で付加されることができるシェル、ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．Ｓｈｅｌｌを提供する。階層内の子機能は、継承によって親機能により提供されるツールを利用することができる。
【００８８】
このサブセクションは、ＴＶＬｉｔｅＡｐｐｌｉｃａｔｉｏｎＢａｓｅと呼ばれる（以下では略してＡｐｐｌｉｃａｔｉｏｎＢａｓｅと呼ばれる）名前空間にグループ化される機能を説明する。ＡｐｐｌｉｃａｔｉｏｎＢａｓｅクラスは、ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．Ｓｈｅｌｌに従属する。ＡｐｐｌｉｃａｔｉｏｎＢａｓｅは、セットトップボックスのアプリケーションを表す。すなわち、全てのアプリケーションは、抽象ＴＶＬｉｔｅＡｐｐｌｉｃａｔｉｏｎＢａｓｅインターフェースから派生すべきである。この関係によって、アプリケーションは、ＡｐｐｌｉｃａｔｉｏｎＢａｓｅにおいて指定された全ての抽象メソッドを実装することができる。セクションＤの付録はＡｐｐｌｉｃａｔｉｏｎＢａｓｅ機能の詳細な説明を提供し、本セクションはこの機能の例示的で主要な特徴を提供する。
【００８９】
ＡｐｐｌｉｃａｔｉｏｎＢａｓｅクラスは、以下の例示的で非網羅的な列挙された特徴を提供することができる。（「メッセージポンプ」に関する以下の言及、およびその他の特徴は、アプリケーションマネージャ３１０の後の検討との関連で明確にされることになる。）
・Ｒｕｎメソッドは、現在のスレッド上で標準のアプリケーションメッセージループの実行を開始し、指定されたＵＩｐａｎｅを可視状態にする。Ｒｕｎメソッドは自動的に（以下で確認される）ＲｅｇｉｓｔｅｒＵＩｐａｎｅを呼び出して最も高いレベルのＵＩｐａｎｅである主ＵＩｐａｎｅを登録する。
【００９０】
・Ｉｎｉｔｉａｌｉｚｅメソッドは、アプリケーションで定義された初期化を実行する。このメソッドにおいて、アプリケーションを起動するためのＨＴＴＰリクエストのＵＲＬが、ＵＲＬに付加されるパラメータと共に、Ｉｎｉｔｉａｌｉｚｅに対する呼び出しの中の「ｕｒｌ」パラメータを介してアプリケーションに渡されることができる。以下は例示的なｕｒｌパラメータを与える。
【００９１】
ｈｔｔｐ：／／ａｐｐｓｅｒｖｅｒ／ｍｏｎｓｔｅｒ．ｄａｔ？ｐａｒａｍ１＝ｖａｌｕｅ１＆ｐａｒａｍ２＝ｖａｌｕｅ２
・Ｅｘｉｔ（）メソッドは、全てのメッセージポンプにそれらのメッセージポンプが終了すべきであることを知らせ、そしてメッセージが処理された後で全てのアプリケーションのＵＩｐａｎｅを閉じる。概して、Ｅｘｉｔメソッドはメッセージループ内から呼び出され、Ｒｕｎメソッドに強制的にリターンさせる。より全般的に言って、アプリケーションはアプリケーションマネージャ３１０にアプリケーションが終了することを知らせるためにＥｘｉｔメソッドを呼び出すことができ、これはアプリケーションマネージャ３１０がシステムのリソースをクリーンナップするなどの適切な処置を実行することを可能にする。
【００９２】
・ＲｅｇｉｓｔｅｒＵＩｐａｎｅメソッドは、アプリケーションがそのアプリケーションの最も高いレベルのＵＩｐａｎｅをＵＩｐａｎｅマネージャ３１２に登録することを可能にする。ＵＩｐａｎｅマネージャ３１２は、ＵＩｐａｎｅイベントを最も高いレベルのＵＩｐａｎｅにディスパッチすることになる。
【００９３】
・Ｐａｕｓｅメソッドは、アプリケーションに中断するように要求するためにアプリケーションマネージャ３１０がアプリケーションに中断イベントを送信することを可能にする。アプリケーションマネージャ３１０は、アプリケーションに中断するように要求した後でスレッドを一時停止する。
【００９４】
・Ｒｅｓｕｍｅメソッドは、アプリケーションに再開するように要求するためにアプリケーションマネージャ３１０がアプリケーションに再開イベントを送信することを可能にする。
【００９５】
・Ｔｅｒｍｉｎａｔｅメソッドは、アプリケーションに終了するように要求するためにアプリケーションマネージャ３１０がアプリケーションに終了イベントを送信することを可能にする。例えば、Ｔｅｒｍｉｎａｔｅメソッドは、ユーザが適切なＵＩコマンドを介して高速終了命令を入力したとき、システムがシャットダウンするとき、システムリソースが不足しつつあるときなど、アプリケーションが終了されるべきときに呼び出されることができる。これらの状況において、アプリケーションマネージャ３１０は、Ｔｅｒｍｉｎａｔｅメソッドを呼び出してアプリケーションに終了するように命令する。
【００９６】
・ＲｅｌｅａｓｅＲｅｓｏｕｒｃｅメソッドは、解放されることができる全てのリソースを解放するようにアプリケーションに要求するためにアプリケーションマネージャ３１０がアプリケーションにリソース解放イベントを送信することを可能にする。これは、ガベージコレクタのためのオブジェクトに対する参照を削除することを含む。
【００９７】
Ｂ．３．ＵＩｐａｎｅ機能
シェルは、全てのＵＩｐａｎｅの根本として働く基底ＩＵＩｐａｎｅインターフェースも定義する。このインターフェースは、ＵＩｐａｎｅマネージャがそれぞれのＵＩｐａｎｅの実装の詳細を「知ること」なしに全てのＵＩｐａｎｅを制御することを可能にする。
【００９８】
ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．ＵＩｐａｎｅｓ名前空間は、低価格のセットトップボックス（ＳＴＢ）上での実行のために最適化された「軽いＴＶアプリケーション」を作成するためのクラスを含む。前のセクションで説明されたように、セットトップボックスはインタープリタベースのＣＬＲシステムを実行することができる。
【００９９】
この名前空間内のクラスは、以下のカテゴリにグループ化されることができる。
【０１００】
・ＵＩｐａｎｅＢａｓｅクラスのカテゴリは、ＴＶアプリケーション上に表示される全てのＵＩｐａｎｅコントロールのための基本機能を提供する。ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．ＵＩｐａｎｅｓ名前空間内のほとんどのクラスは、ＵＩｐａｎｅＢａｓｅクラスから派生する。ＵＩｐａｎｅＢａｓｅクラスはコンテナでもあり、このことはＵＩｐａｎｅＢａｓｅクラスが子ＵＩｐａｎｅを含むことができることを意味する。
【０１０１】
・ＵＩｐａｎｅ  Ｆｏｒｍｓクラスのカテゴリは、最も高いレベルのコンテナＵＩｐａｎｅの作成を可能にする。
【０１０２】
・ＵＩｐａｎｅ  Ｃｏｎｔｒｏｌｓクラスのカテゴリは、ユーザインターフェースの作成を可能にする。例えば、ＢｕｔｔｏｎクラスはＵＩｐａｎｅコントロールである。
【０１０３】
上述の要約で述べられたクラスのカテゴリに対するサポートを提供する、ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．ＵＩｐａｎｅｓ名前空間内のいくつかのクラスがある。概要として、クラスに関して、
・ＢｕｔｔｏｎクラスはＴＶのボタンコントロールを表す。
【０１０４】
・Ｃｏｎｔｒｏｌクラスは、コントロールのベースクラスを定義する。コントロールオブジェクトは、特定の機能を実行する視覚的な表示を持ったオブジェクトを定義する。
【０１０５】
・Ｆｏｒｍクラスは、親のない最も高いレベルのコンテナＵＩｐａｎｅのためのベースクラスを定義する。このクラス（フォームオブジェクト）によって生成されたオブジェクトは、何らかの視覚的な表示を持つか、または視覚的な表示を持たず、子ＵＩｐａｎｅを含むことができる。
【０１０６】
・Ｔｒａｎｓｉｔｉｏｎクラスは、フォームオブジェクトに遷移を適用するためのメソッドを定義する。
【０１０７】
・ＵＩｐａｎｅＢａｓｅクラスは、（視覚的な表示を有するオブジェクト、またはその他のＵＩｐａｎｅＢａｓｅオブジェクトを含むオブジェクトを定義する）ＵＩｐａｎｅのためのベースクラスを定義する抽象クラスである。
【０１０８】
デリゲートに関して、
・ＵＩｐａｎｅＥｖｅｎｔＨａｎｄｌｅｒクラスは、任意のＵＩｐａｎｅイベントを処理することになるメソッドを表す。
【０１０９】
・ＫｅｙＥｖｅｎｔＨａｎｄｌｅｒクラスは、キーイベントを処理することになるメソッドを表す。
【０１１０】
・ＴｒａｎｓｉｔｉｏｎＥｖｅｎｔＨａｎｄｌｅｒクラスは、遷移イベントを処理することになるメソッドを表す。
【０１１１】
列挙型に関して、
・Ｋｅｙクラスは、ＴＶアプリケーション内で使用される全ての可能なキーコードを表す。
【０１１２】
・ＢｕｔｔｏｎＳｔｙｌｅクラスは、全ての可能なボタンスタイルを表す。
【０１１３】
さらに、付録、セクションＤは、ＵＩｐａｎｅ機能の完全な検討を提供する。さらに、図４はこの機能の例示的な階層構造を示し、このことは付録で十分に説明される機能の概要を提供する。
【０１１４】
Ｂ．４．アプリケーションマネージャ
アプリケーションマネージャ３１０は、アプリケーションのロード、アンロード、および初期化を管理するためのメカニズムを提供する。さらに、アプリケーションマネージャ３１０は、メッセージポンプを管理すること、メモリ管理を実行すること、システムのセキュリティに関連する特質を処理することなどを行う。また、アプリケーションマネージャ３１０は、アプリケーションにアクティブ化、非アクティブ化、中断、再開、終了などを命令することによってアプリケーションの動作を管理する。
【０１１５】
以下のサブセクションは、上述の話題に関する追加的な情報を提供する。
【０１１６】
Ｂ．４．１．初期化動作
アプリケーションマネージャ３１０は、アプリケーションを起動するためのアプリケーション起動リクエストを受信することができる。例えば、１つの例示的な実装において、起動リクエストは、アプリケーションマネージャ３１０にフラッシュメモリ中のアプリケーションを起動するように、またはアプリケーションをダウンロードし、起動するためのＨＴＴＰリクエストを介してアプリケーションを起動するように要求することができる。
【０１１７】
より具体的には、アプリケーションのシェルは、ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．Ｓｈｅｌｌ名前空間内のｐｕｂｌｉｃなＤｏｗｎｌｏａｄクラスを使用してアプリケーションをダウンロードおよび実行することができる。複数のアセンブリを同時にダウンロードおよび実行するために、Ｄｏｗｎｌｏａｄオブジェクトの複数のインスタンスが作成されることができる。各アセンブリは、そのアセンブリ専用のスレッド内で実行される。（いくつかのコンパクトな．ＮＥＴによるＪＩＴベースのフレームワークにおいては、アプリケーションは異なるアプリケーションドメイン内で実行されることに留意されたい。一方、アプリケーションが異なる論理的なスレッド内で実行されるのでインタープリタベースのＣＬＲの実装においてはアプリケーションドメインの概念は存在しない。）Ｄｏｗｎｌｏａｄオブジェクトは、アプリケーションを起動するためのパーミッションをチェックすることができる。
【０１１８】
アプリケーションは、Ｄｏｗｎｌｏａｄオブジェクトを使用してその他のアプリケーションを起動することができる。起動される側のアプリケーションが終了するときに起動する側のアプリケーションが通知を受けることを望むならば、起動する側のアプリケーションはＡｕｔｏＲｅｓｅｔＥｖｅｎｔをＤｏｗｎｌｏａｄのコンストラクタに渡し、当該イベントを待つことができる。例えば、エンティティＸがＤｏｗｎｌｏａｄオブジェクトを使用してゲームアプリケーションを起動すると仮定する。エンティティＸは、ｇａｍｅＡｐｐＥｘｉｔＥｖｅｎｔと呼ばれるＡｕｔｏＲｅｓｅｔＥｖｅｎｔを作成し、そのＡｕｔｏＲｅｓｅｔＥｖｅｎｔをＤｏｗｎｌｏａｄオブジェクトに渡すことができる。エンティティＸは、個別のスレッドを作成し、そのスレッドにおいてｇａｍｅＡｐｐＥｘｉｔＥｖｅｎｔを待つことができる。ゲームアプリケーションが終了するとき、シェルはｇａｍｅＡｐｐＥｘｉｔＥｖｅｎｔを信号で知らせることになる。エンティティＸはやはりシステムイベント（中断イベント、再開イベント、終了イベントなど）に応答する必要があるので、エンティティＸはメッセージポンプスレッド（以下で説明される）においてｇａｍｅＡｐｐＥｘｉｔＥｖｅｎｔを待つべきでない。
【０１１９】
Ｄｏｗｎｌｏａｄクラスは、アセンブリをダウンロードおよび実行するためのＥｘｅｃｕｔｅＡｓｓｅｍｂｌｙと呼ばれるｐｕｂｌｉｃなメソッドを含む。ＥｘｅｃｕｔｅＡｓｓｅｍｂｌｙメソッドは、アセンブリをダウンロードし、ロードし、実行するための新しいアプリケーションスレッドを開始することになる。（代替として、または追加として、Ｄｏｗｎｌｏａｄオブジェクトは、アセンブリのバイト配列を返すことになるＧｅｔＦｉｌｅと呼ばれるメソッドをサポートすることができる。アプリケーションは、ＧｅｔＦｉｌｅメソッドを使用してアセンブリのデータまたはファイルのバイトのブロックを読むことができる。）アセンブリがダウンロードされ、ロードされた後で、アプリケーションマネージャはリフレクション使用して、ＴＶＬｉｔｅＡｐｐｌｉｃａｔｉｏｎＢａｓｅから派生したクラスを探索することによってアプリケーションのクラスを見つけることができる。
【０１２０】
次に、アプリケーションマネージャ３１０は、ＴＶＬｉｔｅＡｐｐｌｉｃａｔｉｏｎＢａｓｅのインスタンスをインスタンス化し、アプリケーションを起動するコマンド／ＵＲＬを用いてＩｎｉｔｉａｌｉｚｅメソッドを呼び出す。したがって、Ｉｎｉｔｉａｌｉｚｅメソッドは、マネージアプリケーションに対する入り口を構成する。
【０１２１】
アプリケーションは、Ｉｎｉｔｉａｌｉｚｅメソッドが呼び出されるときにそのアプリケーションの主ＵＩｐａｎｅを作成する。アプリケーションは、ＴＶＬｉｔｅＡｐｐｌｉｃａｔｉｏｎＢａｓｅにおいて提供されるＲｅｇｉｓｔｅｒＵＩｐａｎｅ機能（以下で検討される）を使用して追加的な最も高いレベルのＵＩｐａｎｅを登録することもできる。
【０１２２】
Ｂ．４．２．実行およびメモリ管理動作
アプリケーションは、そのアプリケーションが全ての初期化作業を終えるときにＲｕｎメソッドを呼び出す。これは、アプリケーションがイベント（例えば、フォーカスイベント、キーイベント、中断イベント、再開イベント、終了イベントなど）を受け取ることを可能にするメッセージポンプを開始する。Ｒｕｎメソッドはブロッキング呼び出しであり、アプリケーションがそのアプリケーション上でＥｘｉｔを呼び出すまでリターンしない。アプリケーションが終了されるとき、アプリケーションはアプリケーションのベースクラスＴＶＬｉｔｅＡｐｐｌｉｃａｔｉｏｎＢａｓｅにおいて提供されるＥｘｉｔメソッドを呼び出す。換言すれば、Ｒｕｎメソッドは、現在のスレッド上でメッセージループを開始し、指定されたＵＩｐａｎｅを可視状態にする。アプリケーションは、メッセージポンプを終了し、ＲｕｎメソッドからリターンするためにＥｘｉｔメソッドを呼び出す。
【０１２３】
アプリケーションを実行している間、ガベージコレクタは、マネージオブジェクトに割り当てられたメモリを、そのオブジェクトがもはや使用されていない場合に自動的に解放する。しかし、ガベージコレクションがいつ行われるのかは予測できない。ＴＶＬｉｔｅＡｐｐｌｉｃａｔｉｏｎＢａｓｅは、ネイティブメモリのハンドル、オープンファイル、およびオープンストリームに直接アクセスできないマネージアプリケーションとして実装されることができる。したがって、ＴＶＬｉｔｅＡｐｐｌｉｃａｔｉｏｎＢａｓｅのメモリ管理は、ガベージコレクタによって適切に処理されることができる。
【０１２４】
アプリケーションマネージャ３１０は、アプリケーションスレッドにシステムがメモリ不足になりつつあることを知らせるためのＰｕｒｇｅメソッドを呼び出すことができる。アプリケーションは、Ｐｕｒｇｅメソッドが呼び出されたとき、できるだけ多くのマネージオブジェクトを（オブジェクトに対する参照を削除することによって）解放すべきである。システムがまだ最小メモリ閾値未満で実行されている場合、アプリケーションマネージャ３１０は、利用可能なメモリの量を最小メモリ閾値を超えるようにさせるためにアプリケーションを終了させることができる。すなわち、アプリケーションマネージャ３１０は、先入れ先出しアルゴリズムに基づいて非アクティブなアプリケーションを終了させることができる。アプリケーションマネージャ３１０は、設定ファイルのＫｅｅｐＡｌｉｖｅセクションに列挙されたアプリケーションは終了させない。
【０１２５】
Ｂ．４．３．中断および再開動作
アプリケーションマネージャ３１０は、アプリケーションスレッドが一時停止されようとしていることを示すためのアプリケーションのＰａｕｓｅメソッドを呼び出す。例えば、アプリケーションマネージャ３１０は、別のアプリケーションがアクティブ化されるときに現在実行中のアプリケーションを中断するためにＰａｕｓｅメソッドを自動的に呼び出すことができ、その新しいアプリケーションのＵＩｐａｎｅは現在のアプリケーションのＵＩｐａｎｅと重なる。Ｐａｕｓｅメソッドは、アプリケーションがスレッドの中断の準備をする機会を提供する。アプリケーションは、スレッドが再開されるまでいかなるメッセージも受け取らない。アプリケーションマネージャ３１０は、所定の時間（例えば０．５秒）以内に中断しないアプリケーションを終了させることができる。
【０１２６】
アプリケーションマネージャは、アプリケーションスレッドが再開されたことを示すためのアプリケーションのＲｅｓｕｍｅメソッドを呼び出すことができる。これは、アプリケーションがそのアプリケーション自体をスレッドの中断前に存在した状態に回復する機会を提供する。次いで、アプリケーションマネージャ３１０は、スレッドのメッセージポンプを再スタートすることができる。アプリケーションマネージャ３１０は、所定の時間（例えば０．５秒）以内に再開しないアプリケーションを終了させることができる。
【０１２７】
Ｂ．４．４．アンロード／終了動作
アプリケーションマネージャ３１０は、Ｅｘｉｔメソッドの実装をその基底実装で提供する。すなわち、Ｅｘｉｔメソッドは、アプリケーションマネージャ３１０に現在のアプリケーションを終了させるように知らせる。アプリケーションマネージャ３１０は、終了されたアプリケーションを削除し、前のアクティブなアプリケーションに制御を移す。
【０１２８】
アプリケーションマネージャ３１０は、アプリケーションスレッドが終了すべきであることを示すためのアプリケーションのＴｅｒｍｉｎａｔｅメソッドを呼び出すこともできる。これは、アプリケーションが適切に終了する機会を提供する。アプリケーションマネージャ３１０は、所定の時間の後に適切に終了しないアプリケーションを終了させることができる。
【０１２９】
Ｂ．４．５．その他の動作
セキュリティの話題に関して、アプリケーションマネージャ３１０は、アプリケーションのリクエストを設定ファイルにおいて指定された規則に対して検証する。例えば、アプリケーションマネージャ３１０は、アプリケーションが別のアプリケーションを起動するパーミッション、ネットワークリソースにアクセスするパーミッションなどを有するかどうかをチェックすることができる。アプリケーションは、そのアプリケーションが使用するためのパーミッションを持っていない機能を要求する場合、例外を受け取ることになる。
【０１３０】
登録の話題に関して、アプリケーションは、ＵＩｐａｎｅイベントを受け取るためにアプリケーションの最も高いレベルのＵＩｐａｎｅをアプリケーションマネージャ３１０に登録することができる。より具体的には、Ｒｕｎメソッドが、そのメソッドのＵＩｐａｎｅパラメータに指定されたＵＩｐａｎｅを自動的に登録する。
【０１３１】
Ｂ．４．６．要約（図５）
図５は、上で確認された概念の要約を提供する。この図において、アプリケーションランチャ５０２は、ダウンロードエンティティ５０４と連絡を取ることによってアプリケーションの起動を開始する。ダウンロードエンティティ５０４は、サンドボックスパーミッションエンティティ５０６にアクセスすることによって、アプリケーションをダウンロードおよび実行するパーミッションをそれが持っているかどうかを判定する。持っている場合、ダウンロードエンティティ５０４はタスクマネージャエンティティ５０８にタスクを追加してアプリケーションを実行する。アプリケーションを実行することは、当該アプリケーション専用のアプリケーションスレッド５１０を作成する。
【０１３２】
アプリケーションマネージャ３１０およびウィンドウマネージャ３１２は、呼び出されたアプリケーションの実行を制御する。すなわち、これらのマネージャ（３１０、３１２）は、メッセージキューエンティティ５１２にキューアイテムを追加し、その結果アプリケーションエンティティ５１４によるこれらのアイテムの実行をもたらす。
【０１３３】
Ｂ．５．ＵＩｐａｎｅマネージャ
ＵＩｐａｎｅマネージャ３１２は、十分に管理されたＵＩｐａｎｅ管理の実装を提供する。ＵＩｐａｎｅマネージャ３１２は、ＵＩｐａｎｅ管理、イベントのルーティング、およびフォーカス管理に関する役割を担う。このサブセクションは、ｗｉｎｐａｇｅマネージャ３１２の動作に関する詳細を提供する。
【０１３４】
Ｂ．５．１．ＵＩｐａｎｅ管理動作
ＵＩｐａｎｅは、それらのＵＩｐａｎｅの種類に基づいた所定の優先順位で表示される。サポートされるＵＩｐａｎｅの種類は、Ｎｏｔｉｆｉｃａｔｉｏｎ（通知）、Ｆｌｏａｔｉｎｇ（フローティング）（ＡｌｗａｙｓＯｎＴｏｐ属性が設定されたＮｏｔｉｆｉｃａｔｉｏｎ）、およびＮｏｒｍａｌ（標準）を含む。Ｆｌｏａｔｉｎｇ  ＵＩｐａｎｅは、常に最も上のＵＩｐａｎｅとなる。例えば、ディスプレイが、異なるアプリケーションに対応する（または同じアプリケーションに対応する）複数のＵＩｐａｎｅを同時に表示すると仮定する。最も高い優先レベルを有するＵＩｐａｎｅがフォーカスを受け取ることになり、このことはユーザの入力作業がこのＵＩｐａｎｅを対象とすることになることを意味する。しかし、１つの例示的な実装によれば、ＵＩｐａｎｅはディスプレイ上で重なることが許されない。
【０１３５】
ＵＩｐａｎｅマネージャ３１２は、アプリケーションを中断、再開、および終了させるためにアプリケーションマネージャ３１０と緊密に連動する。例えば、ＵＩｐａｎｅマネージャ３１２は、（概して、上位に上がろうとしている別のアプリケーションのＵＩｐａｎｅが現在のＵＩｐａｎｅを妨げるために）現在のアプリケーションが一時停止されることを必要とするときに、現在のアプリケーションのメッセージポンプに中断イベントを送信するようにアプリケーションマネージャ３１０に要求する。このことは、現在のアプリケーションに、そのアプリケーションが一時停止状態になる前に、要求された動作を実行する機会を与えることになる。
【０１３６】
より具体的には、アプリケーションは、そのアプリケーションがフォーカスを受け取るときおよび失うときに、アクティブ化イベントおよび非アクティブ化イベントをそれぞれ受け取る。例えば、実行中のアプリケーションの上に通知が現れる場合、アプリケーションは非アクティブ化イベント（それに中断イベントが続く）を受け取ることになる。通知が消されるとき、アプリケーションは（アプリケーションが再開イベントを送信された後で）アクティブ化イベント受け取ることになる。
【０１３７】
Ｂ．５．２．イベントルーティング動作
ＵＩｐａｎｅマネージャは、全てのイベントをアプリケーションスレッドのメッセージポンプにディスパッチする。より具体的には、ユーザ入力イベントは、当該イベントが処理されるか、またはＵＩｐａｎｅ包含階層が終了する（すなわち、イベントが、当該イベントを消費せず、親を持たないＵＩｐａｎｅに達するとき）まで、ＵＩｐａｎｅ包含階層を「泡のように上がる」。
【０１３８】
ＵＩｐａｎｅが中断されなかった場合に限り、ペイントイベントが包含階層の最も高いレベルのＵＩｐａｎｅにディスパッチされる。最も高いレベルのＵＩｐａｎｅは、ペイントイベントをそのＵＩｐａｎｅの子にディスパッチする役割を負う。例えば、ＵＩｐａｎｅがそのＵＩｐａｎｅの子としていくつかのボタンを有する場合、ＵＩｐａｎｅはペイントイベントを受け取ることになり、ＵＩｐａｎｅはボタン上でペイントを引き起こす役割を負う。
【０１３９】
Ｂ．５．３．ＵＩｐａｎｅフォーカスおよびナビゲーション動作
１つの例示的な実装によれば、子ＵＩｐａｎｅの間のナビゲーションは、（例えば、リモートコントローラ１１６によって提供される）方向リモートキーを用いて達成される。例えば、下キーが押される場合、アクティブな子ＵＩｐａｎｅの下方の最も近い子がフォーカスを受け取ることになる。方向キーイベントが処理されない場合、親ＵＩｐａｎｅはそのＵＩｐａｎｅの兄弟のうちの１つにフォーカスを渡すことを試みる。
【０１４０】
より具体的には、ナビゲーションは、様々なＵＩｐａｎｅの位置で生成される「ホットポイント（ｈｏｔ  ｐｏｉｎｔｓ）」によって決定される。ホットポイントの位置は、どの矢印キーが選択されるかに依存する。例えば、図６において、現在、コントロールＡがフォーカスを持っていると仮定する。下キーが選択される場合、現在のフォーカスを持っているコントロールのホットポイントは、コントロールＡの下端の中央に対応することになる。次いで、このホットポイントは、周辺のコントロールのそれぞれの上端に投影される。続いて、各ホットポイントの対の間の距離が測定される。最も短い正の距離を有する対が、フォーカスを受け取るべき次のコントロールを決定する。この場合、コントロールＡとコントロールＢの間のホットポイントの距離（線ＡＢ）が、コントロールＡとコントロールＣの間のホットポイントの距離（ＡＣ）よりも短く、その結果コントロールＢが次にフォーカスを受け取ることになる。（Ｄは完全にＡよりも上に置かれているのでＤは考慮されない）。
【０１４１】
２つのコントロールが重なり合っている場合は特別なケースが発生する。例えば、コントロールＤの上端がコントロールＡの上にあるようにコントロールＤがコントロールＡと重なる場合、コントロールＤは下キーの押下時に考慮されることになる。したがって、この場合、線ＡＤが線ＡＢおよび線ＡＣの両方よりも短い場合はコントロールＤがフォーカスを受け取ることになる。
【０１４２】
Ｂ．６．グラフィックス機能
グラフィックスに関連する機能の主要な目的は、（リソースが制限された環境の制約を考慮して）できるだけ経済的におよび効果的に開発者の要求を満たすＡＰＩの組を提供することである。
【０１４３】
１つの全体的な特徴によれば、上述の目的は、一部分において、（デスクトップ環境において提供される「完全な」ＡＰＩと比較して）簡素化されたＡＰＩの組を使用することによって達成される。例えば、線および楕円描画アルゴリズムなどの簡素化されたグラフィックスＡＰＩが提供される。また、ＡＰＩの組は、将来の拡張を可能にするように柔軟であるべきである。
【０１４４】
別の特徴によれば、グラフィックス機能は、セットトップボックスのハードウェアと直接インタラクトし、可能な限りハードウェアの処理能力を活用する。例えば、このシステムにおいては、描画プリミティブはハードウェアに直接書き込むことができる。対称的に、従来のグラフィックスＡＰＩは、「重い」デスクトップＡＰＩの裏で過度に抽象化されている（したがって、リソースが制限されたセットトップボックス環境において適用されるときに遅くなる）。
【０１４５】
より具体的には、グラフィックス機能は、可能ならばセットトップボックス１０２のハードウェアＡＰＩに対して呼び出しが行われるようにコードパスを事前設定することができる。一例として、ＤＣＴ２０００セットトップボックスのハードウェアは、非常に高速に動作するブロックコピー機能を提供する。しかし、この機能は、コピー元ポインタおよびコピー先ポインタがワード整列されていることを要求する。グラフィックス機能は、この機能の要件に対応し、したがってこの機能を呼び出す。別の例として、Ｍ６８０００チップはＤＢＲＡと呼ばれる特殊機能を有する。グラフィックス機能は、このチップの要件（例えばアラインメント）に対応することができ、したがってこのチップを直接呼び出して非常に高速なメモリ転送を提供することができる。
【０１４６】
別の例として、グラフィックス機能は、セットトップボックス１０２のライン制御レジスタ（ＬＣＲ）２１０を利用して効果的なやり方で様々な特殊効果を提供することもできる。例えば、スクリーンの解像度が４８０ラインであると仮定する。開発者は、スクリーン上のデータのそれぞれのラインを指す、ＬＣＲ２１０内の４８０個の記憶域を割り当てることができる。すなわち、これは、オンスクリーンディスプレイ全体に対してメモリビットマップバッファを割り当てることによって達成されることができる。通常の状態において、各ＬＣＲ記憶域は、ビットマップの各ラインの始まりを指す。特殊効果は、様々なアルゴリズムに従ってＬＣＲ２１０を使用してラインの順番を操作することによって達成されることができる。簡単な事例を挙げると、ＬＣＲ［１０］がビットマップ内のライン９を指し、ＬＣＲ［９］がビットマップ内のライン１０を指すとした場合、セットトップボックス１０２は入れ換えた順番でこれらの２つのラインを表示する。
【０１４７】
より具体的には、明細書において説明されるセットトップボックスシステムの例示的な独特なグラフィックス機能は、遷移効果、カスタムパレットのサポート、ｂｌｔレンダリング機能、Ｔｒｕｅ  Ｔｙｐｅフォントのレンダリングなどを含む。これらの機能は、以下でより詳細に説明される。付録、セクションＤは、これらの機能に関するさらなる詳細を提供する。
【０１４８】
Ｂ．６．１．遷移効果
セットトップボックス１０２は、あるグラフィカルな表示を別のグラフィカルな表示に切り換えるときに効果を発するいくつかの遷移効果を提供する。以下の機能は、例示的な遷移効果を提供する。また、これらの機能は、上述のやり方でＬＣＲ２１０を直接操作することによって実行されることができる。
【０１４９】
Ｓｃｒｏｌｌメソッドは、メソッドで指定される「ｏｆｆｓｅｔ」パラメータが正の数であればスクリーンを上にスクロールさせ、「ｏｆｆｓｅｔ」が負の数であれば下にスクロールさせる。この効果は、メソッドにおいて指定される「ｕｐＢｏｕｎｄ」および「ｌｏｗＢｏｕｎｄ」パラメータによって定義される境界の中で提供される。
【０１５０】
Ｄｅｃｉｍａｔｅメソッドはデシメーション効果をシミュレートする。より具体的には、このメソッドは、効果のレベルを指示するための入力としてパーセンテージの数値を取る。デシメーション効果は、メソッドにおいて指定される「ｕｐＢｏｕｎｄ」および「ｌｏｗＢｏｕｎｄ」パラメータの間で提供される。
【０１５１】
ＲａｓｔｅｒＦａｄｅメソッドは、ラスタフェード（ｒａｓｔｅｒ  ｆａｄｅ）効果をシミュレートする。このメソッドは、効果のレベルを指示するための入力としてパーセンテージの数値を取る。デシメーション効果は、メソッドにおいて指定される「ｕｐＢｏｕｎｄ」および「ｌｏｗＢｏｕｎｄ」パラメータの間で提供される。
【０１５２】
Ｅｘｐｏｓｅメソッドは、ＵＩｐａｎｅで指定された「ｕｐＢｏｕｎｄ」および「ｌｏｗＢｏｕｎｄ」の中心において、メソッドで指定された「ｌｉｎｅｓＴｏＥｘｐｏｓｅ」パラメータによって指定されたいくつかのラインを露出する。
【０１５３】
Ｂ．６．２．パレットおよび解像度効果
セットトップボックスシステムは、開発者が解像度およびカラーパレットを動的に変更することを可能にする。これは、より多様で、したがってより魅力的なユーザの体験をもたらすことができる。例えば、開発者は、第１のアプリケーションから第２のアプリケーションへの切換が場合によって（第２アプリケーションに対応する）カラーパレットおよび解像度を変更することをシステムに促すことになるようにシステムを設定することができる。
【０１５４】
上述の効果を達成するために、システムはＳｅｔＵｓｅｒＰａｌｅｔｔｅメソッドを提供する。このメソッドは、ユーザにグラフィックスオブジェクトに関連付けられるべきカスタムパレットを指定させる。
【０１５５】
加えて、ＲｅｓｔｏｒｅＤｅｆａｕｌｔＰａｌｅｔｔｅメソッドがデフォルトのオンスクリーンカラーパレットを復元する。
【０１５６】
ＳｅｔＯＳＤＲｅｓｏｌｕｔｉｏｎメソッドは、呼び出し元がオンスクリーンディスプレイの解像度を設定することを可能にする。
【０１５７】
ＲｅｓｔｏｒｅＤｅｆａｕｌｔＯＳＤＲｅｓｏｌｕｔｉｏｎメソッドは、デフォルトのオンスクリーンディスプレイの解像度を復元する。
【０１５８】
Ｂ．６．３．Ｂｌｔ効果
ＢｉｔＢｌｔメソッドは、あるグラフィックスオブジェクトからの内容を別のグラフィックスオブジェクトにブロック転送する。この機能を用いて、アプリケーション開発者（特にゲームプログラマ）は、グラフィックスコンテンツの一部分を別のグラフィックスコンテンツに複製することができる。
【０１５９】
Ｂ．６．４．フォントレンダリング機能
全体的なフォント処理機能として、セットトップボックスシステムは、フォントから不要な情報を取り除いてセットトップボックス環境においてフォントのより効率的な処理を提供することができる。すなわち、ＦｏｎｔＯｐｔｉｍｉｚｅｒツールが、コードセットファイル外の文字を除外し、文字を再マッピングし、ファイルサイズを最小化するためにグリフ情報を取り除くことによってフォントファイルを最適化する。したがって、この機能は、リソースが制限された環境において魅力的なアプリケーションを実行するという全体の目的に寄与する。
【０１６０】
ＳｅｔＡｎｔｉＡｌｉａｓＢａｃｋｇｒｏｕｄＣｏｌｏｒメソッドは、アンチエイリアシングに使用されるべき色を設定する。より具体的には、この呼び出しは、アンチエイリアシングに用いる中間色のテーブルを構築するために使用される色を定める。
【０１６１】
ＳｅｔＦｏｎｔメソッドは、現在のフォントを文字列描画操作に使用されるように設定する。
【０１６２】
ＤｒａｗＳｔｒｉｎｇメソッドは、そのメソッドの様々なパラメータ（例えば、追加的な情報を得るために付録を参照されたい）によって管理される特定のやり方で、指定された色で文字列を描画する。
【０１６３】
ＢｒｅａｋＳｔｒｉｎｇメソッドは、現在設定されているフォントを使用して文字列を単語に分解するように試みる。
【０１６４】
ＧｅｔＦｏｎｔＭｅｔｒｉｃｓメソッドは、現在指定されているフォントの属性を取り出してテキストの正確なレイアウトを提供する。
【０１６５】
Ｃ．例示的な動作方法
図７は、セットトップボックスシステムの動作をフローチャート形式で示す。検討を容易にするために、特定の動作が、特定の順序で実行される別個のステップを構成するものとして説明される。そのような実装は例示的であって限定的ではない。本明細書において説明される特定のステップは互いにグループ化され、単一の操作で実行されることができ、特定のステップは本開示において説明される例で使用される順序と異なる順序で実行されてもよい。このフローチャートで説明される機能は前のセクションで既に説明されたので、セクションＣは主にそれらの機能の簡単なおさらいとして役立つことになる。
【０１６６】
セット７０２において、セットトップボックス１０２は、上述のＩｎｉｔｉａｌｉｚｅメソッドを使用してアプリケーションを起動およびロードする。これは、セットトップボックス１０２にアプリケーションのためのメッセージスレッドを確立するように促す。
【０１６７】
ステップ７０４において、セットトップボックス１０２は、アプリケーションの実行中に必要に応じてアプリケーションを中断し、そして再開する。例えば、セットトップボックス１０２は、別のアプリケーションが現在のアプリケーションの上にくるＵＩｐａｎｅを生成する場合に現在のアプリケーションを中断することができる。セットトップボックスは、非アクティブなオブジェクトを取り除くことによって上述のやり方でプログラムの実行中にメモリ管理を実行する。
【０１６８】
ステップ７０６において、セットトップボックス１０２はアプリケーションを抜ける／終了する。
【０１６９】
Ｄ．付録
以下のセクションは、前のセクションで確認された種々の機能のより完全な一覧を提供する。
【０１７０】
Ｄ．１．ＩＵＩｐａｎｅインターフェース
シェルは、全てのＵＩｐａｎｅの根本として働く基底ＩＵＩｐａｎｅインターフェースを定義する。このインターフェースは、ＵＩｐａｎｅマネージャ３１２がそれぞれのＵＩｐａｎｅの実装の詳細を知ることなしに全てのＵＩｐａｎｅを制御することを可能にする。ＩＵＩｐａｎｅインターフェースは正式にはｐｕｂｌｉｃ  ｉｎｔｅｒｆａｃｅ  ＩＵＩｐａｎｅと表されることができる。
【０１７１】
ＩＵＩｐａｎｅインターフェースは、以下の例示的で非網羅的な列挙されたインターフェース機能を提供することができる。
【０１７２】
・Ｇｒａｐｈｉｃｓ  ＣｒｅａｔｅＧｒａｐｈｉｃｓ（）メソッドはＵＩｐａｎｅのためのグラフィックスオブジェクトを取得する。
【０１７３】
・ｖｏｉｄ  Ｈｉｄｅ（）メソッドは、ＵＩｐａｎｅを不可視状態にする。
【０１７４】
・ｖｏｉｄ  ＮｏｔｉｆｙＯｎＣｌｏｓｅ（）メソッドは、ＵＩｐａｎｅにそのＵＩｐａｎｅが閉じられたことを知らせるためにシェルによって呼び出される。
【０１７５】
・ｖｏｉｄ  ＮｏｔｉｆｙＯｎＦｏｃｕｓ（ｂｏｏｌ  ｆｏｃｕｓ）は、ＵＩｐａｎｅにそのＵＩｐａｎｅがフォーカスを取得したか、または失ったことを知らせるためにシェルによって呼び出される。パラメータ「ｆｏｃｕｓ」は、ＵＩｐａｎｅがフォーカスを取得したのか、または失ったのかを指示する値である。
【０１７６】
・ｖｏｉｄ  ＮｏｔｉｆｙＯｎＫｅｙ（ｉｎｔ  ｋｅｙＣｏｄｅ，ｒｅｆ  ｂｏｏｌ  ｈａｎｄｌｅｄ）メソッドは、現在アクティブなＵＩｐａｎｅにユーザ入力イベントを通知するためにシェルによって呼び出される。そのとき、ＵＩｐａｎｅはそのＵＩｐａｎｅの現在アクティブな子に当該イベントを適切にルーティングすることになる。
【０１７７】
・ｖｏｉｄ  ＮｏｔｉｆｙＯｎＰａｉｎｔ（Ｒｅｃｔａｎｇｌｅ  ｒｅｃｔａｎｇｌｅ）メソッドは、現在アクティブなＵＩｐａｎｅにペイントイベントを通知するためにシェルによって呼び出される。このメソッドにおいて、パラメータ「ｒｅｃｔａｎｇｌｅ」はアクティブなＵＩｐａｎｅの「汚れた」領域を指す。全てのそのＵＩｐａｎｅの子にペイントの通知を送ることはアクティブな（親）ＵＩｐａｎｅの役割である。
【０１７８】
・ｖｏｉｄ  ＳｅｔＰａｉｎｔＴｈｒｏｔｔｌｉｎｇ（ｂｏｏｌ  ｏｎ）メソッドは、ペイントの抑制をオンにするか、またはオフにする。
【０１７９】
・ｖｏｉｄ  Ｓｈｏｗ（）メソッドは、ＵＩｐａｎｅを可視状態にする。
【０１８０】
Ｄ．２．ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．ＵＩｐａｎｅｓ
Ｄ．２．１．ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．ＵＩｐａｎｅｓ名前空間の概要
概要として、ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．ＵＩｐａｎｅｓ名前空間は、低価格のセットトップボックス上での実行のために最適化された「軽いＴＶアプリケーション」を作成するためのクラスを含む。前のセクションで説明されたように、セットトップボックスはインタープリタベースのＣＬＲシステムを実行する。
【０１８１】
この名前空間内のクラスは、以下のカテゴリにグループ化されることができる。
【０１８２】
・ＵＩｐａｎｅＢａｓｅクラスのカテゴリは、ＴＶアプリケーション上に表示される全てのＵＩｐａｎｅコントロールのための基本機能を提供する。ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．ＵＩｐａｎｅｓ名前空間内のほとんどのクラスは、ＵＩｐａｎｅＢａｓｅクラスから派生する。ＵＩｐａｎｅＢａｓｅクラスはコンテナでもあり、このことはＵＩｐａｎｅＢａｓｅクラスが子ＵＩｐａｎｅを含むことができることを意味する。
【０１８３】
・ＵＩｐａｎｅ  Ｆｏｒｍｓクラスのカテゴリは、最も高いレベルのコンテナＵＩｐａｎｅの作成を可能にする。
【０１８４】
・ＵＩｐａｎｅ  Ｃｏｎｔｒｏｌｓクラスのカテゴリは、ユーザインターフェースの作成を可能にする。例えば、ＢｕｔｔｏｎクラスはＵＩｐａｎｅのコントロールである。
【０１８５】
上述の要約で述べられたクラスのカテゴリに対するサポートを提供する、ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．ＵＩｐａｎｅｓ名前空間内のいくつかのクラスがある。図４は、これらのクラスの例示的な階層構造を示す。
【０１８６】
概要として、クラスに関して、
・ＢｕｔｔｏｎクラスはＴＶのボタンコントロールを表す。
【０１８７】
・Ｃｏｎｔｒｏｌクラスは、コントロールのためのベースクラスを定義する。コントロールオブジェクトは、具体的な機能を実行する視覚的な表示を持ったオブジェクトを定義する。
【０１８８】
・Ｆｏｒｍクラスは、親のない最も高いレベルのコンテナＵＩｐａｎｅのためのベースクラスを定義する。このクラス（フォームオブジェクト）によって生成されたオブジェクトは、何らかの視覚的な表示を持つか、または視覚的な表示を持たず、子ＵＩｐａｎｅを含むことができる。
【０１８９】
・Ｔｒａｎｓｉｔｉｏｎクラスは、フォームオブジェクトに遷移を適用するためのメソッドを定義する。
【０１９０】
・ＵＩｐａｎｅＢａｓｅクラスは、ＵＩｐａｎｅ（このクラスは視覚的な表示を有するオブジェクト、またはその他のＵＩｐａｎｅＢａｓｅオブジェクトを含むオブジェクトを定義する）のためのベースクラスを定義する抽象クラスである。
【０１９１】
デリゲートに関して、
・ＵＩｐａｎｅＥｖｅｎｔＨａｎｄｌｅｒクラスは、任意のＵＩｐａｎｅイベントを処理することになるメソッドを表す。
【０１９２】
・ＫｅｙＥｖｅｎｔＨａｎｄｌｅｒクラスは、キーイベントを処理することになるメソッドを表す。
【０１９３】
・ＴｒａｎｓｉｔｉｏｎＥｖｅｎｔＨａｎｄｌｅｒクラスは、遷移イベントを処理することになるメソッドを表す。
【０１９４】
列挙型に関して、
・Ｋｅｙクラスは、ＴＶアプリケーション内で使用される全ての可能なキーコードを表す。
【０１９５】
・ＢｕｔｔｏｎＳｔｙｌｅクラスは、全ての可能なボタンスタイルを表す。
【０１９６】
以下のサブセクションは、ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．ＵＩｐａｎｅｓ名前空間の上で確認された特徴のそれぞれに関する追加的な詳細を提供する。
【０１９７】
Ｄ．２．２．ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．ＵＩｐａｎｅｓ．ＵＩｐａｎｅＢａｓｅ
上で要約されたように、ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．ＵＩｐａｎｅｓ．ＵＩｐａｎｅＢａｓｅクラス（ＵＩｐａｎｅＢａｓｅクラス）は、ＵＩｐａｎｅのための抽象ベースクラスを指す（ここでＵＩｐａｎｅは視覚的な表示を有するオブジェクト、またはその他のＵＩｐａｎｅＢａｓｅオブジェクトを含むオブジェクトを定義する）。すなわち、ＵＩｐａｎｅＢａｓｅクラスは、情報をユーザに対して表示するクラスによって必要とされる非常に基本的な機能を実装する。例えば、ＵＩｐａｎｅＢａｓｅクラスは、ＵＩｐａｎｅの境界を定義し、子ＵＩｐａｎｅを管理し、キーイベントを介してユーザ入力を処理する。ＵＩｐａｎｅＢａｓｅクラスは正式にはｐｕｂｌｉｃ  ａｂｓｔｒａｃｔ  ｃｌａｓｓ  ＵＩｐａｎｅＢａｓｅ：ＩＵＩｐａｎｅと表されることができる。
【０１９８】
レイアウトの話題に関して、ＵＩｐａｎｅＢａｓｅクラスはコンテナであり、このことはＵＩｐａｎｅＢａｓｅクラスが任意の最も高いレベルではないＵＩｐａｎｅを保持することができることを意味する。ＵＩｐａｎｅは、そのＵＩｐａｎｅＢａｓｅクラスの子のコレクション上でＡｄｄ、Ｉｎｓｅｒｔ、Ｒｅｍｏｖｅ、およびＲｅｍｏｖｅＡｔを呼び出すことによって追加されることができ、コンテナから削除されることができる。ＵＩｐａｎｅの作成中にＵＩｐａｎｅの上端、左端、幅、および高さの値が設定される。全ての子は親ＵＩｐａｎｅの境界の中になければならない。ユーザの入力キーイベントは、まず、フォーカスされているＵＩｐａｎｅに向かうことになる。ＵＩｐａｎｅがキーイベントを処理しない場合、当該イベントはそのＵＩｐａｎｅの親ＵＩｐａｎｅに渡されることになる。
【０１９９】
ＵＩｐａｎｅＢａｓｅクラスによって可能にされるナビゲーション動作は上で（例えば、サブセクションＢ．５．２において）説明された。
【０２００】
ペインティングの話題に関して、ＵＩｐａｎｅＢａｓｅクラスはペインティングを実装しない。すなわち、１つの例示的な実装においては、開発者が背景を含む全てのペインティングに関する責任を負う。開発者は、ペインティングを実行するためのＯｎＰａｉｎｔメソッドをオーバーライドすることができる。しかし、ＵＩｐａｎｅＢａｓｅは、そのＵＩｐａｎｅＢａｓｅの子のコレクションのうちの任意の子コントロールをペイントすることになる。
【０２０１】
ＵＩｐａｎｅＢａｓｅクラスは、以下の例示的で非網羅的な列挙されたｐｕｂｌｉｃなコンストラクタを提供することができる。
【０２０２】
・ｐｕｂｌｉｃ  ＵＩｐａｎｅＢａｓｅ（ｉｎｔ  ｌｅｆｔ，ｉｎｔ  ｔｏｐ，ｉｎｔ  ｗｉｄｔｈ，ｉｎｔ  ｈｅｉｇｈｔ，ｂｏｏｌ  ｔｏｐＬｅｖｅｌ）コンストラクタは、特定の位置およびサイズを用いてＵＩｐａｎｅＢａｓｅクラスの新しいインスタンスを初期化する。ＵＩｐａｎｅがスクリーンの範囲の外にある場合、例外が投げられる。このコンストラクタにおいて、パラメータ「ｌｅｆｔ」は、ＵＩｐａｎｅの左端と、そのＵＩｐａｎｅのコンテナのクライアント領域の左端との間の距離を画素数で示す。最小は０であり、最大はＯＳＤの幅に対応する。値がこれらの範囲の外にある場合、例外が投げられる。「ｔｏｐ」パラメータは、ＵＩｐａｎｅの下端と、そのＵＩｐａｎｅのコンテナのクライアント領域の上端との間の距離を画素数で示す。最小は０であり、最大はＯＳＤの高さに対応する。値がこれらの範囲の外にある場合、例外が投げられる。「ｗｉｄｔｈ」パラメータは、ＵＩｐａｎｅの幅を画素数で示す。最小は１であり、最大はＯＳＤの幅からｌｅｆｔパラメータを引いた値に対応する。値がこれらの範囲の外にある場合、例外が投げられる。「ｈｅｉｇｈｔ」パラメータは、ＵＩｐａｎｅの高さを画素数で示す。最小は１であり、最大はＯＳＤの高さからｔｏｐパラメータを引いた値に対応する。値がこれらの範囲の外にある場合、例外が投げられる。最後に、「ｔｏｐＬｅｖｅｌ」パラメータは、オブジェクトが最も高いレベルのＵＩｐａｎｅであるかどうかを示す。
【０２０３】
ＵＩｐａｎｅＢａｓｅクラスは、以下の例示的で非網羅的な列挙されたｐｕｂｌｉｃなプロパティを提供することができる。
【０２０４】
・ｐｕｂｌｉｃ  ｖｉｒｔｕａｌ  ｂｙｔｅ  ＢａｃｋＣｏｌｏｒプロパティは、ＵＩｐａｎｅに対する背景色のインデックスを取得または設定する。例示的なデフォルトは２２４である。
【０２０５】
・ｐｕｂｌｉｃ  ｖｉｒｔｕａｌ  ｂｏｏｌ  ＣａｎＦｏｃｕｓプロパティは、ＵＩｐａｎｅがフォーカスを受け取ることができるかどうかを示す値を取得する。
【０２０６】
・ｐｕｂｌｉｃ  ＡｒｒａｙＬｉｓｔ  Ｃｈｉｌｄｒｅｎプロパティは、ＵＩｐａｎｅに含まれるＵＩｐａｎｅのコレクションを取得する。
【０２０７】
・ｐｕｂｌｉｃ  ｂｏｏｌ  Ｅｎａｂｌｅｄプロパティは、ＵＩｐａｎｅがユーザのインタラクションに応答可能かどうかを示す値を取得または設定する。デフォルトはｔｒｕｅである。このプロパティは、ＵＩｐａｎｅが最も高いレベルのＵＩｐａｎｅでなく、最も高いレベルのＵＩｐａｎｅである親または親の親を持たない場合にｆａｌｓｅを返す。
【０２０８】
・ｐｕｂｌｉｃ  ｂｏｏｌ  Ｆｌｏａｔｉｎｇプロパティは、最も高いレベルのＵＩｐａｎｅがフローティングＵＩｐａｎｅであるかどうかを示す値を取得または設定する。フローティングＵＩｐａｎｅは、キーをその他の最も高いレベルのＵＩｐａｎｅに渡すことになる最も高いレベルのＵＩｐａｎｅである。最も高いレベルでないＵＩｐａｎｅはフローティングＵＩｐａｎｅになることはできない。最も高いレベルでないＵＩｐａｎｅに対するＦｌｏａｔｉｎｇプロパティの設定の試みは無視されることになる。
【０２０９】
・ｐｕｂｌｉｃ  ｂｏｏｌ  Ｆｏｃｕｓｅｄプロパティは、ＵＩｐａｎｅが入力フォーカスを有するかどうかを示す値を取得する。
【０２１０】
・ｐｕｂｌｉｃ  ｖｉｒｔｕａｌ  ｂｙｔｅ  ＦｏｒｅＣｏｌｏｒプロパティは、ＵＩｐａｎｅＢａｓｅに対する前景色のインデックスを取得または設定する。例示的なデフォルトは２２７である。
【０２１１】
・ｐｕｂｌｉｃ  ｉｎｔ  Ｈｅｉｇｈｔプロパティは、ＵＩｐａｎｅの高さを取得する。
【０２１２】
・ｐｕｂｌｉｃ  ｉｎｔ  Ｌｅｆｔプロパティは、ＵＩｐａｎｅの左端と、そのＵＩｐａｎｅのコンテナのクライアント領域の左端との間の距離を画素数で取得する。
【０２１３】
・ｐｕｂｌｉｃ  ｖｉｒｔｕａｌ  ＩＵＩｐａｎｅ  Ｐａｒｅｎｔプロパティは、ＵＩｐａｎｅの親コンテナを取得および設定する。ＵＩｐａｎｅが親の範囲の外にある場合、例外が投げられる。最も高いレベルのＵＩｐａｎｅは親を持つことができない。
【０２１４】
・ｐｕｂｌｉｃ  ｉｎｔ  Ｔｏｐプロパティは、ＵＩｐａｎｅの下端と、そのＵＩｐａｎｅのコンテナのクライアント領域の上端との間の距離を画素数で取得する。
【０２１５】
・ｐｕｂｌｉｃ  ｂｏｏｌ  Ｖｉｓｉｂｌｅプロパティは、ＵＩｐａｎｅが表示されるかどうかを示す値を取得する。デフォルトは最も高いレベルのＵＩｐａｎｅに対してｆａｌｓｅであり、全てのその他のＵＩｐａｎｅに対してｔｒｕｅである。このプロパティは、ＵＩｐａｎｅが最も高いレベルでなく、最も高いレベルのＵＩｐａｎｅである親または親の親を持たない場合にｆａｌｓｅを返す。
【０２１６】
・ｐｕｂｌｉｃ  ｉｎｔ  Ｗｉｄｔｈプロパティは、ＵＩｐａｎｅの幅を取得する。
【０２１７】
ＵＩｐａｎｅＢａｓｅクラスは、以下の例示的で非網羅的な列挙されたｐｕｂｌｉｃなメソッドを提供することができる。
【０２１８】
・ｐｕｂｌｉｃ  Ｇｒａｐｈｉｃｓ  ＣｒｅａｔｅＧｒａｐｈｉｃｓ（）メソッドは、ＵＩｐａｎｅのためのグラフィックスオブジェクトを作成する。ＣｒｅａｔｅＧｒａｐｈｉｃｓ（）メソッドは、ＵＩｐａｎｅに対するグラフィックスオブジェクトを返す。
【０２１９】
・ｐｕｂｌｉｃ  ｂｏｏｌ  Ｆｏｃｕｓ（）メソッドは、ＵＩｐａｎｅに入力フォーカスを設定する。デフォルトでは、コントロールはフォーカスを持たない。ＵＩｐａｎｅにフォーカスを設定することは、前にフォーカスされていた任意のＵＩｐａｎｅからフォーカスを外す。フォーカスを設定することは非同期的であり、したがってＵＩｐａｎｅは実際にはすぐにフォーカスを取得するわけではない。このメソッドは、入力フォーカスのリクエストが成功した場合「ｔｒｕｅ」を返し、そうでなければ「ｆａｌｓｅ」を返す。ｔｒｕｅを返すことは、ＵＩｐａｎｅがＵＩｐａｎｅマネージャ３１２にそのＵＩｐａｎｅがフォーカスを取得することを望んでいることを知らせることができることを意味することに留意されたい。ｔｒｕｅを返すことはＵＩｐａｎｅが既にフォーカスを取得したことを意味せず、フォーカスを提供することはＵＩｐａｎｅマネージャ３１２の役割である。
【０２２０】
・ｐｕｂｌｉｃ  ｖｏｉｄ  Ｈｉｄｅ（）メソッドは、ＵＩｐａｎｅをユーザから隠す。
【０２２１】
・ｐｕｂｌｉｃ  ｖｏｉｄ  Ｉｎｖａｌｉｄａｔｅ（Ｒｅｃｔａｎｇｌｅ  ｒｅｇｉｏｎ）メソッドは、ＵＩｐａｎｅの指定された領域を無効化し（すなわち、このメソッドは、次のペイント操作時に再ペイントされることになる領域であるＵＩｐａｎｅの更新領域に領域を追加する）、ペイントメッセージが当該ＵＩｐａｎｅに送信されるようにする。また、このメソッドはＵＩｐａｎｅに割り当てられた子ＵＩｐａｎｅも無効化する。このメソッドにおいて、「ｒｅｇｉｏｎ」パラメータは無効化されるべき領域を示す。ｒｅｇｉｏｎパラメータがｎｕｌｌの場合は、ＵＩｐａｎｅ全体が無効化される。
【０２２２】
・ｐｕｂｌｉｃ  ｖｏｉｄ  Ｒｅｆｒｅｓｈ（）メソッドは、強制的にＵＩｐａｎｅにそのＵＩｐａｎｅのクライアント領域を無効化させ、そのＵＩｐａｎｅ自体と全ての子ＵＩｐａｎｅとを直ちに再描画させる。
【０２２３】
・ｐｕｂｌｉｃ  ｖｏｉｄ  Ｓｈｏｗ（）メソッドは、ＵＩｐａｎｅをユーザに対して表示する。
【０２２４】
・ｐｕｂｌｉｃ  ｖｏｉｄ  ＳｕｓｐｅｎｄＬａｙｏｕｔ（ｂｏｏｌ  ｓｕｓｐｅｎｄ）メソッドは、ＵＩｐａｎｅに対するレイアウトロジックを一時的に停止する、または再開する。このメソッドにおいて、「ｓｕｓｐｅｎｄ」パラメータは、レイアウトが一時停止されるべきであるかどうかを指示する。
【０２２５】
ＵＩｐａｎｅＢａｓｅクラスは、以下の例示的で非網羅的な列挙されたｐｕｂｌｉｃなイベントを提供することができる。
【０２２６】
・ｐｕｂｌｉｃ  ｅｖｅｎｔ  ＵＩｐａｎｅＥｖｅｎｔＨａｎｄｌｅｒ  ＥｎａｂｌｅｄＣｈａｎｇｅｄは、Ｅｎａｂｌｅｄプロパティの値が変更されたときに発生する。
【０２２７】
・ｐｕｂｌｉｃ  ｅｖｅｎｔ  ＵＩｐａｎｅＥｖｅｎｔＨａｎｄｌｅｒ  ＦｏｃｕｓＣｈａｎｇｅｄは、ＵＩｐａｎｅの入力フォーカスが変わるときに発生する。
【０２２８】
・ｐｕｂｌｉｃ  ｅｖｅｎｔ  ＫｅｙＥｖｅｎｔＨａｎｄｌｅｒ  ＫｅｙＰｒｅｓｓは、ＵＩｐａｎｅがフォーカスを有する間にキーが押されたときに発生する。
【０２２９】
・ｐｕｂｌｉｃ  ｅｖｅｎｔ  ＵＩｐａｎｅＥｖｅｎｔＨａｎｄｌｅｒ  ＶｉｓｉｂｉｌｉｔｙＣｈａｎｇｅｄは、ＵＩｐａｎｅの可視性が変わったときに発生する。
【０２３０】
ＵＩｐａｎｅＢａｓｅクラスは、以下の例示的で非網羅的な列挙されたｐｒｏｔｅｃｔｅｄなメソッドを提供することができる。
【０２３１】
・ｐｒｏｔｅｃｔｅｄ  ｖｉｒｔｕａｌ  ｖｏｉｄ  ＯｎＥｎａｂｌｅｄＣｈａｎｇｅｄ（）メソッドは、ＥｎａｂｌｅｄＣｈａｎｇｅｄイベントを引き起こす。
【０２３２】
・ｐｒｏｔｅｃｔｅｄ  ｖｉｒｔｕａｌ  ｖｏｉｄ  ＯｎＦｏｃｕｓＣｈａｎｇｅｄ（）メソッドは、ＦｏｃｕｓＣｈａｎｇｅｄイベントを引き起こす。
【０２３３】
・ｐｒｏｔｅｃｔｅｄ  ｖｉｒｔｕａｌ  ｖｏｉｄ  ＯｎＫｅｙＰｒｅｓｓ（Ｋｅｙｓ  ｋｅｙＣｏｄｅ，ｒｅｆ  ｂｏｏｌ  ｈａｎｄｌｅｄ）メソッドは、ＫｅｙＰｒｅｓｓイベントを引き起こす。このメソッドにおいて、「ｋｅｙＣｏｄｅ」パラメータはキーイベントによって使用されるべきキーコードを示す。「ｈａｎｄｌｅ」パラメータは、キーイベントが処理されかどうかを指示する値を示す。
【０２３４】
・ｐｒｏｔｅｃｔｅｄ  ｖｉｒｔｕａｌ  ＯｎＰａｉｎｔ（Ｇｒａｐｈｉｃｓ  ｇｒａｐｈｉｃｓ，Ｒｅｃｔａｎｇｌｅ  ｃｌｉｐＲｅｃｔａｎｇｌｅ）メソッドは、基本的なペイントメソッドを提供する。すなわち、このメソッドは、ｃｌｉｐＲｅｃｔａｎｇｌｅ内の子をペイントする。言い換えると、「ｃｌｉｐＲｅｃｔａｎｇｌｅ」パラメータは、ペイントされるべき領域を示す。ｃｌｉｐＲｅｃｔａｎｇｌｅがｎｕｌｌの場合は、全てがペイントされる。「ｇｒａｐｈｉｃｓ」パラメータは、ペインティングを実行するために使用されるグラフィックスを示す。ｇｒａｐｈｉｃｓがｎｕｌｌの場合、例外が投げられる。
【０２３５】
・ｐｒｏｔｅｃｔｅｄ  ｖｉｒｔｕａｌ  ＯｎＶｉｓｉｂｉｌｉｔｙＣｈａｎｇｅｄ（）メソッドは、ＶｉｓｉｂｉｌｉｔｙＣｈａｎｇｅｄイベントを引き起こす。
【０２３６】
Ｄ．２．３．ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．ＵＩｐａｎｅｓ．Ｆｏｒｍ
ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．ＵＩｐａｎｅｓ．Ｆｏｒｍクラス（Ｆｏｒｍクラス）は、上述のＵＩｐａｎｅＢａｓｅクラスから派生する。Ｆｏｒｍクラスは、親のない最も高いレベルのコンテナＵＩｐａｎｅのためのベースクラスを定義する。これらのオブジェクトは、何らかの視覚的な表示を持つか、または視覚的な表示を持たず、子ＵＩｐａｎｅを含むことができる。より具体的には、インタープリタベースのＣＬＲのアプリケーションは、主なおよびその他の最も高いレベルのＵＩｐａｎｅに対してフォームを使用することができる。アプリケーションは２つ以上のフォームを含むことができるが、それぞれのフォームはアプリケーションに登録されなければならない。主ＵＩｐａｎｅはＲｕｎを呼び出すときに自動的に登録されるが、後続の最も高いレベルのＵＩｐａｎｅ（またはフォーム）は、キーイベントおよびペイントイベントを受け取るために明示的に登録されなければならない。Ｆｏｒｍクラスは正式にはｐｕｂｌｉｃ  ｃｌａｓｓ  Ｆｏｒｍ：ＵＩｐａｎｅＢａｓｅと表されることができる。
【０２３７】
Ｆｏｒｍクラスは、以下の例示的で非網羅的な列挙されたｐｕｂｌｉｃなコンストラクタを提供することができる。
【０２３８】
・ｐｕｂｌｉｃ  Ｆｏｒｍ（）コンストラクタは、デフォルトの設定を用いてＦｏｒｍクラスの新しいインスタンスを初期化する。デフォルトでは、フォームはＯＳＤと同じサイズである。
【０２３９】
・ｐｕｂｌｉｃ  Ｆｏｒｍ（ｉｎｔ  ｌｅｆｔ，ｉｎｔ  ｔｏｐ，ｉｎｔ  ｗｉｄｔｈ，ｉｎｔ  ｈｅｉｇｈｔ）コンストラクタは、特定の位置およびサイズを用いてＦｏｒｍクラスの新しいインスタンスを初期化する。ＵＩｐａｎｅがスクリーンの範囲の外にある場合、例外が投げられる。ｌｅｆｔ、ｔｏｐ、ｗｉｄｔｈ、およびｈｅｉｇｈｔパラメータは、（ＵＩｐａｎｅＢａｓｅクラスとの関連で）上で説明された。
【０２４０】
Ｆｏｒｍクラスは、以下の例示的で非網羅的な列挙されたｐｕｂｌｉｃなメソッドを提供することができる。
【０２４１】
・ｐｕｂｌｉｃ  ｖｏｉｄ  Ｃｌｏｓｅ（）メソッドはフォームを閉じる。フォームが閉じられるとき、このオブジェクト内で生成された全てのリソースが閉じられ、フォームが破棄される。
【０２４２】
・ｐｕｂｌｉｃ  ｂｏｏｌ  ＤｏＴｒａｎｓｉｔｉｏｎ（）メソッドは遷移イベントを引き起こす。フォームがいずれかのその他のフォームと重なる場合、遷移イベントが引き起こされることができる。イベントが引き起こされる前に、フォームによって使用される水平の領域にスクリーンが固定される。固定されている間、その他のフォームが生成される、または固定された領域に移動されることはできない。このメソッドはイベントが引き起こされた場合に「ｔｒｕｅ」を返し、そうでない場合に「ｆａｌｓｅ」を返す。
【０２４３】
Ｆｏｒｍクラスは、以下の例示的で非網羅的な列挙されたｐｕｂｌｉｃなイベントを提供することができる。
【０２４４】
・ｐｕｂｌｉｃ  ｅｖｅｎｔ  ＵＩｐａｎｅＥｖｅｎｔＨａｎｄｌｅｒ  Ｃｌｏｓｅｄはフォームが閉じるときに発生する。
【０２４５】
・ｐｕｂｌｉｃ  ｅｖｅｎｔ  ＴｒａｎｓｉｔｉｏｎＥｖｅｎｔＨａｎｄｌｅｒ  ＴｒａｎｓｉｔｉｏｎはＤｏＴｒａｎｓｉｔｉｏｎ（）が呼び出されるときに発生する。
【０２４６】
Ｆｏｒｍクラスは、以下の例示的で非網羅的な列挙されたｐｒｏｔｅｃｔｅｄなメソッドを提供することができる。
【０２４７】
・ｐｒｏｔｅｃｔｅｄ  ｖｉｒｔｕａｌ  ｖｏｉｄ  ＯｎＣｌｏｓｅｄ（）メソッドは、Ｃｌｏｓｅｄイベントを引き起こす。
【０２４８】
Ｄ．２．４．ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．ＵＩｐａｎｅｓ．Ｃｏｎｔｒｏｌ
ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．ＵＩｐａｎｅｓ．Ｃｏｎｔｒｏｌクラス（Ｃｏｎｔｒｏｌクラス）は、ＵＩｐａｎｅＢａｓｅから派生する。このクラスはコントロールのためのベースクラスを定義する。コントロールは、特定の機能を実行する視覚的な表示を持ったオブジェクトである。例えば、インタープリタベースのＣＬＲのアプリケーションは、それらのアプリケーションのユーザインターフェース要素のためにコントロールを使用する。コントロールの例は、Ｂｕｔｔｏｎクラスから派生したオブジェクトである。Ｃｏｎｔｒｏｌクラスは正式にはｐｕｂｌｉｃ  ｃｌａｓｓ  Ｃｏｎｔｒｏｌ：ＵＩｐａｎｅＢａｓｅと表されることができる。
【０２４９】
Ｆｏｒｍクラスは、以下の例示的で非網羅的な列挙されたｐｕｂｌｉｃなコンストラクタを提供することができる。
【０２５０】
・ｐｕｂｌｉｃ  Ｃｏｎｔｒｏｌ（ｉｎｔ  ｌｅｆｔ，ｉｎｔ  ｔｏｐ，ｉｎｔ  ｗｉｄｔｈ，ｉｎｔ  ｈｅｉｇｈｔ）コンストラクタは、特定の位置およびサイズを用いてＣｏｎｔｒｏｌクラスの新しいインスタンスを初期化する。コントロールがスクリーンの境界の外にある場合、例外が投げられる。ｌｅｆｔ、ｔｏｐ、ｗｉｄｔｈ、およびｈｅｉｇｈｔパラメータは、（ＵＩｐａｎｅＢａｓｅクラスとの関連で）上で説明された。
【０２５１】
Ｃｏｎｔｒｏｌクラスは、以下の例示的で非網羅的な列挙されたｐｕｂｌｉｃなメソッドを提供することができる。
【０２５２】
・ｐｕｂｌｉｃ  ｖｏｉｄ  ＢｒｉｎｇＴｏＦｒｏｎｔ（）メソッドは、ＵＩｐａｎｅをｚ順の前面に持ってくる。ｚ順は、親の子コレクション内のインデックスによって決定される。より大きなインデックスは、より前面に近く、すなわちインデックスが０である場合、子は後ろに現れる。
【０２５３】
・ｐｕｂｌｉｃ  ｖｏｉｄ  ＳｅｎｄＴｏＢａｃｋ（）メソッドは、ＵＩｐａｎｅをｚ順の後ろに送る。
【０２５４】
Ｄ．２．５．ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．ＵＩｐａｎｅｓ．Ｂｕｔｔｏｎ
ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．ＵＩｐａｎｅｓ．Ｂｕｔｔｏｎクラス（Ｂｕｔｔｏｎクラス）はＣｏｎｔｒｏｌクラスから派生する。ＢｕｔｔｏｎクラスはＴＶのボタンコントロールを表す。すなわち、ボタンは、当該ボタンが入力フォーカスを有する場合、ＴＶリモコンのＯＫキーを使用して押されることができる。ボタンは子を含むこともできるが、これらの子はペイントされない。ボタンの外観は、Ｓｔｙｌｅプロパティ（ＢｕｔｔｏｎＳｔｙｌｅを参照のこと）を使用して設定されることができる。例えば、左側が丸くなった端部と左揃えにされたテキストとを有するボタンを生成するために、Ｓｔｙｌｅは、ＢｕｔｔｏｎＳｔｙｌｅ．ＲｏｕｎｄｅｄＬｅｆｔ｜ＢｕｔｔｏｎＳｔｙｌｅ．ＬｅｆｔＡｌｉｇｎｅｄに等しく設定されることができる。Ｂｕｔｔｏｎクラスは正式にはｐｕｂｌｉｃ  ｃｌａｓｓ  Ｂｕｔｔｏｎ：Ｃｏｎｔｒｏｌと表されることができる。
【０２５５】
Ｂｕｔｔｏｎクラスは、以下の例示的で非網羅的な列挙されたｐｕｂｌｉｃなコンストラクタを提供することができる。
【０２５６】
・ｐｕｂｌｉｃ  Ｂｕｔｔｏｎ（ｉｎｔ  ｌｅｆｔ，ｉｎｔ  ｔｏｐ，ｉｎｔ  ｗｉｄｔｈ，ｉｎｔ  ｈｅｉｇｈｔ）コンストラクタは、特定の位置、サイズ、またはスタイルを用いてＢｕｔｔｏｎクラスの新しいインスタンスを初期化する。ｌｅｆｔ、ｔｏｐ、ｗｉｄｔｈ、およびｈｅｉｇｈｔパラメータは、（ＵＩｐａｎｅＢａｓｅクラスとの関連で）上で説明された。
【０２５７】
Ｃｏｎｔｒｏｌクラスは、以下の例示的で非網羅的な列挙されたｐｕｂｌｉｃなプロパティコンストラクタを提供することができる。
【０２５８】
・ｐｕｂｌｉｃ  ｏｖｅｒｒｉｄｅ  ｂｙｔｅ  ＢａｃｋＣｏｌｏｒプロパティは、ＵＩｐａｎｅに対する背景色のインデックスを取得または設定する。例示的なデフォルトは２２４である。
【０２５９】
・ｐｕｂｌｉｃ  ｂｙｔｅ  ＢｏｒｄｅｒＣｏｌｏｒプロパティは、ＵＩｐａｎｅに対する境界の色のインデックスを取得または設定する。例示的なデフォルトは２２７である。
【０２６０】
・ｐｕｂｌｉｃ  ｕｉｎｔ  ＢｏｒｄｅｒＷｉｄｔｈプロパティは、ボタンに関する境界の幅を画素数で取得または設定する。例示的なデフォルトは４である。
【０２６１】
・ｐｕｂｌｉｃ  ｏｖｅｒｒｉｄｅ  ｂｙｔｅ  ＦｏｒｅＣｏｌｏｒプロパティは、ＵＩｐａｎｅに対する前景色のインデックスを取得または設定する。例示的なデフォルトは２２７である。
【０２６２】
・ｐｕｂｌｉｃ  ｂｙｔｅ  ＳｅｌｅｃｔｅｄＢｏｒｄｅｒＣｏｌｏｒプロパティは、ボタンの選択された境界の色を取得または設定する。例示的なデフォルトは２１１である。
【０２６３】
・ｐｕｂｌｉｃ  ＢｕｔｔｏｎＳｔｙｌｅ  Ｓｔｙｌｅプロパティは、ボタンのスタイルを表す値を取得または設定する。例示的なデフォルト値は０ｘ３であり、全ての丸くなった端部と中央揃えされたテキストとを有する。
【０２６４】
・ｐｕｂｌｉｃ  Ｓｔｒｉｎｇ  Ｔｅｘｔプロパティは、ボタンのテキストラベルを表す値を取得または設定する。Ｔｅｘｔがｎｕｌｌに設定される場合、Ｔｅｘｔは空の文字列に設定される。例示的なデフォルトは空の文字列ある。
【０２６５】
Ｂｕｔｔｏｎクラスは、以下の例示的で非網羅的な列挙されたｐｕｂｌｉｃなメソッドを提供することができる。
【０２６６】
・ｐｕｂｌｉｃ  ｖｉｒｔｕａｌ  ｖｏｉｄ  ＧｅｔＦｏｎｔ（ｏｕｔ  ｓｔｒｉｎｇ  ｎａｍｅ，ｏｕｔ  ｉｎｔ  ｈｅｉｇｈｔ，ｏｕｔ  ｉｎｔ  ａｓｐｅｃｔ）は、ボタンテキストのフォントパラメータを取得する。「ｎａｍｅ」パラメータは、ボタンテキストのフォント名を示す。ｎａｍｅに対する例示的なデフォルトは「Ｔｉｒｅｓｉａｓ」である（しかし、言うまでもなくデフォルト名は任意の名前に設定されることができる）。「ｈｅｉｇｈｔ」パラメータは、ボタンテキストのフォントの高さを示す。例示的なデフォルト値の高さは２０である。「ａｓｐｅｃｔ」パラメータは、ボタンテキストのフォントの縦横比を示す。ａｓｐｅｃｔに対する例示的なデフォルト値は１００である。
【０２６７】
・ｐｕｂｌｉｃ  ｖｉｒｔｕａｌ  ｖｏｉｄ  ＳｅｔＦｏｎｔ（ｓｔｒｉｎｇ  ｎａｍｅ，ｉｎｔ  ｈｅｉｇｈｔ，ｉｎｔ  ａｓｐｅｃｔ）メソッドは、ボタンテキストのフォントパラメータを設定する。例示的なデフォルト値は上述の通りである。
【０２６８】
Ｂｕｔｔｏｎクラスは、以下の例示的で非網羅的な列挙されたｐｕｂｌｉｃなイベントを提供することができる。
【０２６９】
・ｐｕｂｌｉｃ  ｅｖｅｎｔ  ＵＩｐａｎｅＥｖｅｎｔＨａｎｄｌｅｒ  Ｃｌｉｃｋはボタンが押されたときに発生する。
【０２７０】
Ｂｕｔｔｏｎクラスは、以下の例示的で非網羅的な列挙されたｐｒｏｔｅｃｔｅｄなメソッドを提供することができる。
【０２７１】
・ｐｒｏｔｅｃｔｅｄ  ｖｉｒｔｕａｌ  ｖｏｉｄ  ＯｎＣｌｉｃｋ（）メソッドは、Ｃｌｉｃｋイベントを引き起こす。
【０２７２】
・ｐｒｏｔｅｃｔｅｄ  ｏｖｅｒｒｉｄｅ  ｖｏｉｄ  ＯｎＫｅｙＰｒｅｓｓ（Ｋｅｙｓ  ｋｅｙＣｏｄｅ，ｒｅｆ  ｂｏｏｌ  ｈａｎｄｌｅｄ）メソッドは、ＫｅｙＰｒｅｓｓイベントを引き起こす。このメソッドにおいて、「ｋｅｙＣｏｄｅ」パラメータはキーイベントによって使用されるべきキーコードを示す。「ｈａｎｄｌｅ」パラメータは、キーイベントが処理されたかどうかを指示する値に対する参照を提供する。
【０２７３】
・ｐｒｏｔｅｃｔｅｄ  ｏｖｅｒｒｉｄｅ  ｖｏｉｄ  ＯｎＰａｉｎｔ（Ｇｒａｐｈｉｃｓ  ｇｒａｐｈｉｃｓ，Ｒｅｃｔａｎｇｌｅ  ｃｌｉｐＲｅｃｔａｎｇｌｅ）メソッドは、ボタンをペイントし、ペイントイベントを引き起こす。このメソッドにおいて、ｇｒａｐｈｉｃｓパラメータは、ペイントするために使用されるグラフィックスを示す。ｇｒａｐｈｉｃｓがｎｕｌｌの場合、例外が投げられる。「ｃｌｉｐＲｅｃｔａｎｇｌｅ」パラメータは、ペイントされるべき領域を示す。ｃｌｉｐＲｅｃｔａｎｇｌｅがｎｕｌｌの場合は、全てがペイントされる。
【０２７４】
・ｐｒｏｔｅｃｔｅｄ  ｖｉｒｔｕａｌ  ｖｏｉｄ  ＯｎＰａｉｎｔＢａｃｋｇｒｏｕｎｄ（Ｇｒａｐｈｉｃｓ  ｇｒａｐｈｉｃｓ）メソッドは、ボタンの背景を描画する。開発者は、それらの開発者独自の背景を描画したいと（例えば、装飾的なビットマップを描画したいと）望む可能性がある。これらの場合、開発者はこのメソッドをオーバーライドすることができる。このメソッドにおいて、「ｇｒａｐｈｉｃｓ」パラメータは、ペイントするために使用されるグラフィックスを示す。ｇｒａｐｈｉｃｓがｎｕｌｌの場合、例外が投げられる。
【０２７５】
・ｐｒｏｔｅｃｔｅｄ  ｏｖｅｒｒｉｄｅ  ＯｎＶｉｓｉｂｉｌｉｔｙＣｈａｎｇｅｄ（）メソッドは、ＶｉｓｉｂｉｌｉｔｙＣｈａｎｇｅｄイベントを引き起こす。
【０２７６】
Ｄ．２．６．ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．ＵＩｐａｎｅｓ．ＵＩｐａｎｅＥｖｅｎｔＨａｎｄｌｅｒ
ＵＩｐａｎｅＥｖｅｎｔＨａｎｄｌｅｒクラスは、ＵＩｐａｎｅイベントを処理することになるメソッドを表す。このクラスは正式にはｐｕｂｌｉｃ  ｄｅｌｅｇａｔｅ  ｖｏｉｄ  ＵＩｐａｎｅＥｖｅｎｔＨａｎｄｌｅｒ（ｏｂｊｅｃｔ  ｓｅｎｄｅｒ）と表されることができる。このイベントハンドラの宣言は、ＵＩｐａｎｅＥｖｅｎｔＨａｎｄｌｅｒのデリゲートの宣言と同じパラメータを持つべきである。このクラスにおいて、「ｓｅｎｄｅｒ」パラメータは、イベントの発生源を示す。
【０２７７】
Ｄ．２．７．ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．ＵＩｐａｎｅｓ．ＫｅｙＥｖｅｎｔＨａｎｄｌｅｒ
ＫｅｙＥｖｅｎｔＨａｎｄｌｅｒクラスは、キーイベントを処理することになるメソッドを表す。このクラスは正式にはｐｕｂｌｉｃ  ｄｅｌｅｇａｔｅ  ｖｏｉｄ  ＫｅｙＥｖｅｎｔＨａｎｄｌｅｒ（ｏｂｊｅｃｔ  ｓｅｎｄｅｒ，Ｋｅｙｓ  ｋｅｙＣｏｄｅ，ｒｅｆ  ｂｏｏｌ  ｈａｎｄｌｅｄ）と表されることができる。このイベントハンドラの宣言は、ＫｅｙＥｖｅｎｔＨａｎｄｌｅｒのデリゲートの宣言と同じパラメータを持つべきである。「ｓｅｎｄｅｒ」パラメータは、イベントの発生源を示す。「ｋｅｙＣｏｄｅ」パラメータはキーイベントのキーコードを示す。「ｈａｎｄｌｅｄ」パラメータは、このキーイベントが既に処理されたかどうかを指示する。
【０２７８】
Ｄ．２．８．ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．ＵＩｐａｎｅｓ．Ｔｒａｎｓｉｔｉｏｎ
Ｔｒａｎｓｉｔｉｏｎクラスは、スクリーンに遷移を適用するためのメソッドを提供する。より具体的には、Ｔｒａｎｓｉｔｉｏｎクラスは、フォームオブジェクトに対して視覚的な遷移を提供するために使用されることができる。遷移オブジェクトを作成するために、初めに、開発者はＦｏｒｍ．ＤｏＴｒａｎｓｉｔｉｏｎ（）を呼び出すことによって遷移イベントを引き起こすことができる。このＡＰＩは、指定された水平のスクリーン領域を固定し、遷移イベントを引き起こす。次に、開発者はイベントハンドラを作成して遷移イベントを処理することができる。続いて、このイベントハンドラは、有効な遷移オブジェクトを受け取ることになる。Ｔｒａｎｓｉｔｉｏｎクラスは正式にはｐｕｂｌｉｃ  ｃｌａｓｓ  Ｔｒａｎｓｉｔｉｏｎと表されることができる。
【実施例】
【０２７９】
【表１】
2008536384.tif 000003
【０２８０】
Ｔｒａｎｓｉｔｉｏｎクラスは、以下の例示的で非網羅的な列挙されたｐｕｂｌｉｃなプロパティを提供することができる。
【０２８１】
・ｐｕｂｌｉｃ  ｉｎｔ  Ｈｅｉｇｈｔプロパティは、Ｔｒａｎｓｉｔｉｏｎオブジェクトの高さを取得する。
【０２８２】
Ｔｒａｎｓｉｔｉｏｎクラスは、以下の例示的で非網羅的な列挙されたｐｕｂｌｉｃなメソッドを提供することができる。
【０２８３】
・ｐｕｂｌｉｃ  ｖｏｉｄ  Ｄｅｃｉｍａｔｅ（ｉｎｔ  ｎｕｍｅｒａｔｏｒ，ｉｎｔ  ｄｅｎｏｍｉｎａｔｏｒ，ｉｎｔ  ｏｆｆｓｅｔ，ｉｎｔ  ｔｏｐ，ｉｎｔ  ｂｏｔｔｏｍ）メソッドは、遷移オブジェクト上でデシメーション効果をシミュレートする。ｎｕｍｅｒａｔｏｒおよびｄｅｎｏｍｉｎａｔｏｒは、効果を受けることになる上端と下端の間のラインのパーセンテージを表す。すなわち、パーセンテージ＝（ｎｕｍｅｒａｔｏｒ／ｄｅｎｏｍｉｎａｔｏｒ）×１００である。このメソッドにおいて、パラメータ「ｎｕｍｅｒａｔｏｒ」はパーセンテージの値の分子を表す。パラメータ「ｄｅｎｏｍｉｎａｔｏｒ」はパーセンテージの値の分母を表す。パラメータ「ｏｆｆｓｅｔ」は、デシメーションによって影響を受けないままとなる上端からのライン数を（画素数で）表す。パラメータ「ｔｏｐ」は、デシメーションを行うときに考慮されるべき領域の上端を示す。上側の境界は、遷移オブジェクトに関連する。引数が範囲外の場合、例外が投げられる。「ｂｏｔｔｏｍ」パラメータは、デシメーションを行うときに考慮されるべき領域の下端を示す。下側の境界は、遷移オブジェクトに関連する。引数が範囲外の場合、例外が投げられる。
【０２８４】
・ｐｕｂｌｉｃ  ｖｏｉｄ  Ｅｘｐｏｓｅ（ｉｎｔ  ｌｉｎｅｓＴｏＥｘｐｏｓｅ，ｉｎｔ  ｔｏｐ，ｉｎｔ  ｂｏｔｔｏｍ）メソッドは、ｔｏｐおよびｂｏｔｔｏｍによって定められた領域の中心部の、ｌｉｎｅｓＴｏＥｘｐｏｓｅによって指定されたいくつかのラインを露出する。すなわち、パラメータ「ｌｉｎｅｓＴｏＥｘｐｏｓｅ」は、指定されたｔｏｐおよびｂｏｔｔｏｍによって定められる領域の中心部から露出すべきいくつかのラインを示す。パラメータ「ｔｏｐ」は、ラインを露出するときに考慮されるべき領域の上端を示す。上側の境界は、遷移オブジェクトに関連する。引数が範囲外の場合、例外が投げられる。パラメータ「ｂｏｔｔｏｍ」は、ラインを露出するときに考慮されるべき領域の下端を示す。下側の境界は、遷移オブジェクトに関連する。引数が範囲外の場合、例外が投げられる。
【０２８５】
・ｐｕｂｌｉｃ  ｖｏｉｄ  ＲａｓｔｅｒＦａｄｅ（ｉｎｔ  ｎｕｍｅｒａｔｏｒ，ｉｎｔ  ｄｅｎｏｍｉｎａｔｏｒ，ｉｎｔ  ｔｏｐ，ｉｎｔ  ｂｏｔｔｏｍ）メソッドは、遷移オブジェクト上でラスタフェード効果をシミュレートする。ｎｕｍｅｒａｔｏｒおよびｄｅｎｏｍｉｎａｔｏｒは、効果を受けることになる上端と下端の間のラインのパーセンテージを表す。すなわち、パーセンテージ＝（ｎｕｍｅｒａｔｏｒ／ｄｅｎｏｍｉｎａｔｏｒ）×１００である。パラメータ「ｎｕｍｅｒａｔｏｒ」はパーセンテージの値の分子を表す。パラメータ「ｄｅｎｏｍｉｎａｔｏｒ」はパーセンテージの値の分母を表す。パラメータ「ｔｏｐ」は、ラスタフェードされるべき領域の上端を示す。上側の境界は、遷移オブジェクトに関連する。引数が範囲外の場合、例外が投げられる。「ｂｏｔｔｏｍ」パラメータは、ラスタフェードされるべき領域の下端を示す。下側の境界は、遷移オブジェクトに関連する。引数が範囲外の場合、例外が投げられる。
【０２８６】
・ｐｕｂｌｉｃ  ｖｏｉｄ  Ｓｃｒｏｌｌ（ｉｎｔ  ｏｆｆｓｅｔ，ｉｎｔ  ｔｏｐ，ｉｎｔ  ｂｏｔｔｏｍ）メソッドは、ｔｏｐおよびｂｏｔｔｏｍによって定められる領域を上または下のいずれかにスクロールする。パラメータ「ｏｆｆｓｅｔ」は、スクロールすべきライン数を指示するオフセットを示す。値が０を超える場合、領域は上にスクロールされ、そうでなければ領域は下にスクロールされる。パラメータ「ｔｏｐ」は、スクロールされるべき領域の上端を示す。上側の境界は、遷移オブジェクトに関連する。引数が範囲外の場合、例外が投げられる。パラメータ「ｂｏｔｔｏｍ」は、スクロールされるべき領域の下端を表す。下側の境界は、遷移オブジェクトに関連する。引数が範囲外の場合、例外が投げられる。
【０２８７】
Ｄ．２．９．ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．ＵＩｐａｎｅｓ．ＴｒａｎｓｉｔｉｏｎＥｖｅｎｔＨａｎｄｌｅｒ
ＴｒａｎｓｉｔｉｏｎＥｖｅｎｔＨａｎｄｌｅｒクラスは、遷移イベントを処理することになるメソッドを表す。このイベントハンドラの宣言は、ＴｒａｎｓｉｔｉｏｎＥｖｅｎｔＨａｎｄｌｅｒのデリゲートの宣言と同じパラメータを持つべきである。このクラスは正式にはｐｕｂｌｉｃ  ｄｅｌｅｇａｔｅ  ｖｏｉｄ  ＴｒａｎｓｉｔｉｏｎＥｖｅｎｔＨａｎｄｌｅｒ（ｏｂｊｅｃｔ  ｓｅｎｄｅｒ，Ｔｒａｎｓｉｔｉｏｎ  ｔｒａｎｓｉｔｉｏｎ）と表されることができる。パラメータ「ｓｅｎｄｅｒ」は、イベントの発生源を示す。パラメータ「ｔｒａｎｓｉｔｉｏｎ」は遷移オブジェクトを示す。
【０２８８】
Ｄ．２．１０．ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．ＵＩｐａｎｅｓ．ＢｕｔｔｏｎＳｔｙｌｅ
この列挙型は、利用可能なボタンスタイルを指定する。より具体的には、ＢｕｔｔｏｎＳｔｙｌｅはＢｕｔｔｏｎオブジェクトの外観を指定する。ボタンスタイルが０ｘ０に等しい場合、Ｂｕｔｔｏｎオブジェクトは湾曲した端部を持たず、左揃えされたテキストを持つ。ＬｅｆｔＡｌｉｇｎｅｄもＲｉｇｈｔＡｌｉｇｎｅｄも設定されない場合、テキストは中央揃えにされる。ＬｅｆｔＡｌｉｇｎｅｄおよびＲｉｇｈｔＡｌｉｇｎｅｄの両方が設定される場合、ＬｅｆｔＡｌｉｇｎｅｄが優先する。ＲｏｕｎｄｅｄＬｅｆｔもＲｏｕｎｄｅｄＲｉｇｈｔも設定されない場合、Ｂｕｔｔｏｎオブジェクトは湾曲した端部を持たない。ＢｕｔｔｏｎＳｔｙｌｅ列挙型は正式にはｐｕｂｌｉｃ  ｅｎｕｍ  ＢｕｔｔｏｎＳｔｙｌｅと表されることができる。
【０２８９】
この列挙型のその他の例示的なメンバは、以下の表中に明記される。
【０２９０】
【表２】
2008536384.tif 000004
【０２９１】
Ｄ．２．１２．ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．ＵＩｐａｎｅｓ．Ｋｅｙｓ
この列挙型はキーコードを指定する。各キーは、仮想キーコードによって構成されるキー値によって特定される。この列挙型は正式にはｐｕｂｌｉｃ  ｅｎｕｍ  Ｋｅｙｓと表されることができる。
【０２９２】
この列挙型の例示的なメンバは、以下の表中に明記される。
【０２９３】
【表３】
2008536384.tif 000005
【０２９４】
【表４】
2008536384.tif 000006
【０２９５】
【表５】
2008536384.tif 000007
【０２９６】
Ｄ．３．ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．Ｓｈｅｌｌ．ＴＶＬｉｔｅＡｐｐｌｉｃａｔｉｏｎＢａｓｅ
ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．Ｓｈｅｌｌ名前空間は、とりわけ、軽いＴＶアプリケーションを作成するための抽象ＴＶＬｉｔｅＡｐｐｌｉｃａｔｉｏｎＢａｓｅクラスを含む。すなわち、ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．Ｓｈｅｌｌ．ＴＶＬｉｔｅＡｐｐｌｉｃａｔｉｏｎＢａｓｅ（ＡｐｐｌｉｃａｔｉｏｎＢａｓｅクラス）はＴＶアプリケーションを表す。全てのインタープリタベースのＣＬＲのアプリケーションは、抽象ＴＶＬｉｔｅＡｐｐｌｉｃａｔｉｏｎＢａｓｅインターフェースから派生し、要求される実装を提供するべきである。ＡｐｐｌｉｃａｔｉｏｎＢａｓｅクラスは正式にはｐｕｂｌｉｃ  ａｂｓｔｒａｃｔ  ｃｌａｓｓ  ＴＶＬｉｔｅＡｐｐｌｉｃａｔｉｏｎＢａｓｅと表されることができる。
【０２９７】
ＡｐｐｌｉｃａｔｉｏｎＢａｓｅクラスは、以下の例示的で非網羅的な列挙されたｐｒｏｔｅｃｔｅｄなメソッドを提供することができる。
【０２９８】
・ｐｒｏｔｅｃｔｅｄ  ｖｏｉｄ  Ｒｕｎ（ＩＵＩｐａｎｅ  ｍａｉｎＵＩｐａｎｅ）メソッドは、現在のスレッド上で標準のアプリケーションメッセージループの実行を開始し、指定されたＵＩｐａｎｅを可視状態にする。コンパクトな．ＮＥＴ環境においては、Ｒｕｎメソッドはスタティックメソッドである。しかし、インタープリタベースのＣＬＲ環境におけるスタティックメソッドは全ての実行中のスレッドに対してグローバルである。したがって、各アプリケーションがそのアプリケーション独自のメッセージポンプを有することができるように、Ｒｕｎメソッドは抽象ベースクラスＴＶＬｉｔｅＡｐｐｌｉｃａｔｉｏｎＢａｓｅにおいてｐｒｏｔｅｃｔｅｄなメソッドとして実装される。
【０２９９】
Ｒｕｎメソッドは自動的にＲｅｇｉｓｔｅｒＵＩｐａｎｅを呼び出して最も高いレベルのＵＩｐａｎｅである主ＵＩｐａｎｅを登録する。すなわち、パラメータｍａｉｎＵＩｐａｎｅは、可視状態にされるＵＩｐａｎｅを示す。
【０３００】
ＡｐｐｌｉｃａｔｉｏｎＢａｓｅクラスは、以下の例示的で非網羅的な列挙されたｐｕｂｌｉｃなプロパティを提供することができる。
【０３０１】
・ｐｕｂｌｉｃ  ｂｏｏｌ  ＥｎｈａｎｃｅｄＧｒａｐｈｉｃｓＭｏｄｅプロパティはアプリケーションが「エンハンストグラフィックスモード（Ｅｎｈａｎｃｅｄ  Ｇｒａｐｈｉｃｓ  Ｍｏｄｅ）（ＥＧＭ）」になることを可能にする。ＥＧＭモードは、アプリケーションがユーザパレットを設定すること、ＯＳＤの解像度を変更することなどを可能にする。ＥＧＭモードは排他的なモードであり、したがって、アプリケーションがＥＧＭモードに入ることを要求する（ＥｎｈａｎｃｅｄＧｒａｐｈｉｃｓＭｏｄｅをｔｒｕｅに設定する）ときに、全てのその他のマネージアプリケーションは一時停止されることになる。ＥＧＭモードに入るアプリケーションは、そのアプリケーションがＥＧＭモードから離れたいと望むときにＥｎｈａｎｃｅｄＧｒａｐｈｉｃｓＭｏｄｅをｆａｌｓｅに設定すべきであり、その結果、その他の一時停止されたマネージアプリケーションが実行されることができるようになる。アプリケーションマネージャ３１０は、アプリケーションが終了するとき、アプリケーションを強制的にＥＧＭモードから離れさせる。このプロパティのデフォルト値はｆａｌｓｅに設定される。このプロパティは、Ｒｕｎメソッドに対する呼び出しの前にのみｔｒｕｅに設定されることができる。メッセージループを開始するためにＲｕｎメソッドが呼び出された後でこのプロパティがｔｒｕｅに設定される場合、例外が投げられることになる。
【０３０２】
ＡｐｐｌｉｃａｔｉｏｎＢａｓｅクラスは、以下の例示的で非網羅的な列挙されたｐｕｂｌｉｃなメソッドを提供することができる。
【０３０３】
・ｐｕｂｌｉｃ  ａｂｓｔｒａｃｔ  ｖｏｉｄ  Ｉｎｉｔｉａｌｉｚｅ（ｓｔｒｉｎｇ  ｕｒｌ）メソッドは、アプリケーションで定義された初期化を実行する。アプリケーションを起動するためのＨＴＴＰリクエストのＵＲＬが、ＵＲＬに付加されるパラメータと共に、Ｉｎｉｔｉａｌｉｚｅに対する呼び出しの中のｕｒｌパラメータを介してアプリケーションに渡される。以下は例示的なｕｒｌパラメータを与える。
【０３０４】
ｈｔｔｐ：／／ａｐｐｓｅｒｖｅｒ／ｍｏｎｓｔｅｒ．ｄａｔ？ｐａｒａｍ１＝ｖａｌｕｅ１＆ｐａｒａｍ２＝ｖａｌｕｅ２
処理されない例外をアプリケーションが生成する場合、アプリケーションは終了されることになる。
【０３０５】
・ｐｕｂｌｉｃ  ｖｏｉｄ  Ｅｘｉｔ（）メソッドは、全てのメッセージポンプにそれらのメッセージポンプが終了しなければならないことを知らせ、そしてメッセージが処理された後で全てのアプリケーションのＵＩｐａｎｅを閉じる。概して、Ｅｘｉｔメソッドはメッセージループ内から呼び出され、Ｒｕｎメソッドを強制的にリターンさせる。アプリケーションが当該アプリケーションを終了するためにＥｘｉｔメソッドを呼び出したので、アプリケーションマネージャ３１０はＴｅｒｍｉｎａｔｅメソッドを呼び出すことはない。
【０３０６】
・ｐｕｂｌｉｃ  ｖｏｉｄ  ＲｅｇｉｓｔｅｒＵＩｐａｎｅ（ＩＵＩｐａｎｅ  ｔｏｐＬｅｖｅｌＵＩｐａｎｅ）メソッドは、アプリケーションがそのアプリケーションの最も高いレベルのＵＩｐａｎｅをＵＩｐａｎｅマネージャ３１２に登録することを可能にする。ＵＩｐａｎｅマネージャ３１２は、ＵＩｐａｎｅイベントを最も高いレベルのＵＩｐａｎｅにディスパッチすることになる。
【０３０７】
・ｐｕｂｌｉｃ  ａｂｓｔｒａｃｔ  ｖｏｉｄ  Ｐａｕｓｅ（）メソッドは、アプリケーションに中断するように要求するためにアプリケーションマネージャ３１０がアプリケーションに中断イベントを送信することを可能にする。アプリケーションマネージャ３１０は、アプリケーションに中断するように要求した後でスレッドを一時停止する。アプリケーションスレッドは、中断イベントを処理するときに、処理されない例外をアプリケーションが生成するとしても一時停止されることになる。
【０３０８】
・ｐｕｂｌｉｃ  ａｂｓｔｒａｃｔ  ｖｏｉｄ  Ｒｅｓｕｍｅ（）メソッドは、アプリケーションに再開するように要求するためにアプリケーションマネージャ３１０がアプリケーションに再開イベントを送信することを可能にする。アプリケーションマネージャ３１０は、アプリケーションに再開するように求める前にアプリケーションスレッドの一時停止を解除する。アプリケーションスレッドは、再開イベントを処理するときに、処理されない例外をアプリケーションが生成するとしても一時停止を解除されることになる。
【０３０９】
・ｐｕｂｌｉｃ  ａｂｓｔｒａｃｔ  ｖｏｉｄ  Ｔｅｒｍｉｎａｔｅ（）メソッドは、アプリケーションに終了するように要求するためにアプリケーションマネージャ３１０がアプリケーションに終了イベントを送信することを可能にする。アプリケーションマネージャ３１０は、アプリケーションスレッドが終了イベントの処理から戻った後にまだ実行されている場合、アプリケーションスレッドを終了する。アプリケーションスレッドは、終了イベントを処理するときに、処理されない例外をアプリケーションが生成するとしても終了されることになる。
【０３１０】
・ｐｕｂｌｉｃ  ａｂｓｔｒａｃｔ  ｖｏｉｄ  ＲｅｌｅａｓｅＲｅｓｏｕｒｃｅ（）メソッドは、解放されることができる全てのリソースを解放するようにアプリケーションに要求するためにアプリケーションマネージャ３１０がアプリケーションにリソース解放イベントを送信することを可能にする。これは、ガベージコレクタのためのオブジェクトに対する参照を削除することを含む。
【０３１１】
Ｄ．４．ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．Ｄｒａｗｉｎｇ名前空間
Ｄ．４．１．概要
ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．Ｄｒａｗｉｎｇ（Ｄｒａｗｉｎｇ）名前空間は、開発者がインタープリタベースのＣＬＲを使用してセットトップボックスプラットフォーム上でグラフィックスアプリケーションを記述することによって容易に使用されることができるＡＰＩの組を提供する。
【０３１２】
Ｄ．４．２．ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅ．Ｄｒａｗｉｎｇ．Ｇｒａｐｈｉｃｓクラス
ＧｒａｐｈｉｃｓクラスはＤｒａｗｉｎｇクラスから派生する。Ｇｒａｐｈｉｃｓクラスは正式にはｐｕｂｌｉｃ  ｃｌａｓｓ  Ｇｒａｐｈｉｃｓと表されることができる。
【０３１３】
Ｇｒａｐｈｉｃｓクラスは、以下の例示的で非網羅的な列挙されたｐｕｂｌｉｃなコンストラクタを提供することができる。
【０３１４】
・ｐｕｂｌｉｃ  Ｇｒａｐｈｉｃｓ（ｉｎｔ  ｘ，ｉｎｔ  ｙ，ｉｎｔ  ｗｉｄｔｈ，ｉｎｔ  ｈｅｉｇｈｔ）コンストラクタは、呼び出し元にスクリーン上の任意の位置にグラフィックスオブジェクトを作成させるメソッドを提供する。グラフィックスオブジェクトはＴＶディスプレイ領域を出ることはできない。これが発生するとき、このコンストラクタは、作成されているグラフィックスを有効なＴＶディスプレイ領域に自動的に留める。
【０３１５】
・ｐｕｂｌｉｃ  Ｇｒａｐｈｉｃｓ（ｉｎｔ  ｗｉｄｔｈ，ｉｎｔ  ｈｅｉｇｈｔ）コンストラクタは、メモリバッファ内に画面外のグラフィックスオブジェクトを作成するメソッドを提供する。１つの例示的な実装において、上述の２つのＧｒａｐｈｉｃｓコンストラクタは「ｉｎｔｅｒｎａｌ」なメソッドとして提供されることができる。これは、プログラミングモデルが、全てのアプリケーションが（Ｆｏｒｍクラスから派生された）フォームオブジェクトを有することを要求するためである。グラフィックスオブジェクトは、全ての描画が同期しているようにフォームオブジェクトによって制御される。例えば、このアプリケーションモデルにおいて、ボタンは従来のプログラミング環境における別個のＵＩｐａｎｅオブジェクトではなく、単にフォームの内側の長方形を表す。フォームオブジェクトは、ボタンをペイントする役割を担う。開発者がこのフォームに対してグラフィックスを作成することを許される場合、ボタンと、同じフォーム上に現れるその他の内容とを同期させることが難しくなる。（フォームクラスがメソッドＣｒｅａｔｅＧｒａｐｈｉｃｓ（）を持つことになることを思い出されたい。）
Ｇｒａｐｈｉｃｓクラスは、以下の例示的で非網羅的な列挙されたｐｕｂｌｉｃなプロパティを提供することができる。
【０３１６】
・ｐｕｂｌｉｃ  Ｒｅｃｔａｎｇｌｅ  ＣｌｉｐＢｏｕｎｄｓプロパティは、現在のグラフィックスオブジェクトが機能しているクリッピング領域に対して使用される。
【０３１７】
Ｇｒａｐｈｉｃｓクラスは、以下の例示的で非網羅的な列挙されたｐｕｂｌｉｃなメソッドを提供することができる。
【０３１８】
・ｐｕｂｌｉｃ  ｖｏｉｄ  Ｄｉｓｐｏｓｅ（）メソッドは、グラフィックスオブジェクトを破棄する。
【０３１９】
・ｐｕｂｌｉｃ  ｖｏｉｄ  ＳｅｔＣｌｉｐ（Ｒｅｃｔａｎｇｌｅ  ｃｌｉｐＲｅｃｔ）メソッドは、現在のグラフィックスオブジェクト内にクリッピング領域を設定する。
【０３２０】
・ｐｕｂｌｉｃ  ｖｏｉｄ  ＲｅｓｅｔＣｌｉｐ（）メソッドは、グラフィックスオブジェクト内のクリッピング領域をその領域のデフォルトの状態にリセットする。
【０３２１】
・ｐｕｂｌｉｃ  ｖｏｉｄ  ＳｅｔＵｓｅｒＰａｌｅｔｔｅ（ｕｉｎｔ［］  ｐｕｎＰａｌｅｔｔｅ，ｂｙｔｅ  ｓｔａｒｔＰｏｓ）メソッドは、ユーザに現在のグラフィックスオブジェクトに関連付けられるべきカスタムパレットを指定させる。１つの例示的な実装において、ユーザが指定することができるパレットエントリの最大数は２５３である。ユーザは、カスタムパレットがカラーパレット配列全体の中のどこで始まるべきかを指定することもできる。カスタムパレット中の色の数とカスタムパレットに対する開始位置とを足したものが２５３を超える場合、ＩＮＶＡＬＩＤ＿ＰＡＲＡＭＥＴＥＲ例外が投げられる。
【０３２２】
より具体的には、１つの例示的な実装において、カラーインデックス０はＯＳ３０４によって受け取られて透明色を指示するので、呼び出し元はカラーインデックスを０にすることが許されない。また、インデックス２５５は、このプラットフォーム上でサポートされる画像フォーマットが符号化されるときにＯＳＤの透明色のインデックスとして使用される。インデックス２５４は、ＲＬＥのエスケープキーとして使用される。したがって、このインデックスも禁止される。これは、この例示的な実装において、カスタムパレット中の色の数が２５３を超えることができない理由を説明する。
【０３２３】
補足として、１つの例示的な実装において、このメソッドはグラフィックスシステムがＥＧＭモードにあるときにのみ呼び出されることができる。そうでなければ、「ＩＮＶＡＬＩＤ＿ＥＧＭ＿ＳＴＡＴＥ」例外が投げられる。さらに、入力パラメータが妥当でないか、または開始位置が範囲外である場合、「ＩＮＶＡＬＩＤ＿ＩＮＰＵＴ＿ＰＡＲＡＭＥＴＥＲ」が投げられる。
【０３２４】
・ｐｕｂｌｉｃ  ｓｔａｔｉｃ  ｖｏｉｄ  ＲｅｓｔｏｒｅＤｅｆａｕｌｔＰａｌｅｔｔｅ（）メソッドはデフォルトのＯＳＤカラーパレットを復元する。
【０３２５】
・ｐｕｂｌｉｃ  ｖｏｉｄ  ＳｅｔＯＳＤＲｅｓｏｌｕｔｉｏｎ（ＯＳＤＲｅｓｏｌｕｔｉｏｎ  ｒｅｓｏｌｕｔｉｏｎ）メソッドは、呼び出し元にＯＳＤディスプレイの解像度を設定させる。
【０３２６】
１つの例示的な実装において、ｅｎｕｍ  ＯＳＤＲｅｓｏｌｕｔｉｏｎメソッドは、以下の定義によって管理される。
【０３２７】
【表６】
2008536384.tif 000008
【０３２８】
１つの例示的な実装において、このメソッドはグラフィックスシステムがＥＧＭモードにあるときにのみ呼び出されることができ、そうでない場合は「ＩＮＶＡＬＩＤ＿ＥＧＭ＿ＳＴＡＴＥ」例外が投げられる。
【０３２９】
・ｐｕｂｌｉｃ  ｖｏｉｄ  ＲｅｓｔｏｒｅＤｅｆａｕｌｔＯＳＤＲｅｓｏｌｕｔｉｏｎ（）メソッドは、デフォルトのＯＳＤディスプレイの解像度を復元する。
【０３３０】
・ｐｕｂｌｉｃ  ｖｏｉｄ  ＳｅｔＰｉｘｅｌ（ｉｎｔ  ｘ，ｉｎｔ  ｙ，ｂｙｔｅ  ｃｏｌｏｒＩｎｄｅｘ）メソッドは、ユーザにグラフィックスコンテキスト上の指定された位置の色値を設定させる。
【０３３１】
・ｐｕｂｌｉｃ  ｖｏｉｄ  ＧｅｔＰｉｘｅｌ（ｉｎｔ  ｘ，ｉｎｔ  ｙ）メソッドは、ユーザにグラフィックスコンテキスト上の指定された位置のカラーインデックス値を取得させる。
【０３３２】
・ｐｕｂｌｉｃ  ｖｏｉｄ  ＦｉｌｌＲｅｃｔａｎｇｌｅ（ｂｙｔｅ  ｃｏｌｏｒＩｎｄｅｘ，ｉｎｔ  ｘ，ｉｎｔ  ｙ，ｉｎｔ  ｗｉｄｔｈ，ｉｎｔ  ｈｅｉｇｈｔ）メソッドは、指定された色で矩形を塗り潰す。
【０３３３】
・ｐｕｂｌｉｃ  ｖｏｉｄ  ＤｒａｗＲｅｃｔａｎｇｌｅ（ｂｙｔｅ  ｃｏｌｏｒＩｎｄｅｘ，ｉｎｔ  ｐｅｎＷｉｄｔｈ，ｉｎｔ  ｘ，ｉｎｔ  ｙ，ｉｎｔ  ｗｉｄｔｈ，ｉｎｔ  ｈｅｉｇｈｔ）メソッドは、指定された色およびペン幅を用いて矩形を描画する。
【０３３４】
・ｐｕｂｌｉｃ  ｖｏｉｄ  ＦｉｌｌＥｌｌｉｐｓｅ（ｂｙｔｅ  ｃｏｌｏｒＩｎｄｅｘ，ｉｎｔ  ｘ，ｉｎｔ  ｙ，ｉｎｔ  ｗｉｄｔｈ，ｉｎｔ  ｈｅｉｇｈｔ）メソッドは、指定された色で楕円を塗り潰す。
【０３３５】
・ｐｕｂｌｉｃ  ｖｏｉｄ  ＤｒａｗＥｌｌｉｐｓｅ（ｂｙｔｅ  ｃｏｌｏｒＩｎｄｅｘ，ｉｎｔ  ｐｅｎＷｉｄｔｈ，ｉｎｔ  ｘ，ｉｎｔ  ｙ，ｉｎｔ  ｗｉｄｔｈ，ｉｎｔ  ｈｅｉｇｈｔ）メソッドは、指定された色およびペン幅を用いて楕円を描画する。
【０３３６】
・ｐｕｂｌｉｃ  ｖｏｉｄ  ＤｒａｗＬｉｎｅ（ｂｙｔｅ  ｃｏｌｏｒＩｎｄｅｘ，ｉｎｔ  ｐｅｎＷｉｄｔｈ，ｉｎｔ  ｓｔａｒｔＸ，ｉｎｔ  ｓｔａｒｔＹ，ｉｎｔ  ｅｎｄＸ，ｉｎｔ  ｅｎｄＹ）メソッドは、指定された色およびペン幅を用いて線を描画する。
【０３３７】
・ｐｕｂｌｉｃ  ｖｏｉｄ  ＦｉｌｌＲｏｕｎｄＲｅｃｔａｎｇｌｅ（ｂｙｔｅ  ｃｏｌｏｒＩｎｄｅｘ，ｉｎｔ  ｘ，ｉｎｔ  ｙ，ｉｎｔ  ｗｉｄｔｈ，ｉｎｔ  ｈｅｉｇｈｔ，ｉｎｔ  ｒａｄｉｕｓ，ＲｏｕｎｄｉｎｇＳｔｙｌｅ  ｓｔｙｌｅ）メソッドは、指定された色で丸くなった端部を有する矩形を塗り潰す。このメソッドにおいて、「ｒａｄｉｕｓ」パラメータは、「ｈｅｉｇｈｔ」パラメータおよび「ｗｉｄｔｈ」パラメータのうちの小さい方の半分以下でなければならない。ｒａｄｉｕｓがこの値を超える場合、ｒａｄｉｕｓはその限界値に切り捨てられることになる。「ｓｔｙｌｅ」パラメータは、ＲｏｕｎｄｉｎｇＳｔｙｌｅ．Ａｌｌ、ＲｏｕｎｄｉｎｇＳｔｙｌｅ．ＵｐｐｅｒＬｅｆｔ、ＲｏｕｎｄｉｎｇＳｔｙｌｅ．ＵｐｐｅｒＲｉｇｈｔ、ＲｏｕｎｄｉｎｇＳｔｙｌｅ．ＬｏｗｅｒＬｅｆｔ、ＲｏｕｎｄｉｎｇＳｔｙｌｅ．ＬｏｗｅｒＲｉｇｈｔ、またはこれらの論理和を取った組合せを含むことができる。
【０３３８】
・ｐｕｂｌｉｃ  ｖｏｉｄ  ＤｒａｗＲｏｕｎｄＲｅｃｔａｎｇｌｅ（ｂｙｔｅ  ｃｏｌｏｒＩｎｄｅｘ，ｉｎｔ  ｌｉｎｅＷｉｄｔｈ，ｉｎｔ  ｘ，ｉｎｔ  ｙ，ｉｎｔ  ｗｉｄｔｈ，ｉｎｔ  ｈｅｉｇｈｔ，ｉｎｔ  ｒａｄｉｕｓ，ＲｏｕｎｄｉｎｇＳｔｙｌｅ  ｓｔｙｌｅ）メソッドは、指定された色を用いて指定された太さの角丸長方形の輪郭線を描画する。「ｒａｄｉｕｓ」パラメータは、「ｈｅｉｇｈｔ」パラメータおよび「ｗｉｄｔｈ」パラメータのうちの小さい方の半分以下でなければならない。ｒａｄｉｕｓがこの値を超える場合、ｒａｄｉｕｓはその限界値に切り捨てられることになる。「ｓｔｙｌｅ」パラメータは、ＲｏｕｎｄｉｎｇＳｔｙｌｅ．Ａｌｌ、ＲｏｕｎｄｉｎｇＳｔｙｌｅ．ＵｐｐｅｒＬｅｆｔ、ＲｏｕｎｄｉｎｇＳｔｙｌｅ．ＵｐｐｅｒＲｉｇｈｔ、ＲｏｕｎｄｉｎｇＳｔｙｌｅ．ＬｏｗｅｒＬｅｆｔ、ＲｏｕｎｄｉｎｇＳｔｙｌｅ．ＬｏｗｅｒＲｉｇｈｔ、またはこれらの論理和を取った組合せを含むことができる。
【０３３９】
・ｐｕｂｌｉｃ  ｖｏｉｄ  ＢｉｔＢｌｔ（ｉｎｔ  ｄｅｓｔＸ，ｉｎｔ  ｄｅｘｔＹ，ｉｎｔ  ｄｅｓｔＷｉｄｔｈ，ｉｎｔ  ｄｅｓｔＨｅｉｇｈｔ，Ｇｒａｐｈｉｃｓ  ｓｒｃＧｒａｐｈｉｃｓ，ｉｎｔ  ｓｒｃＸ，ｉｎｔ  ｓｒｃＹ）メソッドは、あるグラフィックスオブジェクトからの内容を別のグラフィックスオブジェクトにブロック転送する。
【０３４０】
・ｐｕｂｌｉｃ  ｖｏｉｄ  ＤｒａｗＩｍａｇｅ（ｂｙｔｅ［］  ｂｕｆｆｅｒ，ｉｎｔ  ｘ，ｉｎｔ  ｙ）メソッドは、プラットフォーム上で現在サポートされている特別なフォーマットのビットマップを描画する。ユーザは、通常の画像をこの特別なフォーマットのビットマップに変換するための提供されたツールを使用することができる。画像がこのプラットフォームがサポートするフォーマットのうちの１つではない場合、ＩＮＶＡＬＩＤ＿ＩＭＡＧＥ＿ＦＯＲＭＡＴ例外が投げられる。
【０３４１】
Ｇｒａｐｈｉｃｓクラスは、以下の例示的で非網羅的な列挙されたｉｎｔｅｒｎａｌなメソッドを提供することができる。
【０３４２】
・ｉｎｔｅｒｎａｌ  Ｇｒａｐｈｉｃｓ（）メソッドは、ＴＶディスプレイＵＩｐａｎｅの全体をカバーするグラフィックスオブジェクトを作成するコンストラクタを提供する。
【０３４３】
・ｉｎｔｅｒｎａｌ  ｓｔａｔｉｃ  ｖｏｉｄ  ＥｎｔｅｒＥＧＭ（）メソッドはアプリケーションが「エンハンストグラフィックスモード」（ＥＧＭ）になることを可能にする。１つの例示的な実装においては、任意の特定の時点で１つのアプリケーションのみがＥＧＭモードになることが許される。グラフィックスシステムが既にＥＧＭモードであるときに呼び出し元がＥＧＭモードになろうと試みる場合、「ＩＮＶＡＬＩＤ＿ＥＧＭ＿ＳＴＡＴＥ」例外が投げられる。ＥＧＭモードにおいてのみ、アプリケーションはユーザパレットを設定すること、ＯＳＤの解像度を変更することなどを許される。
【０３４４】
・ｉｎｔｅｒｎａｌ  ｓｔａｔｉｃ  ｖｏｉｄ  ＬｅａｖｅＥＧＭ（）メソッドはＥＧＭモードを離れる。このＡＰＩを呼び出す前に、呼び出し元はデフォルトのカラーパレットおよびデフォルトのＯＳＤの解像度を復元する責任を負う。（１）アプリケーションがＥＧＭモードでない場合、（２）アプリケーションがデフォルトのカラーパレットを復元しなかった場合、または（３）アプリケーションがデフォルトのＯＳＤの解像度を復元しなかった場合、このＡＰＩから「ＩＮＶＡＬＩＤ＿ＥＧＭ＿ＳＴＡＴＥ」例外が投げられる。
【０３４５】
・ｉｎｔｅｒｎａｌ  ｓｔａｔｉｃ  ｖｏｉｄ  Ｓｃｒｏｌｌ（ｉｎｔ  ｏｆｆｓｅｔ，ｉｎｔ  ｕｐＢｏｕｎｄ，ｉｎｔ  ｌｏｗＢｏｕｎｄ）メソッドは、「オフセット」が正の数であればスクリーンを上にスクロールさせ、「オフセット」が負の数であれば下にスクロールさせる。この効果は、上／下境界の内側でのみ起こる。
【０３４６】
・ｉｎｔｅｒｎａｌ  ｓｔａｔｉｃ  ｖｏｉｄ  Ｄｅｃｉｍａｔｅ（ｉｎｔ  ｎｕｍｅｒａｔｏｒ，ｉｎｔ  ｄｅｎｏｍｉｎａｔｏｒ，ｉｎｔ  ｏｆｆｓｅｔ，ｉｎｔ  ｕｐＢｏｕｎｄ，ｉｎｔ  ｌｏｗＢｏｕｎｄ）メソッドは、デシメーション効果をシミュレートする。このメソッドは、効果のレベルを指示するための入力としてパーセンテージの数値を取る。
【０３４７】
・ｉｎｔｅｒｎａｌ  ｓｔａｔｉｃ  ｖｏｉｄ  ＲａｓｔｅｒＦａｄｅ（ｉｎｔ  ｎｕｍｅｒａｔｏｒ，ｉｎｔ  ｄｅｎｏｍｉｎａｔｏｒ，ｉｎｔ  ｕｐＢｏｕｎｄ，ｉｎｔ  ｌｏｗＢｏｕｎｄ）メソッドは、ラスタフェード効果をシミュレートする。このメソッドは、効果のレベルを指示するための入力としてパーセンテージの数値を取る。
【０３４８】
・ｉｎｔｅｒｎａｌ  ｓｔａｔｉｃ  ｖｏｉｄ  Ｅｘｐｏｓｅ（ｉｎｔ  ｌｉｎｅｓＴｏＥｘｐｏｓｅ，ｉｎｔ  ｕｐＢｏｕｎｄ，ｉｎｔ  ｌｏｗＢｏｕｎｄ）メソッドは、ＵＩｐａｎｅで指定された「ｕｐＢｏｕｎｄ」および「ｌｏｗＢｏｕｎｄ」の中心部の、「ｌｉｎｅｓＴｏＥｘｐｏｓｅ」によって指定されたいくつかのラインを露出する。
【０３４９】
Ｄ．４．３．ＡＢＣ＿Ｃｏ．ＴＶ．Ｌｉｔｅで使用されるＲＬＥ圧縮画像フォーマット
このプラットフォームは様々な画像フォーマットを使用することができる。２種類の独自仕様の画像フォーマットは、未圧縮ビットマップフォーマットと、ＲＬＥ圧縮ビットマップフォーマットとを含む。これらの独自仕様の画像フォーマットは、コンシューマに提供されることができる画像変換ツールを使用して生成されることができる。
【０３５０】
ＲＬＥ圧縮フォーマットの説明が次に続く。
【０３５１】
【表７】
2008536384.tif 000009
【０３５２】
２つ以上の連続した画素が同じ画素値を持たない場合、このフォーマットは現在の画素を「そのまま」符号化する。同じ値を有する３つ以上の連続する画素が見つかった場合、このフォーマットはこれらの画素をＲＬＥ＿ＥＳＣＡＰＥ、画素（インデックス）値、および個数であるＲＬＥ系列として符号化する。
【０３５３】
Ｄ．５．フォントメソッド
以下のサブセクションはフォントのレンダリングを処理するための機能を説明する。
【０３５４】
Ｄ．５．１．フォントのインストールおよびアンインストール
フォントの有効期間管理は、ＴＶＬｉｔｅＡｐｐｌｉｃａｔｉｏｎＢａｓｅオブジェクトで処理される。フォントをインストールし、任意選択でアンインストールするための機能は以下を含む。
【０３５５】
・ｖｏｉｄ  ＴＶＬｉｔｅＡｐｐｌｉｃａｔｉｏｎＢａｓｅ．ＩｎｓｔａｌｌＦｏｎｔ（ｓｔｒｉｎｇ  ｎａｍｅ，ｂｙｔｅ［］  ｆｏｎｔＤａｔａ）メソッドは新しいフォントをインストールする。フォントは、（デスクトップ環境におけるそのようなフォントの使用と比較して）不要なヘッダ情報が取り除かれる。フォント名は大文字小文字を区別する。
【０３５６】
このメソッドは、（１）同じ名前のフォントが既にインストールされているが、異なるデータを有する場合、（２）提供されたバイトが有効な不要な情報が取り除かれたＴｒｕｅ  Ｔｙｐｅフォントとして解析できない場合、または（３）その他の典型的なエラー状態が原因で例外を投げる。同一のデータを有するフォントをインストールする２度目の試行がなされる場合は、呼び出しは例外を投げない。すなわち、フォントをインストールするアプリケーションが最初に当該フォントをインストールしたアプリケーションと異なる場合、フォントに対する参照回数がインクリメントされることになる。同じアプリケーションが同じフォントを２度インストールする場合、２度目のインストールの試行は効果を持たない。
【０３５７】
ＩｎｓｔａｌｌＦｏｎｔメソッドは、以下の例示的な例外エラー返り値を提供する。
【０３５８】
０−（ＭＡＸ＿ＦＯＮＴＳ−１）＝このフォントに対するスロット数
ＦＯＮＴ＿ＤＵＰ＿ＮＡＭＥ＝同じ名前のフォントが既にインストールされているがデータが一致しない
ＦＯＮＴ＿ＴＡＢＬＥ＿ＦＵＬＬ＝フォントテーブルが一杯である
ＦＯＮＴ＿ＤＡＴＡ＿ＶＡＬＩＤＡＴＩＯＮ＿ＥＲＲ＝フォントデータの問題のあるロード
【０３５９】
その他のアプリケーションはフォントがインストールされている間にこの同じフォントを使用することができるが、それらのアプリケーションが当該フォントをそれらのアプリケーション自体にインストールしていなかった場合、インストールしているアプリケーションが終了するときに当該フォントが消失する可能性がある。したがって、「便乗する」側のアプリケーションが終了する前に「ホスト」アプリケーションが終了しないことを保証できない場合、別のアプリケーションのインストールに便乗することはよくないやり方と考えられる。
【０３６０】
・ｖｏｉｄ  ＴＶＬｉｔｅＡｐｐｌｉｃａｔｉｏｎＢａｓｅ．ＤｅｉｎｓｔａｌｌＦｏｎｔ（ｓｔｒｉｎｇ  ｎａｍｅ）メソッドはフォントをアンインストールする。または、２つ以上のアプリケーションがフォントをインストールした場合には、ＤｅｉｎｓｔａｌｌＦｏｎｔメソッドは呼び出し元のアプリケーションに関する参照回数を取り除く。
【０３６１】
より具体的には、インストールされたフォントはアプリケーションの存続期間の間存在することになり、アプリケーションが終了するときに（この終了するアプリケーションが当該フォントを使用している最後のアプリケーションである場合は）自動的に削除されることになる。通常は、終了する前にＤｅｉｎｓｔａｌｌＦｏｎｔを呼び出す必要はない。しかし、フォントの一時的な利用のみを行う必要がある場合、開発者はフォントを明示的にアンインストールすることを考慮することができる。
【０３６２】
ＤｅｉｎｓｔａｌｌＦｏｎｔの呼び出しは、アプリケーションがフォントをインストールしなかったか、または既にフォントがアンインストールされている場合に例外を投げる。
【０３６３】
Ｄ．５．２．グラフィックスオブジェクトのフォントに関連するメソッド
グラフィックスオブジェクトは、いくつかのその他のフォントに関連するＡＰＩ（メソッド）を提供する。例示的なそのようなメソッドは以下を含む。
【０３６４】
・ｖｏｉｄ  ＳｅｔＡｎｔｉＡｌｉａｓＢａｃｋｇｒｏｕｄＣｏｌｏｒ（ｉｎｔ  ｂａｃｋＩｎｄｅｘ）メソッドは、アンチエイリアシングに使用されるべき色を設定する。より具体的には、この呼び出しは、アンチエイリアシングの目的に用いるべき中間色のテーブルを構築するために使用される色を定める。これはデフォルトのパレットが使用されているときに非常に効果的であり、前景色および背景色は６ｘ６ｘ６カラーキューブ内に入る。カスタムパレットが使用されるとき、または６ｘ６ｘ６空間の外側で色が使用されているとき、カラーテーブルの網羅的な巡回が実行されることになり、巡回はアンチエイリアシングテーブル内の各位置に対する最良の値を発見する。
【０３６５】
−１の「ｂａｃｋＩｎｄｅｘ」が指定される場合、アンチエイリアシングは実行されない。使用されている前景色と同一の背景色を設定することは、アンチエイリアシングを使用不可にする効果を有する。
【０３６６】
例示的な例外エラーの返り値は以下を含む。
【０３６７】
ＦＯＮＴ＿ＰＡＲＡＭ＿ＯＵＴ＿ＯＦ＿ＲＡＮＧＥ＝パレットインデックスが範囲外である
ＦＯＮＴ＿ＳＹＳＴＥＭ＿ＥＲＲ＝システムカラーパレット情報の誤ったフェッチ
・ｖｏｉｄ  ＳｅｔＦｏｎｔ（ｓｔｒｉｎｇ  ｎａｍｅ，ｉｎｔ  ｈｅｉｇｈｔ，ｉｎｔ  ａｓｐｅｃｔ）メソッドは、現在のフォントを文字列の描画に使用されるように設定する。「ａｓｐｅｃｔ」パラメータは３０と２５０の間（境界値を含む）のパーセンテージの値を定義し、ここで３０は通常の幅の３０％を意味し、２５は通常の幅の２５０％を意味する。「ｈｅｉｇｈｔ」パラメータは、４〜２５０の範囲（境界値を含む）内でフォントの高さを画素数で指定する。フォント名は大文字小文字を区別する。フォントがグリフのみのフォント（ＣＭａｐテーブルを含まないフォント）である場合、ｈｅｉｇｈｔおよびａｓｐｅｃｔは無視される。
【０３６８】
例示的な例外エラーの返り値は以下を含む。
【０３６９】
ＦＯＮＴ＿ＮＯＴ＿ＦＯＵＮＤ＝そのスロットにフォントがない
ＦＯＮＴ＿ＰＡＲＡＭ＿ＯＵＴ＿ＯＦ＿ＲＡＮＧＥ＝パラメータが範囲外である
・ｖｏｉｄ  ＤｒａｗＳｔｒｉｎｇ（ｂｙｔｅ  ｃｏｌｏｒＩｎｄｅｘ，ｓｔｒｉｎｇ  ｓ，ｉｎｔ  ｘ，ｉｎｔ  ｙ）メソッドは、位置（ｘ，ｙ）に、現在設定されているフォントを使用して指定された色で文字列を描画する。このメソッドはフォーマットを実行せず、このメソッドは単に一列のテキストを描画する。
【０３７０】
例示的な例外エラーの返り値は以下を含む。
【０３７１】
ＦＯＮＴ＿ＮＯＴ＿ＦＯＵＮＤ＝そのスロットにフォントがない
ＦＯＮＴ＿ＰＡＲＡＭ＿ＯＵＴ＿ＯＦ＿ＲＡＮＧＥ＝サイズまたは縦横比が範囲外である
・ｖｏｉｄ  ＤｒａｗＳｔｒｉｎｇ（ｂｙｔｅ  ｃｏｌｏｒＩｎｄｅｘ，ｓｔｒｉｎｇ  ｓ，ｉｎｔ  ｘ，ｉｎｔ  ｙ，ｉｎｔ  ｗｉｄｔｈ，ＡｌｉｇｎＳｔｙｌｅ  ａｌｉｇｎ，ｃｈａｒ  ｔｒｕｎｃａｔｉｏｎ）メソッドは、指定された幅を超えないように必要に応じて切り捨てを行う左、右、または中央揃えで、現在設定されているフォントを使用して指定された色で文字列を描画する。文字列が切り捨てられ、０でない切り捨て文字（ｔｒｕｎｃａｔｉｏｎ  ｃｈａｒａｃｔｅｒ）が与えられるとき、この文字は文字列の前に付加されるか、または後ろに付加される。切り捨てられた中央揃えにされた文字列に関しては、切り捨て文字は前にも付加され後ろにも付加される。このメソッドにおいて、ａｌｉｇｎパラメータは、ＡｌｉｇｎＳｔｙｌｅ．Ｌｅｆｔ、ＡｌｉｇｎＳｔｙｌｅ．Ｒｉｇｈｔ、またはＡｌｉｇｎＳｔｙｌｅ．Ｃｅｎｔｅｒであることができる。
【０３７２】
例示的な例外エラーの返り値は以下を含む。
【０３７３】
ＦＯＮＴ＿ＮＯＴ＿ＦＯＵＮＤ＝そのスロットにフォントがない
ＦＯＮＴ＿ＰＡＲＡＭ＿ＯＵＴ＿ＯＦ＿ＲＡＮＧＥ＝サイズまたは縦横比が範囲外である
【０３７４】
・ｖｏｉｄ  ＤｒａｗＳｔｒｉｎｇ（ｂｙｔｅ  ｃｏｌｏｒＩｎｄｅｘ，ｂｙｔｅ［］  ｕｔｆ８Ｂｙｔｅｓ，ｉｎｔ  ｂｙｔｅＯｆｆｓｅｔ，ｉｎｔ  ｃｈａｒａｃｔｅｒＣｏｕｎｔ，ｂｙｔｅ［］  ａｄｖａｎｃｅｓ，ｉｎｔ  ｘ，ｉｎｔ  ｙ）メソッドは、現在選択されているフォントに応じて文字列または一連のグリフのいずれかを描画する。選択されているフォントがグリフのみを含む（ＣＭａｐテーブルを含まない）場合、バイト領域の先頭からｂｙｔｅＯｆｆｓｅｔの位置から始まるバイトがグリフインデックスとして復号化され、処理される。そうでない場合、バイトはＵＴＦ−８で符号化された文字の並びとして処理される。グリフは指定されたカラーインデックスを使用して描画され、現在のアンチエイリアシング背景色に対してアンチエイリアシングされる。「ａｄｖａｎｃｅｓ配列」は、描画されるべき各文字／グリフに対する横送りを含む。
【０３７５】
０未満の送りをサポートするために、送りは以下のやり方で符号化される。各文字の送り幅は１または２バイトの長さである。０から１２７までの範囲内の送り幅は１バイトを使用して修正なしで記憶される。この範囲の外側では、最上位ビット（０ｘ８０）が２バイト系列の第１のバイトを示す。次のビット（０ｘ４０）は、復号化された値が否定されるべきかどうかを示す。ビット４および５（０ｘ３０）は無視されるが、０に設定されるべきである。下位４ビットおよび次のバイトは送り幅の大きさを表す。第１のバイトのビット６が設定される場合、幅が否定される。これは最大１２ビットの長さの幅をサポートする。送りのリストが提供される場合、そのリストは少なくともｃｈａｒａｃｔｅｒＣｏｕｎｔ個の文字の数をサポートするのに十分なエントリを含まなければならない。
【０３７６】
例示的な例外エラーの返り値は以下を含む。
【０３７７】
ＦＯＮＴ＿ＮＯＴ＿ＦＯＵＮＤ＝フォントが選択されない
ＦＯＮＴ＿ＰＡＲＡＭ＿ＯＵＴ＿ＯＦ＿ＲＡＮＧＥ＝サイズまたは縦横比が範囲外である
・ｉｎｔ  ＭｅａｓｕｒｅＳｔｒｉｎｇ（ｓｔｒｉｎｇ  ｓ）メソッドは、現在設定されているフォントを使用して文字列の幅を画素数で返す。
【０３７８】
例示的な例外エラーの返り値は以下を含む。
【０３７９】
ＦＯＮＴ＿ＰＡＲＡＭ＿ＥＲＲ＝ＮＵＬＬ入力など
ＦＯＮＴ＿ＮＯＴ＿ＦＯＵＮＤ＝有効なフォントが選択されない
ＦＯＮＴ＿ＰＡＲＡＭ＿ＯＵＴ＿ＯＦ＿ＲＡＮＧＥ＝フォントのサイズまたは縦横比パラメータが範囲外である
ＦＯＮＴ＿ＢＡＤ＿ＵＴＦ８＿ＣＯＤＥ＝文字列中に無効なＵＴＦ８系列がある
・ｉｎｔ  ＢｒｅａｋＳｔｒｉｎｇ（ｓｔｒｉｎｇ  ｓ，ｉｎｔ  ｓｔａｒｔＩｎｄｅｘ，ｉｎｔ  ｗｉｄｔｈ，ｓｔｒｉｎｇ  ｓｅｐ）メソッドは、現在設定されているフォントを用いて、「ｓｅｐ」中の文字を使用して文字列を単語に分解することを試み、文字列が指定された幅に適合するように分解されることができる場合は区切り文字のインデックスを返す。このメソッドは、「ｓｅｐ」を使用して文字列が与えられた幅以内に適合するように分解されることができない場合、「１」を返す。効率の理由により、１つの例示的な実装において、「ｓｅｐ」文字列は最大８文字のみを含むことができる。これはほとんどの実用的な目的に対して十分であるはずである。この文字列が空の文字列である場合、テキストは任意の文字に分解されることになる。例えば、文字列「Ｈｏｗ  ｎｏｗ  ｂｒｏｗｎ  ｃｏｗ」が、スペース文字のみを含む区切り文字列、ｓｔａｒｔＩｎｄｅｘ  ０と共に渡されると仮定する。初めの３つの単語のみが適合する場合、ＢｒｅａｋＳｔｒｉｎｇ（）は「ｃｏｗ」の前のスペースのインデックスである１３を返すことになる。文字列全体が適合する場合、このメソッドは文字列の長さである１７を返すことになる。
【０３８０】
例示的な例外エラーの返り値は以下を含む。
【０３８１】
ＦＯＮＴ＿ＰＡＲＡＭ＿ＥＲＲ＝ＮＵＬＬパラメータなど
ＦＯＮＴ＿ＮＯＴ＿ＦＯＵＮＤ＝有効なフォントが選択されない
ＦＯＮＴ＿ＰＡＲＡＭ＿ＯＵＴ＿ＯＦ＿ＲＡＮＧＥ＝フォントのサイズまたは縦横比パラメータが範囲外である、ｓｅｐ文字列が長すぎる
ＦＯＮＴ＿ＢＡＤ＿ＵＴＦ８＿ＣＯＤＥ＝「ｓｅｐ」文字列中に無効なＵＴＦ８系列がある
・ｖｏｉｄ  ＧｅｔＦｏｎｔＭｅｔｒｉｃｓ（ｏｕｔ  ｉｎｔ  ａｓｃｅｎｔ，ｏｕｔ  ｉｎｔ  ｄｅｓｃｅｎｔ，ｏｕｔ  ｉｎｔ  ｌｉｎｅＳｐａｃｉｎｇ）メソッドは、テキストの正確なレイアウトのために必要とされる現在指定されているフォントのプロパティをフェッチする。「ａｓｃｅｎｔ」パラメータは、フォントのグリフがベースラインの何画素上を描画できるかを示す正の値である。「ｄｅｓｃｅｎｔ」パラメータは、フォントのグリフがベースラインの何画素下を描画できるかを示す正の値である。「ｌｉｎｅＳｐａｃｉｎｇ」パラメータは、このフォントのテキストのライン間で必要とされる期待されるデフォルトの画素で表された間隔である。これは、フォントのａｓｃｅｎｔ、ｄｅｓｃｅｎｔ、および行間（ｌｉｎｅ  ｇａｐ）の合計である。
【０３８２】
例示的な例外エラーの返り値は以下を含む。
【０３８３】
ＦＯＮＴ＿ＰＡＲＡＭ＿ＥＲＲ＝ＮＵＬＬパラメータなど
ＦＯＮＴ＿ＮＯＴ＿ＦＯＵＮＤ＝指定されたスロットにおけるフォントでない
Ｄ．５．３．フォントエラーコード
例示的なフォントエラーコードは以下を含む。
【０３８４】
【表８】
2008536384.tif 000010
【０３８５】
Ｄ．６．ネイティブイベントおよびマネージ非同期コールバック
エンティティは、ＮｏｔｉｆｙＯｎＥｖｅｎｔＣａｌｌｂａｃｋシステムメソッド（ｉｎｔｅｒｎａｌのみ）を呼び出してイベント通知に登録することができる。ＮｏｔｉｆｙＯｎＥｖｅｎｔＣａｌｌｂａｃｋは非ブロッキング呼び出しであり、エンティティは、別個のスレッド上でこの呼び出しを行う何らかの明確な必要性がない場合、別個のスレッド上でこの呼び出しを行う必要はない。ＨＴＴＰ、ＭｐｅｇＦｉｌｔｅｒｉｎｇ、Ｔｕｎｉｎｇ、ｅＴＶなどの全てのコールバック指向のイベントの待機およびディスパッチを実行することになる単一のシステムスレッドが存在する。（例外はＵｓｅｒＩｎｐｕｔ、ＡｐｐＬａｕｎｃｈ、およびＰｉｎｇＰｏｎｇイベントであり、これらのイベントは専用のシステムスレッドで処理される）。
【０３８６】
イベントの種類は、複数インスタンスのイベントおよび単一インスタンスのイベントの２つに大別されることができる。ＨＴＴＰおよびＧｕｉｄｅＤＢ  Ｓｅａｒｃｈは典型的な複数インスタンスモデルを表す。これらのモデルにおいては、概して動作を開始するためにリクエストが（エンティティによって）明示的になされる必要があり、複数のスレッドが異なるリクエストを生成することができる。このモデルにおいて、（ＮｏｔｉｆｙＯｎＥｖｅｎｔに対する）呼び出し元は、同じイベントの複数のインスタンス（例えば、同じアプリケーション上の異なるスレッドからの、または異なるアプリケーションからの複数のＨＴＴＰリクエスト）の間を区別するために使用されることができる対応するＮＳＬハンドルを渡すことになる。単一のインスタンスを用いる場合、概してエンティティはリクエストを開始するために明確に何らかのことを行う必要はない。ランタイムはこれらの種類のイベントを自動的に取得し、ランタイムはそれらのイベントを関係するものにディスパッチすることになる（そのデータを取得し、そのデータを適切に解析し、それらのＡＰＩのコンシューマに対するさらなるディスパッチを行うことはエンティティの役目である）。
【０３８７】
１つの例示的な実装において、任意の時点で、Ｅｖｅｎｔ  Ｔｙｐｅ／Ｈａｎｄｌｅの組合せに関して１つの未処理のリクエストのみが存在することができる。例えば、１つの例示的な実装において、第１のＨＴＴＰリクエストが成功裏に完了する（例えば、コールバックが呼び出される）まで、同じハンドルに対する第２のＨＴＴＰリクエストを行うことはできない。これは融通の利かない要件ではなく、必要に応じて、およびいくつかの条件が満たされる場合にはある程度緩和されることができる。
【０３８８】
ＳｐｏｔＨｏｓｔレイヤは、ＮＳＬ環境とＳＰＯＴ環境の中間として働く。単一インスタンスモデルを用いる場合、イベントは全てのサブスクライバにブロードキャストされる。ＳｐｏｔＨｏｓｔレイヤは、ＮＳＬレイヤからイベント（ＨｔｔｐＲｅｓｐｏｎｓｅまたはＭｐｅｇＦｉｌｔｅｒなど）を取得し、そのイベントをＨＡＬ＿ＤＩＳＰＡＴＣＨ＿ＥＶＥＮＴ構造体にまとめ、Ｔｏｂａ＿ＥｎｑｕｅｕｅＤｉｓｐａｔｃｈＥｖｅｎｔ関数を使用してその構造体をシステムキューに送る。エンティティは、ＳｐｏｔＨｏｓｔレイヤ内で適切な関数を実行する役割を担う。
【０３８９】
システムが処理のためにキューからイベントを取得するとき、システムが適合するリクエストを発見することができない場合、または（例えば、当該リクエストを行ったアプリケーションが終了したために）そのリクエストをディスパッチすべきいかなる対象も発見することができない場合、システムは（適切なクリーンナップを行った後で）応答を破棄する。したがって、ＡＰＩはそれらのＡＰＩが開始する前に（ＮｏｔｉｆｙＯｎＥｖｅｎｔを呼び出すことによって）初めに通知登録すべきである。そうでない場合、応答が破棄される原因となる恐れのある分かりづらい競合状態が存在する可能性がある。システムが適合するリクエストを発見する場合、システムは対応するデリゲートを呼び出す。エンティティはデリゲートハンドラ内でいかなる重要な作業も実行すべきでない。
【０３９０】
ＮａｔｉｖｅＲｅｓｐｏｎｓｅオブジェクト上で（ＮａｔｉｖｅＲｅｓｐｏｎｓｅ．ｆｒｅｅＮａｔｉｖｅＤａｔａＦｕｎｃｔｉｏｎＰｔｒによって示される関数を呼び出し、ｒａｗＮａｔｉｖｅＤａｔａＰｔｒをパラメータとして渡す）Ｄｉｓｐｏｓｅメソッドが呼び出されるべきである。ネイティブデータを保持することが望ましい場合、ＮａｔｉｖｅＲｅｓｐｏｎｓｅオブジェクトを保有することができ、代替的には、ｆｒｅｅＮａｔｉｖｅＤａｔａＦｕｎｃｔｉｏｎＰｔｒフィールドを０に設定し、続いてＤｉｓｐｏｓｅを呼び出すことができる。コールバックによって例外が投げられる場合、システムは最悪を想定して、ＮａｔｉｖｅＲｅｓｐｏｎｓｅオブジェクト上でＤｉｓｐｏｓｅを呼び出す。システムおよびユーザの両方が保証されたクリーンナップを行うことができるので、Ｆｉｎａｌｉｚｅｒを使用してクリーンナップを実行する必要はない。
【０３９１】
システムは、登録解除も行う明示的なＡＰＩ、例えばＣａｎｃｅｌＮｏｔｉｆｉｃａｔｉｏｎ（ＨａｌＤｉｓｐａｔｃｈＥｖｅｎｔｓ  ｅ，ｕｉｎｔ  ｎａｔｉｖｅＨａｎｄｌｅ）を提供することもできる。この機能を使用すると、システムは自動的な登録解除に関する異常終了の事態にのみ対応する必要がある。
【０３９２】
使用例
【０３９３】
【表９】
2008536384.tif 000011
【０３９４】
【表１０】
2008536384.tif 000012
【０３９５】
【表１１】
2008536384.tif 000013
【０３９６】
ここでの目的は、ユーザがＮＳＬ／ＰＡＬレイヤからの非同期コールバックおよびシステムイベントを受け取るための（各リクエストに対して別個のスレッドを生成することなしに）非常に軽量で「薄い」レイヤを提供することである。ＡＰＩの作成者は、必要に応じてこの機能の上にＩＡｓｙｎｃＲｅｓｕｌｔ／ＡｓｙｎｃＣａｌｌｂａｃｋに基づくコールバックメカニズムを構築することができる。
【０３９７】
本発明が構造的特徴および／または方法の動作によって特定される言語で説明されたが、添付の特許請求の範囲で定義された本発明は説明された特定の特徴または動作に必ずしも限定されないことを理解されたい。むしろ、特定の特徴および動作は、特許請求の範囲に記載された発明を実装する例示的な形態として開示される。
【図面の簡単な説明】
【０３９８】
【図１】本明細書で説明された改良されたシステムを実装するセットトップボックスを含むシステムの概要を示す図である。
【図２】図１のシステムで使用される例示的セットトップボックスの物理的な構成の概要を示す図である。
【図３】図２のセットトップボックスによって実装されることができるソフトウェア機能の階層を示す図である。
【図４】図３の機能によって提供されるＵＩｐａｎｅクラスの階層構造を示す図である。
【図５】図３の機能によって提供される、アプリケーションをロードおよび実行するために使用されるメカニズムを示す図である。
【図６】図３の機能によって提供されるナビゲーション機能の動作を示す図である。
【図７】図３の機能の動作の仕方を説明する手順を示す図である。
【図１】
2008536384.tif 000014
【図２】
2008536384.tif 000015
【図３】
2008536384.tif 000016
【図４】
2008536384.tif 000017
【図５】
2008536384.tif 000018
【図６】
2008536384.tif 000019
【図７】
2008536384.tif 000020
【国際調査報告】
2008536384.tif 000021