(57)【要約】この出願に記載される主題の特徴は、コマンドの生成及び伝達に関する。これらの特徴では、グラフィカル・ユーザ・インターフェースの要素が、ジェスチャをコマンドに関連付けする入力バインディングを含む。ジェスチャが受け取られると、どの要素がフォーカスを有するかに応じて、コマンドが生成される。更に、グラフィカル・ユーザ・インターフェースの要素は、コマンドが受け取られたときにコールすべき方法を定義する。イベント又はコマンドが受け取られると、グラフィカル・ユーザ・インターフェースにおいて表現可能な要素の階層的データ構造が横断され、当該イベント又はコマンドに応答する。
2009506465.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータによって実行されると、
インターフェースにおいて、コマンドを実行する命令を受け取る動作と、
前記命令に応答して、前記コマンドと関連付けられたオブジェクトを階層的なデータ構造を横断することにより発見することを試みる動作と、
を実行する命令を含むことを特徴とする少なくとも１つのコンピュータ可読媒体。
【請求項２】
請求項１記載の少なくとも１つのコンピュータ可読媒体において、前記コマンドと関連付けられたオブジェクトを階層的なデータ構造を横断することにより発見することを試みる前記動作は、フォーカスを用いて要素を選択する動作と、コマンド・バインディング・オブジェクトが前記要素を前記コマンドと関連付けるかどうかを判断する動作と、を含むことを特徴とする少なくとも１つのコンピュータ可読媒体。
【請求項３】
請求項２記載の少なくとも１つのコンピュータ可読媒体において、前記コマンドと関連付けられたオブジェクトを階層的なデータ構造を横断することにより発見することを試みる前記動作は、フォーカスを用いて前記要素のアンセスタを選択する動作と、コマンド・バインディング・オブジェクトが前記アンセスタを前記コマンドと関連付けるかどうかを判断する動作と、を更に含むことを特徴とする少なくとも１つのコンピュータ可読媒体。
【請求項４】
請求項２記載の少なくとも１つのコンピュータ可読媒体において、前記コマンドと関連付けられたオブジェクトを階層的なデータ構造を横断することにより発見することを試みる前記動作は、コマンド・バインディング・オブジェクトが前記要素を含むクラスを前記コマンドと関連付けるかどうかを判断する動作を更に含むことを特徴とする少なくとも１つのコンピュータ可読媒体。
【請求項５】
請求項２記載の少なくとも１つのコンピュータ可読媒体において、前記コマンドと関連付けられたオブジェクトを階層的なデータ構造を横断することにより発見することを試みる前記動作は、グローバル・コマンド・バインディング・オブジェクトが前記コマンドと関連付けられているかどうかを判断する動作を更に含むことを特徴とする少なくとも１つのコンピュータ可読媒体。
【請求項６】
請求項２記載の少なくとも１つのコンピュータ可読媒体において、前記階層的データ構造は複数の要素の間の関係を含む視覚的ツリーを含み、前記要素はそれぞれがグラフィカル・ユーザ・インターフェースにおいて表現可能であることを特徴とするコンピュータ可読媒体。
【請求項７】
コンピュータによって実行されると、
インターフェースにおいて、入力イベントを受け取る動作と、
前記入力イベントに応答して、グラフィカル・ユーザ・インターフェースにおいて表現された要素は前記入力イベントに対して定義されたインスタンス・バインディングを有するかどうかを判断する動作と、
を実行する命令を含むことを特徴とする少なくとも１つのコンピュータ可読媒体。
【請求項８】
請求項７記載の少なくとも１つのコンピュータ可読媒体において、前記入力イベントに応答して前記要素が前記入力イベントに対して定義されたクラス入力バインディングを有するかどうかを判断する動作を更に含み、前記クラス入力バインディングは、当該クラス入力バインディングのタイプを有する要素をコールする方法を定義することを特徴とするコンピュータ可読媒体。
【請求項９】
請求項８記載の少なくとも１つのコンピュータ可読媒体において、前記要素のペアレントが前記入力イベントに対して定義されたインスタンス入力バインディングを有するかどうかを当該入力イベントが判断する動作を更に含むことを特徴とするコンピュータ可読媒体。
【請求項１０】
請求項８記載の少なくとも１つのコンピュータ可読媒体において、前記要素のアンセスタが前記入力イベントに対して定義されたインスタンス又はクラス入力バインディングを有しない場合には、前記入力イベントに対してグローバル入力バインディングが定義されているかどうかを判断する動作を更に含むことを特徴とするコンピュータ可読媒体。
【請求項１１】
請求項７記載の少なくとも１つのコンピュータ可読媒体において、前記入力イベントは入力ソースに応答して生成され、入力ソースは少なくともキーボード、マウス、スタイラス又は音声コマンドを捕捉するマイクロフォンから構成されることを特徴とするコンピュータ可読媒体。
【請求項１２】
請求項７記載の少なくとも１つのコンピュータ可読媒体において、前記要素が前記入力イベントと関連付けられた入力バインディングを有する場合には前記入力バインディングと関連付けられたコマンドを実行する動作を更に含むことを特徴とするコンピュータ可読媒体。
【請求項１３】
請求項１２記載の少なくとも１つのコンピュータ可読媒体において、前記入力バインディングと関連付けられたコマンドを実行する前記動作は、前記コマンドをハンドラと関連付けるコマンド・バインディングを有する要素に対する視覚的表現を有する要素の視覚的ツリーをサーチする動作を含むことを特徴とするコンピュータ可読媒体。
【請求項１４】
請求項７記載の少なくとも１つのコンピュータ可読媒体において、前記入力バインディングは入力ジェスチャをコマンドと関連付け、前記入力ジェスチャは１又は複数のイベントの組と関連付けられ、前記入力ジェスチャは前記１又は複数のイベントの中の任意のものが生じるかどうかを告知されることを特徴とするコンピュータ可読媒体。
【請求項１５】
計算環境における方法であって、
入力イベントを受け取るステップと、
前記入力イベントを方向付ける視覚的要素を選択するステップと、
前記入力イベントを含む入力ジェスチャをコマンドと関連付けるバインディングを前記視覚的要素が含むかどうかを判断するステップと、
を含むことを特徴とする方法。
【請求項１６】
請求項１５記載の方法において、前記入力ジェスチャをコマンドと関連付けるバインディングを前記視覚的要素が含まない場合には、前記入力ジェスチャをコマンドと関連付けるクラス・バインディングと前記要素が関連付けされているかどうかを判断するステップを更に含むことを特徴とする方法。
【請求項１７】
請求項１６記載の方法において、前記視覚的要素のペアレントのバインディングが前記入力ジェスチャをコマンドと関連付けるかどうかを判断するステップを更に含むことを特徴とする方法。
【請求項１８】
請求項１５記載の方法において、ルーティングされたコマンド・オブジェクトを介してコマンドを実行するステップを更に含み、前記ルーティングされたコマンド・オブジェクトは、前記コマンドと関連付けられた方法を有する要素を発見するために階層的データ構造をサーチするのに用いられることを特徴とする方法。
【発明の詳細な説明】
【技術分野及び背景技術】
【０００１】
ユーザがアプリケーションを開くときには、ユーザは、自分自身がアプリケーションでの各種機能を行なうことを可能にするコマンドにアクセスする。例えば、ユーザはアプリケーションからテキスト又は他のオブジェクトをカット又はコピーし、当該テクスト又はそれ以外のオブジェクトを別のアプリケーションにペーストすることができる。
【０００２】
これらのコマンドは、様々な方法で呼び出される。例えば、ユーザは、メニュ・ツールバーを選択し、メニュの中を移動して、カット又はコピー・コマンドを見つける。別の例としては、ユーザは、ショートカット・キー（例えば、［コントロール］−ｘ）を入力して、アプリケーションからオブジェクトをカットすることがある。更に別の例では、ユーザは、マウスを用いてテキストを選択し、当該テキストを別の位置にドラッグし、カット及びペースト・コマンド開始することがある。
【０００３】
コマンドを用いる必要がある入力装置及びアプリケーションは様々なであるので、コマンド・アーキテクチャのインプリメンテーション及び使用は、より複雑になる。この複雑さは、コマンドを用いるプログラムを開発するアプリケーション開発者及びそれ以外の者によって実行される必要がある業務を増加させる。
【発明の概要】
【０００４】
簡潔に、この出願において開示される発明の特徴は、コマンドの生成及び伝達に関する。複数の特徴において、グラフィカル・ユーザ・インターフェースの要素は、ジェスチャをコマンドと関連付ける入力バインディングを含む。ジェスチャが受け取られると、コマンドは、どの要素がフォーカスを有するのかに応じて生成される。更に、グラフィカル・ユーザ・インタフェースの要素は、コマンドが受け取られるときにコールすべき方法を定義する。イベント又はコマンドが受け取られると、グラフィカル・ユーザ・インターフェースにおいて表現可能な要素の階層的データ構造が、イベント又はコマンドに応答して横断される。
【０００５】
この概要は、詳細な説明において後述される本発明の特徴を簡潔に識別するために提供される。この概要は、本発明の本質的な中心的な又は本質的な特徴を識別することは意図していないし、本発明の範囲を限定することも意図しない。
【０００６】
「この出願において開示される主題又は本発明」という用語は、格別に断らない限りは、詳細な説明において説明される主題を意味する。「特徴」という用語は、「１又は複数の特徴」という意味に読まれるべきである。詳細な説明において記載された主題の特徴は、本発明の中心的又は本質的特徴を識別することを意図しない。
【０００７】
以上の及び後述する特徴は、添付の図面を参照して以下の詳細な説明を読むことによって明らかになる。
【発明を実施するための最良の形態】
【０００８】
例示的な動作環境：
図１は、主題の様相がここに記述した適切な計算機システム環境１００の一例がインプリメントされることがあることを示す。計算機システム環境１００は適切なコンピュータ環境の単なる１つの例で、使用又はここに記述された主題の様相の機能性のスコープに関してどんな制限も示唆するようには意図されない。また、コンピュータ環境１００はどんな従属性又は任意のオン又は例示的な操作環境１００に図解された成分の組合せに関係のある要求も持っているとは解釈されるべきでない。ここに記述された主題の様相は、多数の他の汎用又は専用の計算機システム環境か構成で使用可能である。
【０００９】
有名な計算機システム、環境及び（又は）ここに記述された主題の様相を備えた使用にふさわしいことがある構成の例は含んでいる、しかし制限されない、パーソナルコンピュータ、サーバーコンピュータ、携帯型のデバイス又はラップトップ・デバイス、マルチプロセッサーシステム、マイクロコントローラベースのシステム、セットトップ・ボックス、プログラム可能な家電、ネットワークPC、ミニコンピュータ、メインフレーム・コンピュータ、上記のシステム又はデバイスのうちのどれでも含んでいる分散コンピューティング環境など。
【００１０】
ここに記述された主題の様相は、コンピュータによって実行されて、プログラムモジュールのようなコンピュータ実行可能命令の一般情勢に述べられることがある。一般に、プログラムモジュールはルーチン、プログラム、オブジェクト、成分、データ構造などを含んでいる。それは特別のタスクか道具項目抽象データ型を行なう。ここに記述された主題の様相も、通信網によってリンクされる遠隔処理デバイスによってタスクが行なわれる分散コンピューティング環境中で実行されることがある。分散コンピューティング環境では、プログラムモジュールは、記憶装置デバイスを含むローカル・リモートコンピュータ記憶媒体の両方に位置することがある。
【００１１】
図１に関して、ここに記述された主題の様相をインプリメントするための例示的なシステムは、汎用のコンピューティング装置をコンピュータ１１０の形で含んでいる。コンピュータ１１０の成分は含んでいることがある、しかし制限されない、演算処理装置１２０、システムメモリー１３０、及び演算処理装置１２０へのシステムメモリーを含む様々なシステムコンポーネントを連結するシステム・バス１２１。システム・バス１２１は、様々なバス方式のうちのどれでも用いて、メモリーバスかメモリーコントローラー、周辺バス及びローカルバスを含むいくつかのタイプのバス構造のいずれかであることがある。
制限ではなく例経由で、そのようなアーキテクチャは産業標準アーキテクチャ（ＩＳＡ）バス（マイクロチャネル・アーキテクチャ（ＭＣＡ）バス）を含んでいる、ＩＳＡ（ＥＩＳＡ）バス、ビデオエレクトロニクス標準組織（ＶＥＳＡ）ローカルバス、及びメザニーン・バスとして知られている周辺の構成要素の相互接続（ＰＣＩ）バスを向上させた。
【００１２】
コンピュータ１１０は例示的には様々なコンピュータを含む判読可能な媒体。コンピュータが読める媒体は、コンピュータ１１０によってアクセスすることができ、揮発性・不揮発性の媒体及び取外し可能及び非リムーバブル・メディアの両方を含んでいるあらゆる利用可能な媒体になりえる。制限ではなく例経由で、コンピュータが読める媒体はコンピュータ記憶装置媒体及び通信メディアを含むことがある。コンピュータ記憶装置媒体は揮発性、コンピュータが読める命令、データ構造、プログラムモジュール又は他のデータのような情報の記憶のための任意の方法又はテクノロジー中でインプリメントされた不揮発性で、取外し可能及び非リムーバブル・メディアの両方を含んでいる。コンピュータ記憶装置媒体は含んでいる、しかし制限されない、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュ・メモリ又は他のメモリ技術、ＣＤ−ＲＯＭ、ＤＶＤ又は他の光学ディスク記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置又は他の磁気記憶装置、又は希望情報を格納するために用いることができ、コンピュータ１１０によってアクセスすることができる他の媒体を含む。通信メディアは、例示的にはコンピュータが読める命令、データ構造、プログラムモジュール又は他のデータを搬送波又は他の移送機構のような変調データ信号で実施例し、どんな情報配送媒体も含んでいる。「変調データ信号」という用語は、信号中のエンコード情報にような方法で１つ又はその特性のそれ以上のをセットするか変更される信号を意味する。制限ではなく例経由で、通信メディア、有線ネットワークか直接の有線接続のようなインターネットを利用している媒体、及び音響で、ＲＦ、赤外線・他の無線メディアのような無線メディアを含んでいる。上記のもののうちのいずれかの組合せもコンピュータが読める媒体の範囲内で含まれる。
【００１３】
システムメモリー１３０は、コンピュータ記憶装置媒体を揮発性及び／又は読み取り専用メモリ（ＲＯＭ）１３１及びランダムアクセス記憶装置（ＲＡＭ）１３２のような不揮発性メモリの形で含んでいる。始動中にのようにコンピュータ１１０内の要素間の情報を転送するのを支援する基本ルーチンを含んでいる基本入出力システム１３３（ＢＩＯＳ）は、ＲＯＭ１３１に例示的に格納される。ＲＡＭ１３２は例示的にはデータ及び／又は直ちにアクセス可能なプログラムモジュールを含み、又は演算処理装置１２０によってまもなく動作される。制限ではなく例経由で、図１は、オペレーティング・システム１３４、アプリケーション・プログラム１３５、他のプログラムモジュール１３６及び番組データ１３７を示す。
【００１４】
コンピュータ１１０は更に他のものを含んでいることがあるが、例えば、取外し可能な/非取外し可能、揮発性の/不揮発性のコンピュータ記憶装置媒体などである。例のみ経由で、図１は、非取外し可能で不揮発性の磁気媒体から読むか、書くハードディスク・ドライブ１４０、取外し可能で不揮発性の磁気ディスク１５２から読むか、書く磁気ディスク装置１５１、及びＣＤＲＯＭ又は他の光学の媒体のような取外し可能で不揮発性の光ディスク１５６から読むか、書く光ディスクドライブ１５５を示す。取外し可能な/非取外し可能な他のもの、揮発性の/不揮発性のコンピュータ記憶装置媒体、それは例示的な操作環境加算の中で用いることができるが、制限されない、磁気カセットテープ、フラッシュ・メモリカード、ＤＶＤ、デジタルビデオテープ、ソリッドステートＲＡＭ、ソリッドステートＲＯＭなどである。ハードディスク・ドライブ１４１は、システム・バス１２１に例示的に接続されるインターフェース１４０のようなリムーバブルメモリ・インターフェース及び磁気ディスク装置１５１及び光ディスクドライブ１５５は、インターフェース１５０のようなリムーバブルメモリ・インターフェースによってシステム・バス１２１に例示的に接続される。
【００１５】
上述し、図１に図解されたドライブ及びそれらの関連するコンピュータ記憶装置媒体は、コンピュータ１１０のためにコンピュータが読める命令、データ構造、プログラムモジュール及び他のデータの記憶を提供する。図１では、例えば、ハードディスク・ドライブ１４１は、オペレーティング・システム１４４、アプリケーション・プログラム１４５、他のプログラムモジュール１４６及び番組データ１４７の格納として図解される。これらの成分が同じでありえることに注目する、として、又はオペレーティング・システム１３４、アプリケーション・プログラム１３５、他のプログラムモジュール１３６及び番組データ１３７と異なるオペレーティング・システム１４４、アプリケーション・プログラム１４５、他のプログラムモジュール１４６及び番組データ１４７は、最小では、それらが異なるコピーであることを図解するために異なる数をここに与えられる。ユーザは、マウス、トラックボール又はタッチパッドと一般に呼ばれるキーボード１６２のような入力装置及びポインティング・デバイス１６１によってコンピュータ２０へコマンドと情報を入力することがある。他の入力装置（図示せず）はマイクロホン、ジョイスティック、ゲーム・パッド、衛星放送アンテナ、スキャナー、ハンドヘルドPC又は他の書くタブレットのタッチセンシティブスクリーンなどを含んでいることがある。これら及び他の入力装置は、ユーザ入力によって演算処理装置１２０にしばしば接続される、システム・バスにつながれるが、パラレルポート、ゲームポート又はユニバーサル・シリアル・バス（ＵＳＢ）のような、他のインターフェース及びバス構造によって接続されることがある１６０を接続する。モニタ１９１又は他のタイプの表示装置もビデオインタフェース１９０のようなインターフェース経由でシステム・バス１２１に接続される。モニタに加えて、コンピュータは、更にスピーカ１９７及びプリンタ１９６のような他の周辺の出力デバイスを含んでいることがある。それはアウトプット周辺インタフェース１９０によって接続されることがある。
【００１６】
コンピュータ１１０は、リモートコンピュータ１８０のような１つ以上のリモートコンピュータへの論理結合を用いて、ネットワーク化された環境中で動作することがある。リモートコンピュータ１８０は、パーソナルコンピュータ、サーバ、ルータ、ネットワークPC、貴族デバイス又は他の共通ネットワークノードで例示的には多数含んでいる。又は、要素はすべて上に記述した、記憶装置デバイス１８１だけは図１に図解されたが、コンピュータ１１０に関連のある図１に描かれた論理結合はローカルエリアネットワーク（ＬＡＮ）１７１及びワイドエリアネットワーク（ＷＡＮ）１７３を含んでいるが、更に他のネットワークを含んでいるかもしれない。そのようなネットワーキング環境は、オフィス、企業全体に渡るコンピュータネットワーク、イントラネット及びインターネットで普通である。
【００１７】
ＬＡＮネットワーキング環境の中で用いられた時、コンピュータ１１０はネットワークインタフェイス又はアダプターの１７０によってＬＡＮ１７１に接続される。ＷＡＮネットワーキング環境の中で用いられた時、コンピュータ１１０は例示的にはモデム１７２又はインターネットのようなWAN １７３の上のコミュニケーションを確立するための他の手段を含んでいる。モデム１７２（それは内部ことがあるか外部のことがある）はユーザ入力インターフェース１６０又は他の適切な機構経由でシステム・バス１２１に接続されることがある。ネットワーク化された環境では、コンピュータ１１０（すなわちそれの部分）へのプログラムモジュールに描かれた関係詞は、遠隔記憶記憶装置に格納されることがある。制限ではなく例経由で、図１はメモリ・デバイス１８１上で駐在するとして遠隔のアプリケーション・プログラム１８５を示す。示されたネットワーク接続がコンピュータ間の通信リンクが用いられてもよいと確証する例示的・他の手段であることが認識されるだろう。
インターフェース：
プログラミング・インターフェース（より単にインターフェース）は、コードの１以上の他のセグメントによって提供される機能性とコードの１以上のセグメントが通信するか又はアクセスすることを可能にするための任意の機構、プロセス又は試験計画書として見られることがある。又は、プログラミングインターフェースは１つ以上の機構として見られることがある、方法、関数コール、モジュール、オブジェクトなど、他のコンポーネントに１つ以上の機構、方法、関数コール、モジュールなどへの通信するカップリングに有能なシステムの成分である。「コードのセグメント」という用語は、応用の用語又はコード・セグメントが別々にコンパイルされるかにかかわらず、１つ以上の命令又は命令行を含むように意図され、例えば、コード・モジュール、オブジェクト、サブルーチン、機能などを含んでいる、又は、コード・セグメントが実行時システムかプロセスで利用されても、コード・セグメントがソース、中間物又はオブジェクトコードとして提供されても、又は、それらが同じか異なるマシンに置かれるか、多数のマシンを横切って分配されても、又はかどうか、コードのセグメントによって表わされる機能性、全くハードウェア、又はハードウェアとソフトウェアの組み合わせ中で全くソフトウェア中でインプリメントされる。
【００１８】
概念的に、図２Ａ又は図２Ｂの中で示されるように、プログラミングインターフェースはジェネリックに見られることがある。図２Ａは、第１と第２コード・セグメントが通信するコンジットとしてインターフェース２０５を図解する。図２Ｂはインターフェース・オブジェクト２１０及び２１５（それらは１番目と２番目コード・セグメントの一部であることがあり、でないことがある）を含むインターフェースを図解する。システムの第１と第２コード・セグメントは、媒体２２０によって通信することができる。図２Ｂでは、２１０と２１５がミディアム２２０を加えてインターフェースを含むこと反対すると同システムとオンの個別のインターフェースが更に思うことがあるとともに、人はインターフェース・オブジェクト２１０及び２１５を考慮することがある。図２Ａ及び２Ｂはフローの両側の可逆流れ及びインターフェースを示すが、あるインプリメンテーションは単に一方向（又は下記に述べられるような情報の流れはない）の中に情報の流れを持っていることがあるし、又は単に一面でインターフェース・オブジェクトを持っていることがある。制限ではなく例経由で、アプリケーション・プログラム・インターフェイス（ＡＰＩ）、入力点、方法、機能、サブルーチン、リモート・プロシージャ・コール及びコンポーネント・オブジェクト・モデル（ＣＯＭ）インターフェースなどが、プログラミング・インターフェースの定義に含まれる。
【００１９】
そのようなプログラミングインターフェースの様相は方法を含んでいることがあり、第２のコード・セグメントへの最初のコード・セグメント送信情報（ここで「情報」とは、その最も広い意味の中で用いられ、データ、コマンド、リクエストなどを含む）、それによって第２のコード・セグメントが情報を得る方法、また構造、シーケンス、シンタックス、構成、スキーマ、タイミング及び情報の内容などが含まれる。この点では、下位にある転送媒体は、インターネットを利用している、又はワイヤレス、又は両方の組合せなどにより情報が運ばれる限り、インターフェースによって定義された方法。それ自身インターフェースのオペレーションにとってあまり意味がない。あるシチュエーションで、１つのコード・セグメントが別のコード・セグメントによって行なわれた機能性に単にアクセスする場合には、情報転送が別の機構（例えば、バッファに置かれた情報、ファイルなどは、コード・セグメント間の情報の流れから分離する）、又は、架空のものであることがあるので、情報は１又は従来の感覚の両方の方角に決められないことがある。コード・セグメントが疎結合か密結合の構成中のシステムの一部かどうかに依存して、与えられたシチュエーションでこれらの様相のうちのどれ又はすべてでも、例えば重要なことがある。したがって、このリストは、単なる例示であって、制限を意味しない。
【００２０】
プログラミングインターフェースについてのこの概念は当業者に知られており、先の詳述から明らかである。しかし、プログラミングインターフェースをインプリメントするには他の方法もあり、もし明らかに除外されなかったならば、特許請求の範囲で定義される本発明の範囲に含まれることが意図される。他のそのような方法は、もっと精巧か又は図２Ａ及び２Ｂの極度に単純化した視界より複雑なように見えることがある。しかし、それらは、同じ全面的な結果を遂行するためにそれにもかかわらず類似の機能を有する。下記はプログラミングインターフェースのいくつかの実例となる代替的なインプリメンテーションである。
Ａ．ファクタリング：
あるコード・セグメントから別のコード・セグメントまでのコミュニケーションは、多数の離散的なコミュニケーションへコミュニケーションを分解することにより間接的に遂行されることがある。これは、図３Ａ及び３Ｂの中で概略的に描かれている。示されているように、いくつかのインターフェースは、機能性の分割可能な組の点から記述することができる。したがって、数学的には２４を２Ｘ２Ｘ３Ｘ２として提供することがあるように、図２Ａ及び２Ｂのインターフェース機能は、同じ結果を達成するために因数分解（ファクタリング）されることがある。従って、図３Ａの中で図解されるように、インターフェース２０５によって提供される機能は同じ結果を達成する間に多数のインターフェース３０５、３０６及び３０７の中へのインターフェースのコミュニケーションなどを変換するために細分されることがある。
【００２１】
図３Ｂの中で図解されるように、インターフェース２１０によって提供される機能は、同じ結果を達成する間に多数のインターフェース３１０、３１１及び３１２などに細分化される。同様に、最初のコード・セグメントから情報を得る第２のコード・セグメントのインターフェース２１５は、多数のインターフェース３２０、３２１及び３２２の要因として考慮される。ファクタリングの際には、第１のコード・セグメントと共に含まれているインターフェースの数は、第２のコード・セグメントと共に含まれているインターフェースの数と一致する必要はない。図３Ａ及び３Ｂの場合のどちらかでは、インターフェース２０５及び２１０の機能的なスピリットは、それぞれ、図２Ａ及び２Ｂの場合と同じである。
【００２２】
インターフェースのファクタリングは、更に、ファクタリングが認識困難であるような結合性、可換性及びそれ以外の数学的性質に従う。例えば、演算の順序は重要でないことがある。従って、インターフェースによって実行された機能は、もう１個のコード又はインターフェースによって、インターフェースに到着する途中で実行されることがあるし、システムの個別の成分によって行なわれることがある。更に、プログラム技術において通常の知識の１つとして、同じ結果を達成するのに異なる関数コールを行う様々な方法があることを認識することができる。
Ｂ．再定義
ある場合には、意図した結果を遂行する間、プログラミング・インターフェースのある様相（例えばパラメータ）を無視する、加える、再定義することが可能なことがある。これは図４Ａ及び４Ｂにおいて図解されている。例えば、図２Ａのインターフェース２０５が関数コールであるSquare(input, precision, output)であるが、それは３つのパラメータである入力と精度と出力とを含んでおり、それは第１のコード・セグメントから第２のコード・セグメントまで発行されると仮定する。図４Ａの中で示されるように、中央のパラメータの精度が与えられたシナリオ中の関係である場合、それ、できた、かえって都合がよい、無視されるか、無意味な（このシチュエーションで）パラメータと更に取り替えられる。重要でない付加パラメータも加えられることがある。いずれにしても、入力が第２のコード・セグメントによって２乗された後、アウトプットが返される限り、二乗という機能が達成できる。
【００２３】
精度は、非常によく計算機システムの下流又は他の部分への意味のあるパラメータであることがある。しかし、いったん精度が二乗を計算する狭い目的に必要ではないことが認識されれば、交換されることがあるし無視されることがある。例えば、有効な精度価値を送る代わりに、結果に悪影響を及ぼさずに生年月日のような無意味な値を送ることができる。同様に、図４Ｂの中で示されるように、インターフェース２１０はインターフェースへのパラメータを無視するか加えると再定義され、インターフェース２１０と取り替えられる。インターフェース２１５は、不必要なパラメータ又は他のところに処理されることがあるパラメータを無視すると、再定義され、インターフェース２１５として同様に再定義される。ある場合には、見ることができるように、プログラミング・インターフェースが、パラメータ（それはある目的に必要とされない）のような特徴を含んでいることがある。したがって、それらは無視されることがあるし、再定義されることがあるか、他の目的のためにどこか他のところに処理されることがある。
Ｃ．インライン・コーディング
間にある「インターフェース」が形式を変更するように、２つの別個のコード・モジュールの機能性のうちのいくらか又はすべてを合併することが実現可能なことがある。例えば、図２Ａ及び２Ｂの機能性は図５Ａ及び５Ｂの機能性にそれぞれ変換される。図５Ａの中で、図２Ａの第１と第２コード・セグメントはそれらを両方とも含んでいるモジュールに合併される。この場合、コード・セグメントは、まだ互いに伝達していることがある。しかし、インターフェースは、シングルモジュールに、よりふさわしいフォームに適したことがある。したがって、例えば、形式的なコール及びリターンのステートメントは、もはや必要ではない。しかし、インターフェース２０５に準ずる同様の処理又はレスポンスは、まだ有効であることがある。同様に、図５Ｂの中で示されてている、図２Ｂからのインターフェース２１５の一部（又は全部）は、インターフェースを２１０形成するインターフェース２１０にインラインで書かれる。図解されるように、インターフェース２１５は２１５Ａ”及び２１５Ｂ”に分割される。そしてインタフェース部分２１５Ａ”は、インターフェースを２１０"を形成するインターフェース２１０に従ってコード化された。
【００２４】
具体的な例については、図２Ｂからのインターフェース２１０が関数コールであるSquare(input, output)を実行し、それがインターフェース２１５によって受け取られ、第１のコード・セグメントによって入力（二乗する）を用いて送られた値を処理した後で、二乗された結果を出力を用いて送る。そのような場合、第２のコード・セグメント（入力を２乗する）によって行なわれた処理は、インターフェースへの呼び出しのない第１のコード・セグメントによって行なうことができる。
Ｄ．分離
あるコード・セグメントから別のコード・セグメントまでのコミュニケーションは、多数の離散的なコミュニケーションへコミュニケーションを分解することにより間接的に遂行されることがある。これは、図６Ａ及び６Ｂに、概略的に描かれている。図６Ａの中で示されたように、１又は複数のミドルウェア（機能性及び／又はインターフェース機能を下のインターフェースから分離（divorce）するので、分離インターフェースと称される）が提供され、第１のインターフェース６０５における通信を、この例ではインターフェース６１０、６１５、６２０である別のインターフェースに変換する。例えば、第１のインターフェース６０５のプロトコルに従うオペレーティング・システムと通信するように設計されたが、その後に、オペレーティング・システムが別のインターフェースに変更される場合である。これは、この場合は、インターフェース６１０、６１５及び６２０である。第２のコード・セグメントによって用いられるオリジナルのインターフェースが、それが第１のコード・セグメントによって用いられるインターフェースともはや互換性をもたないそのように変更されることは理解される。したがって、中間携帯が用いられ、古く新しいインターフェースを互換性をもつようにするために用いられる。
【００２５】
同様に、図６Ｂの中で示されるように、３番めのコード・セグメントは、インターフェース６３０から知らせを受ける分離インターフェース６３５及び分離で開始することができる、６４０で働くのデザインを変更されて、例えばインターフェース６５０及び６５５へインターフェース機能性を送信するために６４０を接続する、しかし同じ機能的な結果を提供する。同様に、同じか同様の機能的な結果を提供している間に、６３５と６４０は、図２Ｂのインターフェース２１０及び２１５の機能性を新しいオペレーティング・システムに翻訳するために相互に働くことがある。
Ｅ．書き直し（rewriting）
しかし、別の可能な変形は、コードをダイナミカル（動的）に書き換えて、インターフェースの機能を、別のものであるが全体として同一の結果を達成できる何かに置き換えることである。例えば、中間的な言語（例えば、マイクロソフトＩＬ、Java（登録商標）バイトコードなど）で与えられているコード・セグメントがジャスト・イン・タイム（ＪＩＴ）コンパイラ又はインタプリタに実行環境（.Net frameworkや、Java(登録商標)ランタイム環境や、それ以外の類似のランタイム・テイプの環境）で提供されているシステムがある。ＪＩＴコンパイラはダイナミックに、つまり、それらを第２のコード・セグメント（オリジナル又は異なる別のコード・セグメントのいずれか）によって要求されることがあるのと同じくらい異なるインターフェースに順応させるためにコミュニケーションを第１のコード・セグメントから第２のコード・セグメントに変換するように書かれる。これは図７及び８に図解されている。
【００２６】
図７で見ることができるように、このアプローチは上で説明された分離シナリオに似ている。例えば、アプリケーションのインストールベース、最初のインターフェースプロトコルに従ってオペレーティング・システムと通信するように設計されているが、しかし、その後に、オペレーティング・システムが異なるインターフェースを用いるために変更される場合である。ＪＩＴコンパイラはオペレーティング・システムの新しいインターフェースへのインストールベース・アプリケーションから急いでコミュニケーションを準拠するために用いられてもよい。図８に描かれるように、ダイナミック（動的）にインターフェースを書き直すこのアプローチは、ダイナミックにファクタリングを行うか又はそうでなければ、同様にインターフェースを変更するために適用される。
【００２７】
別の実施例によってインターフェースと同じか同様である結果を達成するための上記シナリオも、いろいろな状態の中で連続的に、並列中で、又は他の中間コードで組み合わせられることがあることは更に注目される。したがって、上に示された代替実施例は相互排除でなく、図２Ａ及び２Ｂの中で示された総括的なシナリオに同じか等価なシナリオを生産するために混合され、一致し、組み合わせられることがある。更に、ほとんどのプログラミングコンストラクトでのように、ここに記述されないことがあるが、それにもかかわらず主題のスピリット及びスコープによって表わされるインターフェースの同じか同様の機能性を達成する他の同様の方法である、ここに記述した、つまり、それが少なくとも部分的にそばに表わされた機能性、及び可能にされた有利な結果であることは注目される、インターフェース、それはインターフェースの値の基礎となる。
コマンディング
コマンドは、様々なシナリオにおいて用いられる。例えば、コマンドは、編集において、切り取り、コピー、ペースト、ボールド、イタリクス及び下線追加などのテキスト属性の追加に用いられる。
【００２８】
これらのコマンドは、様々なソースから生成される。例えば、カット・コマンドは、メニュからのカット・コマンドの選択、キーボード・ショートカット（例えば、［コントロール］−ｘ）の入力、ハンドヘルド・デバイスにおける何らかの動作（例えば、フリック）、ボイス・コマンドに応答して、また、他の入力デバイスや他のプログラム・コードなどにより生成される。
【００２９】
コマンドは、異なるオブジェクトに適用されると、異なるものを意味することがある。例えば、カット・コマンドは、テキスト・ボックスでは選択されたテキストをカットすることを意味するが、選択されたローを有するデータ・グリッドではローの全体を削除することを意味することがある。
【００３０】
別のシナリオとして、コマンドは、コントロール・テンプレートにおいて用いられる。例えば、図９に表わされるようなスクロール・バー９０５では、ラインアップ・ボタン９１０と、ラインダウン・ボタン９２０とトラック９１５とが存在する。コントロール・テンプレートは、コントロールの機能を変更せずに、ユーザ又はソフトウェア開発者がコントロールのルック・アンド・フィールをコントロールすることを可能にする。例えば、マークアップ言語では、ソフトウェア又はページの開発者は、スクロール・バー用のテンプレートを次のように定義できる。
【００３１】
【表１】
2009506465.tif 000003
【００３２】
スクロール・バー９０５のボタンが付勢される場合は常に、適切なコマンドが生成される。スクロール・バー９０５は、LineUp又はLineDownコマンドを実際に何によって生成されたかを意識する必要はない。例えば、コマンドは、ユーザが音声認識ソフトウェアやキーボード入力などによってボタン９１０又は９２０の１つを選択することによって生成されることがある。
【００３３】
コマンドが用いられる別のシナリオは、アプリケーション開発者がある動作（アクション）又は方法（メソッド）を実行したいときや、動作やイベントが生じる場合は常に、である。アプリケーション開発者は、コントロール・ライクなボタン上のイベント又は動作に当該コマンドを関連付けることによって、これを生じさせることがある。例えば、ファイル・オブジェクトは、FileOpen及びFileEdit動作を定義することがある。ユーザがエンタを押下するか選択されたアイテムをダブルクリックすると、FileOpen動作を実行することができる。例えば、コマンドを用いることにより、アプリケーション開発者がビジネスロジックからＵＩロジックを分離することが可能になる。
【００３４】
コマンドは、ICommandインターフェースを介してインプリメント可能である。ICommandインターフェースは、Execute方法とCanExecute方法とを含む。Execute方法は、コマンドが実行されるときに講ずるべき動作を定義することを可能にする。例えば、テキストボックスがフォーカスを有する間にカット・コマンドが実行されると、テキストボックス・コンポーネントは、選択されたテキストをバッファの中にカットする。
【００３５】
コマンドは、その動作を実行するのにパラメータを必要とすることがある。例えば、FileOpen又はPrintコマンドは、正確に動作するのにファイル名を必要とすることがある。ある実施例では、Execute方法は、パラメータ又はタイプ・オブジェクトのジェネリックなデータを受け取るが、その場合、コマンドの消費者及び作成者がパラメータ又はジェネリックなデータが何を意味するかを定義する。コマンドは、パラメータを必要としない場合には、すべての過去のパラメータも無視することがある。
【００３６】
CanExecute方法は、コマンドが実行するかどうかを指示する。例えば、フォーカスがスクロール・バーに設定される場合、カット・コマンドは実行することができないことがある。コンポーネントが、CanExecute方法をコールして、Execute方法を実行できるかどうかを判断する。CanExecute方法は、また、必要とされない場合には無視されることがあるパラメータを受け取る。
【００３７】
更に、あるイベントが、ICommandインターフェースと関係付けられることもある。イベントは、コマンドのexecute能力がいつ変化したのか、又は、ICommandインターフェースに従って具体化されたオブジェクトがCanExecuteをコールして実行することがあるかどうかをいつ判断べきかを、指示する。例えば、オブジェクトは、関連付けられている視覚的要素をイネーブル又はディセーブルして、実行に関する現在の能力を指示することができる。
【００３８】
ICommandインターフェースをインプリメントする例示的なインターフェースとして、次のものがある。
【００３９】
【表２】
2009506465.tif 000004
【００４０】
このインターフェースでは、ICommand.Executeは、コマンドが実行されるときに実行されるべき方法を定義し、ICommand.CanExecuteはブーリアンを返し、コマンドが実行されるかどうかを示し、実行すべきその能力が変わる場合は常に、CanExecuteChangedEventがコマンドによって上げられる。
【００４１】
インターフェースを用いるオブジェクトの一例は、フォーム上のボタンである。ボタンは、submitコマンドと関連付けられる。ボタンがクリックされると、例えば、サーバに情報を提出することが望まれている。これが許可されるかどうかに関して指示を提供するため、ボタンは、当該情報が特定の時点において提出されるかどうかに基づいて、イネーブル又はディセーブルされる。例えば、その情報は、提出すべきデータがすべて利用可能（例えば、フォーム上で満たされている）かどうか、サーバへの接続が利用可能かどうか、フォームがサーバに接続されるかどうかなどに基づき、提出されることができることがあるし、提出されないことがある。サーバへの接続が変わる場合には、CanExecuteChangedEventのイベントがレイズ（raise）されることにより、ボタンがそのイネーブル／ディセーブルされた状態を変更する。
【００４２】
上述されたボタンは、Commandsourceの一例（以下では、「CommandSource」とする）である。一般に、CommandSourceは、コマンドを呼び出すことができる任意の要素を含む。他の例示的なCommandSourcesは、MenuItem、ListBoxItem、Hyperlink及び他のコントロールを含む他の要素を含んでいる。CommandSourceクラスの例示的なインターフェースは次のものを含む。
【００４３】
【表３】
2009506465.tif 000005
【００４４】
CommandSourceは、CommandSourceが呼び出されるときは常にICommand.Executeをコールすることにより、コマンドを呼び出す。CommandSourceは、呼び出されることが意味するものを定義する。例えば、ボタンがクリックされるときに、ボタンなどのCommandSourceは、コマンドを呼び出す。更に、CommandSourceは、ICommand.Execute方法に、CommandSourceのCommandParameterの値を送る。
【００４５】
更に、CommandSourceは、コマンド上のCanExecute状態に基づいて、それ自体をイネーブル又はディセーブルする。そうするために、CommandSourceはICommand.CanExecute方法を呼び出して、それに、CommandParameterの値を渡す。次に、CommandSourceは、戻されたブーリアンを用いて、CommandSourceの状態をイネーブル又はディセーブルに設定する。
【００４６】
CommandSourceは、また、ICommand.CanExecuteChangedEventのための登録をして、CommandSourceがCanExecuteChangedEventを受け取る度に、ICommand.CanExecute方法を再び呼び出す。ICommand.CanExecuteから返された値に基づいて、CommandSourceは、そのイネーブル又はディセーブルされた状態をそれに従って更新する。
【００４７】
コマンドを呼び出すために用いられるオブジェクトの別の例として、InputBindingオブジェクト（以下では、「InputBinding」とする）がある。InputBindingは、入力をコマンドと関連付ける。後述するように、そして、ある条件の下では、InputBindingによって識別された入力が受け取られると、コマンドが生成される。
上述したように、入力は、キーボード、スタイラス、マウス、音声入力などを含む多くのソースから与えられる。InputBindingクラスの例示的なクラス定義には、次のものがある。
【００４８】
【表４】
2009506465.tif 000006
【００４９】
InputGestureオブジェクト（以下では、「InputGesture」）は、マウスのクリック、スタイラスのフリック又はキーボード入力など（InputGestureは、これらを聞きたい）の１又は複数のイベントの組を定義する。この組は、InputGestureのInputEventsのプロパティを用いる際に定義される。イベントに対応するイベント・リスナが登録されることによって、InputGestureオブジェクトは、任意のイベントが生じるときに通知される。
【００５０】
InputGestureは、また、InputEventArgsを受け取り、InputEventsArgsがInputGestureと関連付けられたイベントの組と一致するかどうかを示す値を返すMatch方法を定義する。
【００５１】
更に、ValidateCallback方法は、InputGestureクラスのサブクラスによって提供される。一致に関してInputGestureに対応する可能性があるすべてのInputBindingsをチェックする前に有効な引数が受け取られたかどうかを判断するためイベントが受け取られる場合、VallidateCallbackがコールされる。InputGestureクラスは、InputGestureのより多くの特定のタイプ（例えば、マウス、キーボード、スタイラスなど）に対するペアレント・クラスとして機能する。
【００５２】
InputGestureクラスのための例示的なインターフェースは、次のものを含む。
【００５３】
【表５】
2009506465.tif 000007
【００５４】
InputBindingは、InputGestureをコマンドに関連付ける。例えば、InputBindingオブジェクトは、［コントロール］]−ｃを「コピー」コマンドと関連付ける。別のInputBindingオブジェクトは、スタイラスのフリックを、「カット」コマンドと関連付ける。InputBindingオブジェクトがInputGesture（イベントの適切な組によって指示される）を得る度に、関連付けられたコマンドが実行される。InputBindingクラスは、InputBinding（例えば、マウス、キーボード、スタイラスなど）のより多くの特定のタイプに対するペアレント・クラスとして機能する。
【００５５】
図１０は、この出願に開示されている主題の特徴に従った視覚的なツリーを一般的に表わすブロック図である。グラフィックス・フレームワーク（図１２との関係で説明されるものなど）は、視覚的なツリーを用いて、視覚的要素を表示する。視覚的なツリーは、表示する要素を表わす視覚的要素１００５−１０１４を含む。そのような要素は、ウィンドウ、グリッド、リストボックス、コンボ・ボックス、ボタン、テキスト、グラフィックス、パネルなどを含む。視覚的なツリーのいくつかの要素は、視覚的なツリーにおける他の要素を含むことがある。例えば、ウィンドウ要素は、パネルとグリッドとを含む。別の例として、ボタン要素は、テキスト要素と長方形要素とを含む。ある意味では、視覚的なツリーは、階層的データ構造の１つの形式と考えることが可能である。
【００５６】
上述したように、InputBinding（例えばInputGesture）によって特定される入力が受け取られると、InputBindingは、コマンドを生成する。一般に、要素は、それ自体と関連付けられたInputBindingsの集まり（すなわち、０、１、又はそれより多く）を有する。これらのInputBindingsは、時には、「インスタンス」InputBindingsと呼ばれる。更に、InputBindingは、クラス・レベルで、そして、グローバル・レベルで登録される。
【００５７】
図１１は、この出願に開示される主題の特徴に従い、InputEventを受け取ることに応答してコマンドを生成する際に生じる動作を一般的に表す流れ図である。ブロック１１０５において、動作が開始する。
【００５８】
ブロック１１１０では、InputEventが、受け取られる。例えば、キーボード上の１つのキーが押下される、又は、マウスボタンが押下される。ブロック１１１０では、フォーカスを備えた要素が選択される。例えば、テキストボックスがフォーカスを有するときにInputEventが受け取られると、テキストボックスが選択される。
【００５９】
ブロック１１２０では、要素がInputEventのために定義されたインスタンスInputBindingを有するかどうかに関する判断がなされる。ブロック１１２５では、要素がInputEventのために定義されたInputBindingを有する場合には、動作はブロック１１６０で継続し、そうでなければ、その動作はブロック１１３０で継続する。
【００６０】
ブロック１１３０では、要素がInputEventのために定義したクラスInputBindingを有するかどうかが判断される。ブロック１１３５では、要素がInputEventのために定義されたクラスInputBindingを有する場合には、動作は、ブロック１１６０で継続し、そうでなければ、その動作はブロック１１４０で継続する。
【００６１】
いくつかのインプリメンテーション（実装例）では、クラスInputBindingがInputEventに対して定義されていない場合には、InputEventは、要素への入力として送られる。要素は、一連のキーストローク又は他の入力を「聞く」ことができる。要素がそのような入力に聞いていてその入力を処理する場合には、動作は停止し、そうでなければ、その動作はブロック１１４０で継続する。
【００６２】
ブロック１１４０では、ペアレント要素が現在の要素に対して存在するかどうかに関して判断がなされる。存在する場合には、その動作は、ブロック１１４５で継続し、そうでなければ、その動作はブロック１１５０で継続する。
【００６３】
ブロック１１４５では、ペアレント要素が選択される（例えば、ペアレント要素においてInputEventをレイズすることよって）。次に、アンセスタ（先祖）がInputEventに対して定義されたインスタンス又はクラスInputBindingを含むまで、又は、そのようなInputBindingを含むアンセスタが見つからなくなるまで、ブロック１１２０-１１４０に関連付けされた動作が反復される。
【００６４】
インスタンス又はクラスInputBindingが見つからない場合には、ブロック１１５０において、グローバル（広域）なInputBindingがInputEventのために定義されるかどうかに関して判断がなされる。ブロック１１５５では、グローバルなInputBindingがInputEventに対して定義されている場合には、動作はブロック１１６０で継続し、そうでなければ、その動作はブロック１１６５で継続する。
【００６５】
ブロック１１６０では、発見されたInputBindingに関連付けられたコマンドが実行される。ブロック１１６５で、動作は終了する。
【００６６】
上記の動作がコマンドの生成に関して大きな柔軟性を提供するということが認識されるだろう。例えば、インスタンス・コマンドによって更に無視される可能性があるクラス・コマンドによって無視されうるグローバル・コマンドは登録されることがある。
【００６７】
RoutedCommandオブジェクト（以下では、「RoutedCommand」）を用いて、コマンドを、視覚的なツリー又はそれ以外のデータ構造を介して、コマンドを処理する要素にルーティングすることができる。例えば、RoutedCommandは、カット、コピー、ペーストなどのようなコマンドと共に用いられることがある。その場合、コマンドのターゲットはフォーカスと共に変化する。
[００７０] RoutedCommandは、特定のターゲット要素においてイベントをレイズするか、又は、コマンドが生じるときにフォーカスを有する要素においてイベントをレイズすることによって、コマンドをルーティングする。要素がコマンドに結びつけられている（例えば、後述のCommandBindingによって）場合には、CommandBindingによって定義されたハンドラは、コマンドを処理するためにコールされる。要素がコマンドに結び付けられていない場合には、イベントは、要素のペアレントの上でレイズされる。要素のペアレントがコマンドに結び付けられている場合には、ペアレント要素のCommandBindingによって定義されたハンドラが、コマンドを処理する。要素のペアレントがコマンドに結び付けられていないときには、イベントは、そのペアレントなどの上でレイズされる。結局、要素はコマンドに結び付けられていることがわかるか、又は、コマンドが、どの要素にも処理されることなく、視覚的なツリーの上に到達する。
【００６８】
いくつかのインプリメンテーションでは、クラス及びグローバルなCommandBindingsが、登録され用いられる。そのようなインプリメンテーションでは、適切なCommandBindingの選択は、InputBindingsに関して図１１を参照して説明したのと類似の態様で進む。
【００６９】
CommandBindingオブジェクト（以下では、「CommandBinding」）は、そのRoutedCommandと、当該RoutedCommandのためのイベントと関連付けられたイベント・ハンドラにおいてコールするデリゲート（例えば方法）との間の関連性を定義する。コマンドオブジェクトは、実行されると、フォーカスされた要素におけるPreviewCommandExecuteEventとCommandExecuteEventとをファイア（点火）し、パラメータとしてコマンドを送る。同様に、コマンドのIsEnabled方法は、コールされると、フォーカスされた要素におけるCommandQueryEnabledとPreviewCommandQueryEnabledEventとを呼び出す。CommandBindingクラスの例示的な定義には、次のものがある。
【００７０】
【表６】
2009506465.tif 000008
【００７１】
図１２は、この出願に記載される主題の特徴に従ってコマンドに関連付けられた動作を実行する際に生じる動作を一般的に表わす流れ図である。ブロック１２０５で、動作は開始する。
【００７２】
ブロック１２１０では、Execute方法が呼び出される。例えば、ユーザはあるフォーム上でボタンを押す。ブロック１２１０では、フォーカスを備えた要素が選択される。コマンドが目標とされた（ターゲットの）要素と関連付けられている場合には、その要素が選択される。例えば、目標とされたテキスト・ボックスに関連付けられたExecute方法が呼び出された場合には、テキスト・ボックスが選択される。
【００７３】
ブロック１２２０では、要素がコマンドに対して定義されたCommandBindingを有しているかどうかに関して判断がなされる。ブロック１２２５では、要素が当該コマンドに対して定義されたCommandBindingを有する場合、動作はブロック１２６０で継続し、そうでなければ、動作はブロック１２３０で継続する。
【００７４】
ブロック１２３０では、要素がコマンドに対して定義されたCommandBindingを有するかどうかに関して判断がなされる。ブロック１２３５では、要素がコマンドに対して定義されたCommandBindingを有する場合、動作はブロック１２６０で継続し、そうでなければ、動作はブロック１２４０で継続する。
【００７５】
ブロック１２４０では、ペアレント要素が現在の要素に対して存在するかどうかに関する判断がなされる。存在する場合には、動作はブロック１２４５で継続すし、そうでなければ、動作はブロック１２５０で継続する。
【００７６】
ブロック１２４５では、当該ペアレント元素が選択される（例えば、ペアレント要素においてイベントをレイズすることによって）。次に、当該コマンドに対して定義されたインスタンス又はクラスCommandBindingをアンセスタが含むまで、又は、そのようなCommandBindingを含むアンセスタが見つからなくなるまで、ブロック１２２０-１２４０に関連付けられた動作が反復される。
【００７７】
インスタンス又はクラスCommandBindingが見つからない場合、ブロック１２５０において、グローバルなCommandBindingが当該コマンドに対して定義されテイルかどうかに関して判断がなされる。ブロック１２５５では、グローバルなCommandBindingがコマンドに対して定義される場合、動作はブロック１２６０で継続し、そうでなければ、動作はブロック１２６５で継続する。
【００７８】
ブロック１２６０では、見つかったCommandBindingによって識別されるハンドラが実行される。ブロック１２６５で、動作は終了する。
【００７９】
更に、CanExecuteクエリがRoutedCommandと同じ機構によって処理される。例えば、要素がCanExecute方法を含み、当該要素のフォーカスが合っている場合には、当該要素のCanExecute方法がコールされる。そうでなければ、要素のアンセスタに関して、CanExecute方法を見つけるためのサーチがなされる。CanExecuteクエリを実行する際に、RoutedCommandは、フォーカスを備えた要素と選択された要素とのいずれかにおいてCanExecuteEventをレイズする。RoutedCommandのための例示的なインターフェースは次のものを含む。
【００８０】
【表７】
2009506465.tif 000009
【００８１】
アプリケーション開発者がフォーカスされた要素の代わりに特定の要素へのRoutedCommandを直接ターゲットとすることをInputElementターゲットが可能にすることに注意すべきである。例えば、アプリケーション開発者が、当該ボタンの次にあるテキストボックスにおいてボタンに常に「サブミット」コマンドを実行させたい、又は、他の何らかの行動を実行させたいときに、これは有用である。
【００８２】
更に、RoutedCommandは、RequerySuggestedのイベントを聞くことができる。RequerySuggestedイベントは、多くの理由で生じる。例えば、フォーカスがテキストボックスの中で選択されたテキストに設定されている場合、カット、コピー及びペースト・コマンド（及び、関連するボタン、メニュ・アイテムなど）をイネーブルすることが必要である。しかし、フォーカスがスクロール・バーに設定されている場合には、カット、コピー及びペーストは適用可能でないから、これらのボタンとコントロールはディセーブルされることが必要となることがある。RequerySuggestedイベントは、１例としてフォーカスが変化する度に、１又は複数の要素において、レイズされる。
【００８３】
RequerySuggestedのイベントが受け取られると、RoutedCommandは、CommandSourceが聞くCanExecuteChangedEventをレイズする。CommandSourceは、その状態を更新するそのCanExecute方法をコールする。
【００８４】
RoutedCommandsは、また、IsRMEnabledプロパティを含む。IsRMEnabledプロパティがフォールス（偽）に設定されている場合には、要素は、CanExecuteがたとえトゥルー（真）であっても、イネーブル状態になることを妨げられる。これは、例えば、様々なコマンドを行なう権利が制限される可能性があるデジタル著作権管理（ＤＲＭ）システムで機能させるのに用いることができる。
【００８５】
RoutedPropertyは、アプリケーション開発者が、フォーカスと共にターゲットが変化する際にターゲット上で直接定義できないプロパティを定義することを可能にする。例えば、ツールバーは、ボールド、イタリック、下線付などのツールバー・アイテムを含んでいることがある。更に、ツールバーは、テキストボックスとの関連付けが可能であり、テキストは、テキストボックスから選択可能である。例えば、ボールドのツールバー・アイテムが選択される場合には、選択されたテキストのボールド化は、トグル式に切り換え可能である。選択されたテキストがボールドをサポートする場合には、ボールドのツールバー・アイテムをイネーブルすることができる。更に、ツールバー・アイテムは、選択されたテキストがツールバー・アイテムに関連付けられた属性（例えば、ボールド、イタリック、下線付き）を含むかどうかに関して、現在の状態を表示することができる。
【００８６】
RoutedPropertyのための例示的なインターフェースは、次のものを含む。
【００８７】
【表８】
2009506465.tif 000010
【００８８】
RoutedPropertyと関連付けられた要素は、コマンドとRoutedCommandsとに関して上述した機構を用いることにより、そのイネーブル／ディセーブル状態を設定することができる。更に、RoutedPropertyは、フォーカスを備えた要素の現在値を得るのに用いて、それがその状態を従って表示するようすることができる。この値は、値を返すフォーカスされた要素においてGetValueEventをファイアすることにより、得られることがある。RoutedPropertyは、また、コマンドを介してフォーカスを有する要素の現在の値（例えば、ボールドからノーマルまで）を設定するのに用いられる。この値は、フォーカスされた要素においてSetValueEventをファイアし、当該値を設定する値のパラメータを送ることにより、設定される。これらのイベントは、RoutedCommandsとの関係で上述したのと同じ方法で伝達可能である。
【００８９】
図１３は、この出願に開始されている本発明の特徴が動作する環境を一般的に表すブロック図である。この環境は、プログラム１３０５、プレゼンテーション・フレームワーク１３１０、プレゼンテーション・コア１３１５、ミルコア（milcore）１３２０、ランタイム・コンポーネント１３４５、コーデック（codecs）成分１３２５、ダイレクトＸ（DirectX）コンポーネント１３３０、グラフィック・デバイス・インターフェース（ＧＤＩ）１３３５、ドライバ１３４０及びランタイム・モジュール１３４５を含む。
【００９０】
プレゼンテーション・フレームワーク１３１０は、ソフトウェア開発者に開示されており、様々なリクエストがなされるＡＰＩを含む。ボタン、リストボックス、コンボ・ボックス、スクロール・バー、スプリッタなどのグラフィックス・フレームワークのトップ・レベル・オブジェクトは、プレゼンテーション・フレームワーク１３１０に常駐することがある。
【００９１】
プレゼンテーション・コア１３１５も、様々なリクエストがなされることがあるＡＰＩによってソフトウェア開発者に開示される。上述したインターフェースは、プレゼンテーション・コア１３１５によって開示されることがある。ImageSourceオブジェクト、ブラシ、ペン、形状（シェープ）、アニメーション・サポート、テキストなどのグラフィックス・フレームワークのトップ・レベル・オブジェクトのプロパティは、プレゼンテーション・コア１３１５又はプレゼンテーション・フレームワーク１３１０に常駐することがある。
【００９２】
ミルコア１３２０は、プレゼンテーション・フレームワーク１３１０及びプレゼンテーション・コア１３１５のＡＰＩによって提供される機能性をインプリメントする。ミルコア１３２０は、プレゼンテーション・コア１３１５及びプレゼンテーション・フレームワーク１３１０によってアクセスされる。
【００９３】
ランタイム・コンポーネント１３４５は、１又は複数のプログラミング言語から作成された中間言語を実行するために環境を提供する。例えば、ランタイム・コンポーネントは、プレゼンテーション・コア１３１５、プレゼンテーション・フレームワーク１３１０及びプログラム１３０５をインプリメントするコードから作成された中間言語を実行するために用いられる。
【００９４】
コーデック１３２５は、プレゼンテーション・コア１３１５及びミルコア１３２０によってイメージをエンコード及びデコードするイメージング・タスクに用いられてもよい。
【００９５】
ダイレクトＸコンポーネント１３３０は、ソフトウェア開発者がハードウェアに特定のコードを書く必要なしに、特別のハードウェア機能（ビデオ及び音声ハードウェア機能のような）にアクセスすることを可能にするＡＰＩを提供することがある。プログラム１３０５及びミルコア１３２０は、ダイレクトＸコンポーネントを用いて、当該特徴にアクセスする。
【００９６】
ＧＤＩ１３３５は、複数のプロセスがビデオ・ディスプレイにグラフィクス及びフォーマットされたテキストを表示することを可能にし、また、そのようなプロセスに代わってグラフィクスやフォーマットされたテキストを表示するデバイス・ドライバと対話することができる。
【００９７】
ドライバ１３４０は、ランタイム１３４５が様々なプログラミング言語から生成された中間コードを実行するのに用いられる間に、ハードウェアとのインターフェースに用いることができる。
【００９８】
図１３の環境の様々なコンポーネントの間で何本かの線が引かれ、これらのコンポーネントの間での通信可能性が示されているが、本発明の精神又は範囲から逸脱することなく、これよりも多い、少ない又は他の通信経路が存在しうる。更に、この環境の様々な成分が記載されているが、本発明の精神又は範囲から逸脱することなく、これより多い、少ない又は別のコンポーネントを用いたり、他の構成に構成することが可能である。
【００９９】
ここに記述された主題の様相が入力（抽象的なインプリメンテーション）を抽象するために用いられてもよいことは、認識されるだろう。これは、アプリケーション開発者がメニュー、ツールバー及び他のUI要素をより容易に作成することを可能にする。例えば、アプリケーション開発者は、マークアップ言語でコマンドにメニュー品かツールバー・アイテムを関連させることにより、より容易にメニューかツールバーを作成することがある。更に、標準コマンド（例えばカット、コピー、貼り付けなど）を定義するコマンドライブラリは作られることがある。コマンドが出される場合、インプリメンテーションが抽象されるので、要素又はその被相続人用の適切なハンドラは自動的に呼ばれる。
【０１００】
以上の詳述から見ることができるように、様相はユーザ・インタフェースに関連して記述された。ここに記述された主題の様相が様々な変更及び代替構造（それの絵入りの実施例が図面中で示され、上に詳細に記述されてある）に弱い間。しかしながら、要求された主題の様相を示された特定形態に制限する意図がないことは理解されるに違いない。しかし、これに反して、意図は、変更、代替構造、及びここに記述された主題の種々相のスピリット及びスコープ以内にある等価物をすべてカバーすることである。
【図面の簡単な説明】
【０１０１】
【図１】本発明の複数の特徴を組み入れることができるコンピュータ・システムを表すブロック図である。
【図２】本発明の複数の特徴に従って動作する例示的なアプリケーション・プログラミング・インターフェース（ＡＰＩ）を表すブロック図である。
【図３】本発明の複数の特徴に従って動作する例示的なアプリケーション・プログラミング・インターフェース（ＡＰＩ）を表すブロック図である。
【図４】本発明の複数の特徴に従って動作する例示的なアプリケーション・プログラミング・インターフェース（ＡＰＩ）を表すブロック図である。
【図５】本発明の複数の特徴に従って動作する例示的なアプリケーション・プログラミング・インターフェース（ＡＰＩ）を表すブロック図である。
【図６】本発明の複数の特徴に従って動作する例示的なアプリケーション・プログラミング・インターフェース（ＡＰＩ）を表すブロック図である。
【図７】本発明の複数の特徴に従って、コンパイラ又はインタプリタが１又は複数のインターフェースを１又は複数の別のインターフェースにどのように変換するかを一般的に表すブロック図である。
【図８】本発明の複数の特徴に従って、コンパイラ又はインタプリタが１又は複数のインターフェースを１又は複数の別のインターフェースにどのように変換するかを一般的に表すブロック図である。
【図９】本発明の複数の特徴に従って、コントロール・テンプレートとして用いられるスクロール・バー・コントロールを表すブロック図である。
【図１０】本発明の複数の特徴による視覚的ツリーを一般的に表すブロック図である。
【図１１】本発明の複数の特徴に従って、InputEventを受け取ることに応答してコマンドを生成する際に生じる動作を一般的に表す流れ図である。
【図１２】本発明の複数の特徴に従って、コマンドと関連付けられた動作を実行する際に生じる動作を一般的に表す流れ図である。
【図１３】本発明の複数の特徴による環境を一般的に表すブロック図である。
【図１】
2009506465.tif 000011
【図２】
2009506465.tif 000012
【図３】
2009506465.tif 000013
【図４】
2009506465.tif 000014
【図５】
2009506465.tif 000015
【図６】
2009506465.tif 000016
【図７】
2009506465.tif 000017
【図８】
2009506465.tif 000018
【図９】
2009506465.tif 000019
【図１０】
2009506465.tif 000020
【図１１】
2009506465.tif 000021
【図１２】
2009506465.tif 000022
【図１３】
2009506465.tif 000023
【国際調査報告】
2009506465.tif 000024
2009506465.tif 000025