(57)【要約】  アプリケーションプログラムを拡大プログラム等の効果プログラムに結合するエンジンおよびＡＰＩが記載される。例えば、出力領域内で閲覧されるためにソースコンテンツが拡大されることができる。拡大は、拡大エンジンに対して拡大ウィンドウを識別し、拡大するソース領域と、拡大変換と、可能性としては、包含すべきウィンドウまたは拡大から除外すべきウィンドウなどのフィルタリング基準とを識別することによって実現されることができる。表示されたグラフィックの一領域を、変換で変更を加えて表示する要求が受け取られることができ、その領域に対応するグラフィックコマンドが受け取られると、そのグラフィックコマンドが処理されて、当該領域の変換された表現を表示する。エンジンおよびＡＰＩは、直接モードグラフィックのプリミティブ（例えばＧＤＩコマンド）および保持モードグラフィックのプリミティブ（例えばレンダリングツリーに対応するプリミティブを扱い、合成エンジンが、拡大された出力を含む出力を作成する。
2009501394.tif 000002
【特許請求の範囲】
【請求項１】
コンピューティング環境において、
拡大エンジンであって、アプリケーションプログラムが拡大プログラムに結合するための少なくとも１つのインタフェースを備えたインタフェースセットを有する拡大エンジン
を具えたことを特徴とするシステム。
【請求項２】
前記アプリケーションプログラムは、前記拡大エンジンに対して拡大ウィンドウを識別することにより、前記拡大プログラムに結合することを特徴とする請求項１記載のシステム。
【請求項３】
前記拡大エンジンは、前記拡大ウィンドウに対応するメッセージを受け取り、それらのメッセージに対応するデータを、出力データの拡大のために前記拡大プログラムに提供することを特徴とする請求項２記載のシステム。
【請求項４】
包含されるソースウィンドウのセットに対応するグラフィック関連データのみが拡大のために処理されるように、選択的ウィンドウコンポーネントをさらに具えたことを特徴とする請求項１記載のシステム。
【請求項５】
除外されないソースウィンドウのセットに対応するグラフィック関連データのみが拡大のために処理されるように、選択的ウィンドウコンポーネントをさらに具えたことを特徴とする請求項１記載のシステム。
【請求項６】
前記拡大エンジンは、グラフィックストリームからグラフィックプリミティブを受け取り、前記拡大エンジンは、前記グラフィックプリミティブをラスタ化してビットマップにする少なくとも１つのラスタライザに結合されることを特徴とする請求項１記載のシステム。
【請求項７】
前記拡大エンジンは、ラスタ化の前に前記グラフィックプリミティブの少なくとも一部に変更を加えて拡大を実現することを特徴とする請求項６記載の方法。
【請求項８】
前記拡大エンジンは、ラスタ化の後に前記グラフィックプリミティブの少なくとも一部に変更を加えて拡大および／または他の効果を実現することを特徴とする請求項６記載の方法。
【請求項９】
前記拡大エンジンは、ウィンドウメッセージの受け取りを登録することを特徴とする請求項１記載の方法。
【請求項１０】
コンピュータ実行可能命令を有するコンピュータ可読媒体であって、前記コンピュータ可読命令は、
表示されたグラフィックの一領域を、変換で変更を加えて表示する要求を受け取るステップと、
その領域に対するグラフィックコマンドに対応するデータを受け取るステップと、
プログラムによって指定された出力範囲に前記領域の変換された表現が表示されるように、前記グラフィックコマンドを処理するステップと
を実行することを特徴とするコンピュータ可読媒体。
【請求項１１】
ウィンドウの識別子を受け取って前記プログラムで指定された出力範囲を入手するステップ
を備えるコンピュータ実行可能命令をさらに具えたことを特徴とする請求項１０記載のコンピュータ可読媒体。
【請求項１２】
前記領域の中にある時に当該ウィンドウの少なくとも一部を変換するために包含すべき少なくとも１つのウィンドウからなるセットを受け取るステップ
を有するコンピュータ可読命令をさらに具えたことを特徴とする請求項１０記載のコンピュータ可読媒体。
【請求項１３】
当該ウィンドウの少なくとも一部が前記領域の中にある時に変換から除外すべき少なくとも１つのウィンドウからなるセットを受け取りステップと、
当該ウィンドウに対応する変換された出力から、前記セットの各ウィンドウをフィルタリングで除外するステップと
を有するコンピュータ実行可能命令をさらに具えたことを特徴とする請求項１０記載のコンピュータ可読媒体。
【請求項１４】
表示されたグラフィックの前記領域を、前記変換で変更を加えて表示する前記要求を受け取るステップは、前記領域を識別するデータと、前記変換を識別するデータとを受け取るステップを含むことを特徴とする請求項１０記載のコンピュータ可読媒体。
【請求項１５】
表示されたグラフィックの前記領域を、前記変換で変更を加えて表示する前記要求を受け取るステップは、
前記領域を識別するデータを受け取るステップと、
前記変換を識別するデータを受け取るステップと、
当該ウィンドウ内の内容の拡大に関して、少なくとも１つのウィンドウからなるセットの包含および／または除外に対応する情報をフィルタリングすることをステップと
を含むことを特徴とする請求項１０記載のコンピュータ可読媒体。
【請求項１６】
前記グラフィックコマンドを処理するステップは、前記コマンドを少なくとも１つの拡大コンポーネントに提供して、前記コマンドをラスタ化することで拡大された出力が得られるように前記コマンドを変換するステップを具えたことを特徴とする請求項１０記載のコンピュータ可読媒体。
【請求項１７】
前記グラフィックコマンドを処理するステップは、前記ビットマップを変換のためのコンポーネントに提供する前に、前記グラフィックコマンドの少なくとも一部をラスタ化して、その結果得られるビットマップにしたことを備えることを特徴とする請求項１０記載のコンピュータ可読媒体。
【請求項１８】
コンピューティング環境において、
第１のプログラムからの直接モードグラフィックのプリミティブと、第２のプログラムからの保持モードのプリミティブとを受け取るグラフィックサーバと、
前記グラフィックサーバに結合され、拡大プログラムに結合するための少なくとも１つのインタフェースを備えるインタフェースセットを有する拡大エンジンと、
前記グラフィックエンジンと通信するように結合された合成エンジンであって、前記グラフィックエンジンは、前記直接モードグラフィックのプリミティブと保持モードのプリミティブに対応する少なくともいくらかのデータを、拡大された出力を含むグラフィック出力を作成するために前記合成エンジンに送る前に、拡大のために前記拡大プログラムに提供する合成エンジンと
を具えたことを特徴とするシステム。
【請求項１９】
前記合成エンジンによる前記グラフィック出力の最終的な作成の前に、少なくとも１つの効果でデータに変更を加える効果コンポーネントをさらに具えたことを特徴とする請求項１８記載のシステム。
【請求項２０】
前記合成エンジンに送る前に、直接モードグラフィックをラスタライザに送る画像フィルタをさらに具えたことを特徴とする請求項１８記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータ用の拡大エンジンおよびインタフェースに関する。
【背景技術】
【０００２】
現代のコンピュータシステムは、通例は視覚障害のあるユーザがコンピュータを利用しやすくするために表示画面の一部分を拡大する能力をユーザに提供するが、一定の状況で一般ユーザにも拡大による恩恵をもたらす。拡大される表示画面の部分は、マウスがどこに置かれているか、キーボードのフォーカスがどこにあるか、および／または、例えば切り取りと貼り付け等を行うコンテンツを選択する時など、ユーザがどの個所を他の方法で編集中であるか、に選択的に基づくことができる。
【０００３】
一般には、ユーザが拡大鏡（ｍａｇｎｉｆｉｅｒ）を実行すると、拡大ウィンドウが開き、拡大されたコンテンツがそのウィンドウに表示される。ユーザは、拡大ウィンドウの大きさと位置を調整することができ、拡大の度合いを調整することができ、場合によっては例えば色の反転等の他の効果を選択することができる。そのような拡大鏡プログラムの１つは、ドライバフック（ｈｏｏｋｉｎｇ）によって動作して、基本的には、画面取り込み動作の際にビデオドライバに送られるグラフィック呼び出しをインターセプトし、拡大鏡プログラムはその後、対応するグラフィック画像を拡大ウィンドウ内に拡大する。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
そのような拡大鏡は、そのようにしてコンピュータユーザに利益を提供するが、一般に、既存の拡大鏡は比較的制限がある。例えば、画面の取り込みのみに依拠する拡大鏡は、比較的低い品質と低い性能の拡大の解決法を提供する。さらに、拡大鏡アプリケーションプログラムは、他のプログラムから容易に活用することができない。
【課題を解決するための手段】
【０００５】
簡潔に述べると、本発明の各種態様は、アプリケーションプログラムを拡大プログラム等の効果プログラムに結合するエンジンおよびアプリケーションプログラムインタフェースを対象とする。そのようにして、ソースコンテンツが、例えば指示された出力ウィンドウなどの出力領域内で閲覧されるために、拡大、または他の形で変更される（例えば歪める）ことができる。
【０００６】
例示的な一実装では、アプリケーションプログラムが拡大プログラムに結合するためのインタフェースセットと併せて、拡大エンジンが提供される。これは、拡大エンジンに対して拡大ウィンドウを識別し、それと併せて、拡大するソース領域と、拡大変換と、可能性としては、明確に包含すべきウィンドウまたは拡大から除外すべきウィンドウなどのフィルタリング基準とを識別することによって実現することができる。
【０００７】
別の例示的実装では、コンピュータ実行可能命令を有するコンピュータ可読媒体が、表示されたグラフィックの一領域を変換で変更を加えて表示する要求を受け取るステップを含むステップを実行する。その領域に対するグラフィックコマンドに対応するデータを受け取ると、プログラムによって指定された出力範囲に領域の変換された表現が表示されるようにグラフィックコマンドが処理される。
【０００８】
別の例示的実装では、システムは、第１のプログラムからの直接モードグラフィックのプリミティブと、第２のプログラムからの保持モードのプリミティブとを受け取るグラフィックサーバを含む。拡大エンジンがグラフィックサーバに結合され、拡大プログラムに結合するためのインタフェースセットを有する。グラフィックエンジンは、直接モードグラフィックのプリミティブと保持モードのプリミティブに対応する少なくともいくらかのデータを、拡大された出力を含むグラフィック出力を作成するために合成エンジンに送る前に、拡大のために拡大プログラムに提供する。
【０００９】
ここで、本発明の概略についてまとめると、以下のようになる。
【００１０】
アプリケーションプログラムを拡大プログラム等の効果プログラムに結合するエンジンおよびＡＰＩが記載される。例えば、出力領域内で閲覧されるためにソースコンテンツが拡大されることができる。拡大は、拡大エンジンに対して拡大ウィンドウを識別し、拡大するソース領域と、拡大変換と、可能性としては、包含すべきウィンドウまたは拡大から除外すべきウィンドウなどのフィルタリング基準とを識別することによって実現されることができる。表示されたグラフィックの一領域を、変換で変更を加えて表示する要求が受け取られることができ、その領域に対応するグラフィックコマンドが受け取られると、そのグラフィックコマンドが処理されて、当該領域の変換された表現を表示する。エンジンおよびＡＰＩは、直接モードグラフィックのプリミティブ（例えばＧＤＩコマンド）および保持モードグラフィックのプリミティブ（例えばレンダリングツリーに対応するプリミティブを扱い、合成エンジンが、拡大された出力を含む出力を作成する。
【００１１】
なお、この他の利点は、図面と併せて以下の詳細な説明により明らかになる。
【００１２】
本発明は、添付図面に例として図示され、限定されるものではない。図面中、同様の参照符号は同様の要素を指す。
【発明を実施するための最良の形態】
【００１３】
例示的動作環境
図１に、本発明が実施されることが可能な適切なコンピューティングシステム環境１００の例を示す。コンピューティングシステム環境１００は、適切なコンピューティング環境の一例にすぎず、本発明の使用または機能の範囲について何らの限定を示唆するものではない。また、コンピューティング環境１００は、例示的動作環境１００に図示する構成要素の１つまたは組合せに関連する依存性や必要性を持つものとも解釈すべきでない。
【００１４】
本発明は、多数の他の汎用または特殊目的のコンピューティングシステム環境または構成で動作する。本発明とともに使用するのに適する可能性のある周知のコンピューティングシステム、環境、および／または構成の例には、これらに限定しないが、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドまたはラップトップ機器、タブレット機器、マルチプロセッサシステム、マイクロプロセッサを利用したシステム、セットトップボックス、設定可能な家電製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、上記の任意のシステムまたは機器を含む分散コンピューティング環境等が含まれる。
【００１５】
本発明は、コンピュータによって実行されるプログラムモジュールなどのコンピュータ実行可能命令の一般的文脈で説明することができる。一般に、プログラムモジュールには、特定のタスクを行うか、特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造等が含まれる。本発明は、通信ネットワークを通じてつながれた遠隔の処理機器によってタスクが行われる分散コンピューティング環境でも実施されることができる。分散コンピューティング環境では、プログラムモジュールは、メモリ記憶装置を含むローカルおよび／またはリモートのコンピュータ記憶媒体に配置されてもよい。
【００１６】
図１を参照すると、本発明を実施する例示的システムは、コンピュータ１１０の形態の汎用コンピューティングデバイスを含む。コンピュータ１１０の構成要素は、これらに限定しないが、処理装置１２０、システムメモリ１３０、および、システムメモリを含む各種のシステム構成要素を処理装置１２０に結合するシステムバス１２１を含むことができる。システムバス１２１は、各種のバスアーキテクチャを使用した、メモリバスまたはメモリコントローラ、ペリフェラルバス、ローカルバスを含む数種のバス構造のいずれでもよい。限定ではなく例として、そのようなアーキテクチャには、ＩＳＡ（Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、ＭＣＡ（Ｍｉｃｒｏ  Ｃｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、ＥＩＳＡ（Ｅｎｈａｎｃｅｄ  ＩＳＡ）バス、ＶＥＳＡ（Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ）ローカルバス、およびメザニンバスとも称されるＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バスが含まれる。
【００１７】
コンピュータ１１０は通例、各種のコンピュータ可読媒体を備える。コンピュータ可読媒体は、コンピュータ１１０によるアクセスが可能な利用可能媒体でよく、揮発性および不揮発性の媒体、取り外し可能および取り外し不能の媒体の両方を含む。限定ではなく例として、コンピュータ可読媒体は、コンピュータ記憶媒体と通信媒体を含むことができる。コンピュータ記憶媒体には、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータ等の情報を記憶するための任意の方法または技術で実装された揮発性および不揮発性の媒体と、取り外し可能および取り外し不能の媒体が含まれる。コンピュータ記憶媒体には、これらに限定しないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたは他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）または他の光ディスク記憶、磁気カセット、磁気テープ、磁気ディスク記憶または他の磁気記憶装置、または、所望の情報を記憶するために使用することができ、コンピュータ１１０によるアクセスが可能な任意の他の媒体が含まれる。通信媒体は通例、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータを、搬送波や他の移送機構等の変調データ信号に具現化し、任意の情報伝達媒体を含む。用語「変調データ信号」とは、信号中に情報を符号化するような形でその特性の１つまたは複数を設定または変化させた信号を意味する。限定ではなく例として、通信媒体には、有線ネットワークや直接配線接続等の有線媒体と、音響、ＲＦ、赤外線、他の無線媒体等の無線媒体がある。上記の媒体の任意の組合せもコンピュータ可読媒体の範囲に含まれる。
【００１８】
システムメモリ１３０は、読み取り専用メモリ（ＲＯＭ）１３１およびランダムアクセスメモリ（ＲＡＭ）１３２等の揮発性および／または不揮発性メモリの形態のコンピュータ記憶媒体を備える。起動時などにコンピュータ１１０内の要素間の情報転送を助ける基本ルーチンを含んだ基本入出力システム１３３（ＢＩＯＳ）は、通例、ＲＯＭ１３１に記憶される。ＲＡＭ１３２は通例、処理装置１２０から即座にアクセス可能な、かつ／または処理装置１２０によって現在操作されているデータおよび／またはプログラムモジュールを保持する。限定ではなく例として、図１には、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７を示す。
【００１９】
コンピュータ１１０は、この他の取り外し可能／取り外し不能、揮発性／不揮発性のコンピュータ記憶媒体も備えることができる。単なる例として、図１には、取り外し不能、不揮発性の磁気媒体の読み書きを行うハードディスクドライブ１４１、取り外し可能、不揮発性の磁気ディスク１５２の読み書きを行う磁気ディスクドライブ１５１、およびＣＤ−ＲＯＭや他の光学媒体等の取り外し可能、不揮発性の光ディスク１５６の読み書きを行う光ディスクドライブ１５５を示す。例示的動作環境で使用することができる他の取り外し可能／取り外し不能、揮発性／不揮発性のコンピュータ記憶媒体には、これらに限定しないが、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、固体素子ＲＡＭ、固体素子ＲＯＭ等がある。ハードディスクドライブ１４１は通例、インタフェース１４０等の不揮発性メモリインタフェースを通じてシステムバス１２１に接続され、磁気ディスクドライブ１５１および光ディスクドライブ１５５は、通例、インタフェース１５０等の取り外し可能メモリインタフェースでシステムバス１２１に接続される。
【００２０】
上記で説明し、図１に示すこれらのドライブとそれに関連するコンピュータ記憶媒体は、コンピュータ１１０のコンピュータ可読命令、データ構造、プログラムモジュール、他のデータの記憶を提供する。例えば、図１では、ハードディスクドライブ１４１は、オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、およびプログラムデータ１４７を記憶するよう示されている。これらの構成要素は、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、プログラムデータ１３７と同じであっても異なってもよいことに留意されたい。ここでは、オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、プログラムデータ１４７には、それらが少なくとも異なるコピーであることを示すために異なる番号を付している。ユーザは、タブレット、電子デジタイザ、１６４、マイクロフォン１６３、キーボード１６２、および、一般にはマウス、トラックボール、タッチパッド等と呼ばれるポインティングデバイス１６１等の入力装置を通じてコンピュータ１１０にコマンドと情報を入力することができる。図１には図示されない他の入力装置には、ジョイスティック、ゲームパッド、衛星受信アンテナ、スキャナ等を含むことができる。上記および他の入力装置は、多くの場合、システムバスに結合されたユーザ入力インタフェース１６０を通じて処理装置１２０に接続されるが、パラレルポート、ゲームポート、ユニバーサルシリアルバス（ＵＳＢ）等、他のインタフェースおよびバス構造で接続されてもよい。モニタ１９１または他の種類の表示装置も、ビデオインタフェース１９０等のインタフェースを介してシステムバス１２１に接続される。モニタ１９１は、タッチスクリーンパネル等と一体化されてもよい。モニタおよび／またはタッチスクリーンパネルは、タブレット型のパーソナルコンピュータのように、コンピューティングデバイス１１０が搭載された筺体に物理的に結合することができることに留意されたい。また、コンピューティングデバイス１１０などのコンピュータは、スピーカ１９５やプリンタ１９６などの他の周辺出力装置も備えることができ、それらの出力装置は、出力周辺インタフェース１９４等を通じて接続することができる。
【００２１】
コンピュータ１１０は、リモートコンピュータ１８０等の１つまたは複数のリモートコンピュータとの論理接続を使用するネットワーク環境で動作することができる。リモートコンピュータ１８０は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイス、または他の一般的なネットワークノードであってよく、図１にはメモリ記憶装置１８１のみを示すが、通例は、コンピュータ１１０との関連で上述した要素の多くまたはすべてを含む。図１に示す論理接続には、ローカルエリアネットワーク（ＬＡＮ）１７１とワイドエリアネットワーク（ＷＡＮ）１７３が含まれるが、他のネットワークも含んでよい。このようなネットワーク環境は、オフィス、企業規模のコンピュータネットワーク、イントラネット、およびインターネットで一般的である。
【００２２】
ＬＡＮネットワーク環境で使用される場合、コンピュータ１１０は、ネットワークインタフェースまたはアダプタ１７０を通じてＬＡＮ１７１に接続される。ＷＡＮネットワーク環境で使用される場合、コンピュータ１１０は通例、インターネットなどのＷＡＮ１７３を通じて通信を確立するためのモデム１７２または他の手段を備える。モデム１７２は、内蔵型でも外付け型でもよく、ユーザ入力インタフェース１６０または他の適切な機構を介してシステムバス１２１に接続することができる。ネットワーク環境では、コンピュータ１１０に関連して図示したプログラムモジュール、またはその一部は、遠隔のメモリ記憶装置に記憶してよい。限定ではなく例として、図１は、リモートアプリケーションプログラム１８５がメモリ装置１８１に存在するのを示す。図のネットワーク接続は例示的なものであり、コンピュータ間に通信リンクを確立する他の手段を用いてよいことは理解されよう。
【００２３】
拡大エンジンおよびＡＰＩ
本明細書に記載される技術の各種態様は、拡大アプリケーションプログラム、特に高品質のプログラムを構築することが可能なプラットフォームを提供することを対象とする。同時に、本発明は、ワード処理プログラムや表計算プログラム等の一般的なアプリケーションプログラムを含む他のプログラムが容易に拡大機能を提供するための機構を提供する。
【００２４】
一般に、これは、オペレーティングシステムコンポーネントを介する等により、拡大アプリケーションプログラムをコンピュータシステムに結合するために必要な機能の多くを提供する拡大エンジンとアプリケーションプログラムインタフェースによって実現される。本明細書に記載される例示的な実装の１つでは、拡大エンジンとインタフェースは、任意のアプリケーションプログラムによってホストされることが可能な、または（例えばオペレーティングシステムシェルを介して）独立して実行することが可能なＷｉｎ３２コントロールの形で説明される。ただし、理解されるように、本発明は、本明細書に記載される特定の実装または例は無論のこと、コントロール全般やＷｉｎ３２コントロールに限定されない。代わりに、本発明を実施する多数の方式が実現可能であり、そのため、本発明は、本明細書で用いられるどの特定の例にも限定されず、コンピューティング全般に恩恵と利益をもたらす各種の方式で使用されてよい。
【００２５】
図面の図２に移ると、本明細書でコントロールの形で説明される拡大鏡を操作する概略的な流れ図が示される。一般に、どのプログラムウィンドウも拡大ウィンドウとなることができ、そのため、例えば、あるプログラムがダイアログや他のポップアップウィンドウのようなウィンドウを開き、そのウィンドウを、画面の別の領域の拡大画像を表示するために使用することができる。ウィンドウを拡大ウィンドウとして設定するには、プログラムは、ウィンドウハンドル（ｈｗｎｄ）を通常の方式で受け取り、例えば一実装では、ＣｒｅａｔｅＷｉｎｄｏｗのＡＰＩを介して拡大ウィンドウが作成され、そのようなウィンドウは、他の一般的なコントロールと同様に表示、非表示、およびサブクラス化が可能である。そうしたウィンドウのペイントコードは、拡大スタックを使用して、デスクトップの変換されたコピーを描画する。プログラムは、他のウィンドウと同様に、クリップ領域やアルファレイヤを指定して、例えばＳｅｔＷｉｎｄｏｗＲｇｎを介してさらに出力を制御することができる。拡大ウィンドウのレンダリングスタック（下記で図４を参照して説明する）は、ウィンドウクリップを使用して、必要な処理の量を減らす。
【００２６】
拡大ウィンドウが作成されると、プログラムは、（アプリケーションプログラムインタフェースを介して）拡大エンジン／ＡＰＩの初期化機能を呼び出して、ハンドルを提供する。これを図２のステップ２０２を介して概略的に表す。拡大エンジン／ＡＰＩの各種機能については下記で述べることに留意されたい。
【００２７】
ステップ２０４は、拡大エンジン／ＡＰＩ３１０（図３）がウィンドウメッセージを受け取るために登録することを表す。この例示的環境では、ドライバフックは利用できないか、少なくとも望ましくなく、そのため拡大エンジン／ＡＰＩは、ウィンドウメッセージの待ち行列を介してグラフィックコマンドを入手することに留意されたい。
【００２８】
ＡＰＩの呼び出し元、通例はシェルまたは他のアプリケーションプログラムは、拡大される領域も特定し、この領域は、デスクトップ全体に至るまでの任意の実際的な矩形であってもよい。これがステップ２０６を介して表され、呼び出し元が拡大のソースを識別する。拡大のソースは変化してよいことに留意されたい。例えばマウスポインタがウィンドウの中央に置かれて、ウィンドウがマウスポインタを囲む場合がある。マウスポインタが移動されるとソースが変化し、マウスポインタの下にあるものはすべてマウスポインタがその上に動かされると拡大されて表示される。そのようなマウスポインタによる拡大ウィンドウは、代わりにデスクトップ上に固定されてもよいが、それでもソースは、やはりマウスポインタに合わせて変化し、それにより拡大ウィンドウの内容を変化させることに留意されたい。
【００２９】
システムマウスカーソルについていくらか考察する。マウスの挙動は、アプリケーションに固有のポリシーに依存する場合がある。シナリオに固有のマウスの扱いを追加することは、ホストアプリケーションに任されている。
【００３０】
例えば、カーソルは拡大ウィンドウの上にある場合があるが、拡大ウィンドウは、マウスクリックについてはヒットテストしない。その結果、クリックは、拡大ウィンドウを通り抜けて拡大ウィンドウの下にあるウィンドウに行くことになる。これは、システムカーソルが出力ウィンドウの下に位置するがソース矩形の内側にはない時などに混乱を生じさせる可能性がある。その場合、カーソルは、「死角」と呼ばれる、ユーザに見えないユーザインタフェースの領域の上にある。この１つの解決法は、システムカーソルに加えて、拡大されたカーソルを出力の中に明示的に描画するものである。フラグ（ＭＳ＿ＳＨＯＷＭＡＧＮＩＦＩＥＤＣＵＲＳＯＲ）により、カーソルの所有元のアプリケーションは、拡大されたカーソルを表示および非表示にすることができる。別のフラグ（ＭＳ＿ＣＬＩＰＡＲＯＵＮＤＣＵＲＳＯＲ）は、システムカーソルが死角にある時に、拡大鏡ウィンドウに、システムカーソルを囲む範囲を切り取らせる。
【００３１】
ステップ２０８は、例えば２ｘ、３ｘ等の拡大度に（通例）使用される変換の入手に相当する。この変換は、例えば歪みなど拡大以外の何かを指定することができ、拡大が使用される場合は、拡大は、１ｘ（拡大しない）とするか、例えばサイズを縮小した画像を表示できるなど、１ｘより小さい何らかの小数とすることができることに留意されたい。このため、本明細書では主として拡大を参照して本発明を説明するが、技術的に拡大も縮小もしない恒等変換を含む任意の変換が適用されてよい。出力矩形は、基本的に拡大プロセスに無視されることに留意されたい。すなわち、拡大率が小さすぎる場合、出力は、拡大ウィンドウの全体を占めない。拡大率が大きすぎる場合、出力は切り取られる。どちらの場合も、出力は、出力ウィンドウ内で０，０に固定される。
【００３２】
ステップ２１０は、選択的なウィンドウの拡大すなわちフィルタリングの概念を表す。より詳細には、指定された領域にあるすべてのものを拡大する必要はない。代わりに、拡大エンジン／ＡＰＩは、プログラムが、拡大するウィンドウと、最終的な拡大出力から除外すべきウィンドウを指定することを可能にする。そのようにすることは実現可能ではあるが、拡大鏡ウィンドウは、自身を拡大することは決してないことに留意されたい。
【００３３】
フィルタリングは、包含を介しても除外を介してもよい。したがって、プログラムは、包含すべきウィンドウ（拡大ウィンドウは包含しない）のリストを指定するか、明確に除外されるウィンドウ（拡大ウィンドウは除外される）を除くすべてのウィンドウを拡大することを選択することができる。このように、プログラムは、何が拡大されるかについてかなりの柔軟性を有する。
【００３４】
拡大エンジン／ＡＰＩ３１０が設定されると、図３に、拡大エンジン／ＡＰＩ３１０の一般的な動作の仕組みを示す。図３は、場合によってはタイプが異なるグラフィックデータがディスプレイへの描画のために複数のアプリケーションプログラム等から提供される、例示的なグラフィック処理の構成を示す。周知のグラフィック出力タイプの１つは、直接モードグラフィックである。このモードでは、アプリケーションが、ディスプレイに直接コンテンツ（すなわちテキストおよびグラフィック）を描画する命令（例えばＧＤＩプリミティブ）を提供する。別のタイプのグラフィック出力は、プレゼンテーションサブシステムのプログラム等からの保持（ｒｅｔａｉｎｅｄ）モードグラフィックであり、プレゼンテーションサブシステムのプログラムは描画プリミティブを提供し、そのプリミティブから、画面グラフすなわちレンダリングツリーがそのプログラムのためのサーフェスに構築される。そしてレンダリングツリーが処理されて、適切な出力を得る。本明細書における説明のために、「ＧＤＩ」は、通例は、プログラムが直接モードグラフィックの対象とするプリミティブとコンテンツ（実際にはサーフェスへのリダイレクトを介して保持される場合でも）を指すものとして用いられ、一方、「レンダリングツリー」データは、プログラムが保持モードグラフィックの対象とするプリミティブおよびコンテンツを指すものとして用いられる。
【００３５】
直接モードのグラフィックと保持モードのグラフィックを合成するために、リダイレクト層３１２は、基本的には、直接モードグラフィックが保持モード命令であるかのように、ＧＤＩグラフィックをサーフェスに送る。通例はＧＤＩプリミティブを扱うためのラスタライザ等を含むグラフィックサーバ３１４は、各種のサーフェスから合成エンジン３１８に、１つまたは複数のビットマップおよび／またはプリミティブを含むグラフィックストリーム３１６を提供する。合成エンジンは次いで、サーフェスからの各種の出力を合成し、合成したグラフィックデータをグラフィックカードに送ってグラフィック出力を描画させる。
【００３６】
一実装では、グラフィックストリーム３１６は、ＧＤＩデータのセットごとに、ラスタ化されたビットマップを含むことができる。この理由は、この実装では、合成エンジン３１８は、プレゼンテーションサブシステムのプリミティブ（レンダリングツリーに相当する）用のラスタライザ３２０のみを備え、ＧＤＩプリミティブをラスタ化しないためである。
【００３７】
ただし、拡大すべきＧＤＩデータについては、拡大エンジン／ＡＰＩ３２２とそれに接続された構成要素による処理のためにＧＤＩプリミティブがストリームで送られることができ、それらの構成要素が、合成エンジン３２０に送る前にそのプリミティブをラスタ化することに留意されたい。より詳細には、可視コンテンツを拡大する方法の１つは、従来の拡大で行われるように、当該コンテンツのラスタ化されたビットマップを使用してコンテンツを拡大／縮小するものである。ただし、この方法は一般に品質と性能結果が低いが、それでも既存の直接モードのプログラムには適当である。それに代えて、例えば２倍の拡大の場合にフォントサイズや線の長さ等を倍にするなど、プリミティブのデータを変更すると、より優れた品質と性能の拡大が得られる。
【００３８】
図３に、グラフィックストリームの一部が拡大エンジン／ＡＰＩ３１２に振り分けられることを概念的に示す。上記のように、ドライバフックを用いない環境でグラフィックプリミティブを受け取るために、拡大エンジン／ＡＰＩは、ウィンドウメッセージの登録をする。一般に、拡大されるグラフィックストリームの部分はいずれも、初めに拡大エンジン／ＡＰＩ３に送られる。これにより、一般には拡大／縮小である、グラフィックプリミティブの前処理と変換が可能になる。
【００３９】
拡大／縮小は、プラグインクライアントのスケーリングコンポーネント３２２によって達成されることができる。これに代えて、またはこれに加えて、拡大およびその他の効果は、本明細書で「サードパーティ」プログラム３２４と称する別個の拡大効果プログラムによって達成されることもできるが、そのようなプログラムを特定のベンダに限定する意図はなく、また実際に、拡大エンジン／ＡＰＩの提供者がそのようなプログラムも提供してよい。これにより、例えばより優れた品質のビットマップ拡大プログラム等、より優れた拡大／効果プログラムが利用可能になるため、拡張性が得られる。あるいは、独自のＳｔｒｅｔｃｈＢｌｔアルゴリズムを（可能性としては異なる平滑化アルゴリズムと併せて）実装することを望むアプリケーションは、拡大の変換を所望の変換に設定し、次いで自身のフィルタで拡大を行うことにより、実装することができる。変換の設定は、拡張点では扱われない、プレゼンテーションサブシステム（例えばＡｖａｌｏｎ／Ｍｅｄｉａ  Ｉｎｔｅｇｒａｔｉｏｎ  Ｌａｙｅｒ）のプリミティブの拡大／縮小に必要である。一実装では、アプリケーションは、ＳｅｔＭａｇｎｉｆｉｅｒＩｍａｇｅＦｉｌｔｅｒＣａｌｌｂａｃｋ関数を介して、独自の拡大を扱う。
【００４０】
一般には、拡大を行う少なくとも１つの構成要素を利用することができる。
【００４１】
したがって、ストリームの拡大される部分について、拡大エンジン３１２は、設定に従ってプリミティブおよび／またはビットマップを処理し、変更を加えたデータをグラフィックサーバおよび／または合成エンジンに適宜返すことができる。色効果等のその他の（例えば拡大／縮小ではない）効果が要求される場合は、グラフィックサーバ３１４および／または合成エンジン３１８は、該当する効果コードに送るために拡大エンジン／ＡＰＩ３１２を再度呼び出すことができる。これを図３でそれら構成要素間の矢印で表す。
【００４２】
レンダリングツリーのプリミティブに関しては、プリミティブに変更を加えることによってレンダリングツリーに変換ノードを追加することができるため、拡大等は単純である。上述のように、ＧＤＩプリミティブは、ラスタ化の前に変換されて拡大等を実現するか、または、ＧＤＩプリミティブをビットマップにラスタ化して、そのビットマップが、例えば従来実現される要領等の周知の方式で拡大されてもよい。いずれにせよ、グラフィックストリーム３１６は最終的に、拡大されるコンテンツに対応するデータを含むプリミティブおよび／またはビットマップを含む各種のサーフェスを含んでいる。
【００４３】
図４は、拡大エンジン／ＡＰＩ３１２のさらなる詳細を含む各種構成要素を示す。メッセージハンドラコンポーネント４３０は、上記のように、登録されたコントロールに対するメッセージを受け取る。メッセージハンドラ４３０は、送られてくるメッセージ（パブリックＡＰＩと対をなす）を処理し、該当する内部コンポーネントを呼び出す、実際の拡大ウィンドウのためのＷｉｎＰｒｏｃである。
【００４４】
グラフィックストリームリーダ（ｒｅａｄｅｒ）コンポーネント４３２は、選択的ウィンドウフィルタリングコンポーネント４３４と協働し、包含されるウィンドウ、すなわち除外されないウィンドウに対応する、グラフィックサーバ３１４からのＧＤＩデータおよびレンダリングツリーデータだけが拡大のために処理されるようにする。一実装では、グラフィックストリームリーダコンポーネント４３２は、グラフィックパイプ（ストリーム）ＡＰＩのクライアントであり、グラフィックストリームから未処理パケットを受け取り、そのパケットを選択的ウィンドウフィルタリングコンポーネント（ＨＷＮＤパケットフィルタ）４３４に渡す。選択的ウィンドウフィルタリングコンポーネント４３４は、グラフィックパイプリーダコンポーネントからのパケットを、各パケットに関連付けられたＨＷＮＤに基づいてフィルタリングする。拡大鏡のＨＷＮＤは常にフィルタリングで除去され、ＨＷＮＤの包含リストまたは除外リストを使用してさらにパケットをフィルタリングする。
【００４５】
該当するメッセージ、すなわち（例えば各自のＨＷＮＤに基づいて）拡大すべきソースウィンドウについては、画像フィルタ４３６がスケーリングコンポーネント３２２および／またはサードパーティの拡大鏡３２４と協働して、図４の例ではプリミティブに変更を加えることにより画像を拡大／縮小する。一般に、画像フィルタ４３６は、プラグインがカスタムの画像フィルタリングコードを実装するためのコールバック機構を実装する。
【００４６】
次いで、ＧＤＩコンテンツが、コンテンツラスタライザ４３８でラスタ化された後にグラフィックストリームライタ４４０に渡され、同時に、レンダリングツリーデータが変更された形態でグラフィックストリームライタ４４０に渡されて、ライタ４４０でラスタ化される。コンテンツラスタライザ４３８は、パケットのラスタ化と合成を担当する。この構成要素は、３つの重要なプロパティ、すなわち変換、クリップ領域（ソース矩形を出力ウィンドウからの出力クリップと組み合わせる）、および出力サーフェスを公開し、出力サーフェスの大きさは、クリップ領域と変換に基づく。
【００４７】
コンテンツラスタライザ４３８は、グラフィックストリームライタ（合成エンジンライタ）４４０に結合されてグラフィックサーバと通信し、デスクトップの拡大される領域をデスクトップの残りの部分と合成する。このようにして、拡大されたデータが該当するグラフィックストリームで合成エンジン３１８に到達する。
【００４８】
拡大されたデータは、効果コンポーネント４４２を介して図示される、任意の効果を追加する後処理のために拡大エンジン／ＡＰＩ３１２に返されてよい。一般に、効果コンポーネント４４２は、他の（例えばサードパーティの）コードがカスタムの色効果を実装するための機構を実装する。図４には明確にはそのように示していないが、サードパーティの拡大鏡効果プログラム３２４等のプラグイン効果を効果コンポーネント４４２に結合して所望の効果を達成してよいことに留意されたい。独自の効果の適用を望むアプリケーションは、ＳｅｔＭａｇｎｉｆｉｅｒＣｏｌｏｒＥｆｆｅｃｔｓＳｈａｄｅｒ関数を介して登録されるカスタムのピクセルシェーダルーチンで効果を実装することにより、効果を適用することができる。
【００４９】
このようにして、拡大プログラムを容易にコンピュータシステムに結合することができるが、一方で、拡大ＡＰＩにより拡大鏡をＷｉｎ３２コントロールとして実装することが可能なので、拡大鏡コントロールは、どの適切なアプリケーションプログラムに投入してもよい。ユーザがコントロールからコントロールに移動するのに従ってコントロールを拡大し、更新する拡大クライアントを構築することが可能である。
【００５０】
さらに、コントロールとして、複数の拡大鏡ウィンドウが提供されてよい。それらのウィンドウは、異なる倍率で同じソースビューを参照しても、異なるソースビューおよび／または倍率を参照してもよい。最適化のために、同じソースビューを異なる倍率で拡大する場合、ソースデータは、拡大エンジン／ＡＰＩ３１２に一度だけ提供される。
【００５１】
上記のように、合成前のフィルタリングを利用することができ、それにより、プログラムは、拡大エンジンが画像を合成する前に、カスタムのフィルタリング機構をプラグインすることができる。合成後フィルタリングも、拡大エンジンが画像を合成した後に動作するようにプラグインしてもよい。テキストは、拡大後の目標解像度で自動的にラスタ化されることに留意されたい。
【００５２】
より詳細には、レンダリングツリーのプリミティブ呼び出しは、一般に、グリフ（ｇｌｙｐｈ）ビットマップキャッシュのインデックスを参照する。現在、そうしたビットマップは、デフォルトの画面解像度に合わせてラスタ化され、キャッシュインデックスの連続からテキスト列を生成する方法はない。拡大エンジンは、拡大後の倍率変更された解像度でラスタ化された画像の別のコピーを入手することになる。ＧＤＩテキストのプリミティブは、拡大後の倍率変更された解像度に合わせて再描画される。これが該当するのは、ＧＤＩテキストのプリミティブが利用可能な状況である。
【００５３】
例示的なＡＰＩ関数および構造
拡大ウィンドウの作成
最初のステップは、開発者がＭａｇｎｉｆｉｃａｔｉｏｎＩｎｉｔｉａｌｉｚｅ（）関数を使用して、ハンドル「ＨＷＮＤ」を持つ任意のウィンドウから拡大ウィンドウを作成することである。拡大ウィンドウは、一般的なコントロールと同じように振る舞う。作成されたコントロールのためのＨＷＮＤは、拡大ＡＰＩの他のメソッドへの第１のパラメータとして使用される。
【００５４】
ウィンドウスタイル
ＭＳ＿＿ＳＨＯＷＭＡＧＮＩＥＤＣＵＲＳＯＲ
このフラグを設定すると、カーソルの拡大画像が出力中に表示される。
ＭＳ＿ＣＬＩＰＡＲＯＵＮＤＣＵＲＳＯＲ
このフラグを設定すると、システムカーソルの下にある範囲内で、拡大されたウィンドウが切り取られる。これは、ユーザに、カーソルの下に実際にあるＵＩを（部分的ではあっても）見せるためである。
ＭＳ＿ＩＮＶＥＲＴＣＯＬＯＲＳ
このフラグを設定すると、拡大鏡ウィンドウの内容の色が反転される。
【００５５】
ウィンドウメッセージ
これらは、拡大鏡コントロールが理解するウィンドウメッセージである。これらのメッセージは、ＳｅｎｄＭｅｓｓａｇｅＡＰＩを使用して送られる。
ＭＧＭ＿ＳＥＴＳＯＵＲＣＥ
拡大するソース矩形を設定する。
【００５６】
ＷＰＡＲＡＭ：ＮＵＬＬ
ＬＰＡＲＡＭ：＊ＲＥＣＴ。ターゲット矩形を設定すべき画面座標の矩形が埋められる。
【００５７】
戻り値：成功した場合に０
ＭＧＭ＿ＧＥＴＳＯＵＲＣＥ
現在拡大されているソース矩形を取得する。
【００５８】
ＷＰＡＲＡＭ：ＮＵＬＬ
ＬＰＡＲＡＭ：＊ＲＥＣＴ。ターゲット矩形の画面座標にある矩形で埋められる。
【００５９】
戻り値：成功した場合に０
ＭＧＭ＿ＳＥＴＴＲＡＮＳＦＯＲＭ
出力のためにソース矩形に適用される変換を設定する。通例は出力を拡大／縮小するために使用される。
【００６０】
ＷＰＡＲＡＭ：ＮＵＬＬ
ＬＰＡＲＡＭ：＊ＴＲＡＮＳＦＯＲＭ。使用する変換を指定する。
【００６１】
戻り値：成功した場合にＴＲＵＥ
ＭＧＭ＿ＧＥＴＴＲＡＮＳＦＯＲＭ
ソース矩形に適用される変換を返す。
【００６２】
ＷＰＡＲＡＭ：ＮＵＬＬ
ＬＰＡＲＡＭ：＊ＴＲＡＮＳＦＯＲＭ。現在の変換で埋められる。
【００６３】
戻り値：成功した場合に０
ＭＧＭ＿ＳＥＴＦＩＬＴＥＲＬＩＳＴ
フィルタリングに使用されるＨＷＮＤのリストを設定する。拡大鏡ウィンドウは常にフィルタリングで取り除かれる（すなわち除外される、または包含されない）。このリストは、拡大すべきウィンドウの包含リストか、フィルタリングで除くべきウィンドウの除外リストのいずれかである。
【００６４】
ＷＰＡＲＡＭ：ｆｉｌｔｅｒｌｉｓｔ中のＨＷＮＤの数である整数
ＬＰＡＲＡＭ：＊ＦＩＬＴＥＲＬＩＳＴ。フィルタリングするＨＷＮＤのリストと、新しいフィルタモードを指定する。
【００６５】
戻り値：成功した場合にＴＲＵＥ。失敗するとＦＡＬＳＥ。
ＭＧＭ＿ＧＥＴＦＩＬＴＥＲＬＩＳＴ
カウントＨＷＮＤを、呼び出し元によって割り当てられたＨＷＮＤの配列にコピーする。
【００６６】
ＷＰＡＲＡＭ：コピーするＨＷＮＤの数
ＬＰＡＲＡＭ：＊ＦＩＬＴＥＲＬＩＳＴ。現在のフィルタモードで埋められ、そのモードのｈｗｎｄＬｉｓｔのカウント要素までが埋められる。ｈｗｎｄＬｉｓｔは、カウントＨＷＮＤに十分な空間を持って割り当てられたメモリをポイントする。
【００６７】
戻り値：リスト中のＨＷＮＤの現在の数を表す整数。０（ゼロ）のカウントで一度呼び出してＨＷＮＤの数を問い合わせて、ＦＩＬＴＥＲＬＩＳＴ内に適正な量の空間を割り当てる。
ＭＧＭ＿ＳＥＴＰＲＥＦＩＬＴＥＲＣＡＬＬＢＡＣＫ
この関数は、外部の画像フィルタリング／スケーリングコードのためのコールバック関数を設定／登録する。コールバックで指定された関数は、ラスタ化されたＧＤＩビットマップが合成される前に、そのビットマップに対して拡大エンジンによって呼び出される。コールバックは、処理されたビットマップを拡大エンジンに返す。
【００６８】
ＷＰＡＲＡＭ：ＮＵＬＬ
ＬＰＡＲＡＭ：＊（＊ＦｉｌｔｅｒＦｕｎｃｔｉｏｎ）（ＨＷＮＤ  ｈｗｎｄ，ＨＢＩＴＭＡＰ  ＊ｂｍ，ＳＩＺＥ  ＊ｂｓ））−コールバック関数へのポインタ
戻り値：成功した場合に０
ＭＧＭ＿ＧＥＴＰＲＥＦＩＬＴＥＲＣＡＬＬＢＡＣＫ
登録されたコールバック関数を返す。コールバック関数が登録されていない場合、この関数はＮＵＬＬを返す。
【００６９】
ＷＰＡＲＡＭ：ＮＵＬＬ
ＬＰＡＲＡＭ：ＮＵＬＬ
戻り値：コールバックが設定されている場合はその関数への関数ポインタ。コールバックが設定されていない場合はＮＵＬＬ。
ＭＧＭ＿ＳＥＴＣＯＬＯＲＥＦＦＥＣＴＣＡＬＬＢＡＣＫ
このメッセージは、外部の画像色補正コードのコールバック関数を設定／登録する。当該コールバックで指定された関数は、画像の合成が行われた後に呼び出される。コールバックが登録されている場合は、合成されたビットマップがそのコールバックで指定される関数に渡される。
【００７０】
ＷＰＡＲＡＭ：ＮＵＬＬ
ＬＰＡＲＡＭ：＊（＊ＦｉｌｔｅｒＦｕｎｃｔｉｏｎ）（ＨＷＮＤ  ｈｗｎｄ，ＨＢＩＴＭＡＰ  ＊ｂｍ，ＳＩＺＥ＊ｂｓ））  ））−コールバック関数へのポインタ。
【００７１】
戻り値：成功した場合に０
ＭＧＭ＿ＧＥＴＣＯＬＯＲＥＦＦＥＣＴＣＡＬＬＢＡＣＫ
登録されたコールバック関数を返す。コールバックが登録されていない場合、この関数はＮＵＬＬを返す。
【００７２】
ＷＰＡＲＡＭ：ＮＵＬＬ
ＬＰＡＲＡＭ：ＮＵＬＬ
戻り値：コールバックが設定されている場合はその関数への関数ポインタ。コールバックが設定されてない場合はＮＵＬＬ。
構造
ＴＲＡＮＳＦＯＲＭ
任意の２Ｄ変換を指定する３×３の浮動小数点の配列。
【００７３】
【表１】
2009501394.tif 000003
【００７４】
ＦＩＬＴＥＲＬＩＳＴ
フィルタモードを表すＤＷＯＲＤと、フィルタリングの対象とするＨＷＮＤのリストへのポインタ。
【００７５】
【表２】
2009501394.tif 000004
【００７６】
ｆｉｌｔｅｒＭｏｄｅの可能な値は以下である。
ＭＷ＿ＦＩＬＴＥＲＭＯＤＥ＿ＥＸＣＬＵＤＥ
ｈｗｎｄＬｉｓｔにあるウィンドウはどれも拡大鏡ウィンドウの中に描画しない。
ＭＷ＿ＦＩＬＴＥＲＭＯＤＥ＿ＩＮＣＬＵＤＥ
ｈｗｎｄＬｉｓｔにあるウィンドウだけを拡大鏡ウィンドウに描画する。
【００７７】
【表３】
2009501394.tif 000005
【００７８】
拡大ライブラリを初期化する。これには、拡大鏡ウィンドウクラスが登録されることが含まれる。このＡＰＩを２度以上呼び出すことが許される。Ｍａｇｎｉｆｉｃａｔｉｏｎｌｎｉｔｉａｌｉｚｅの成功した呼び出しは各々、ＭａｇｎｉｆｉｃａｔｉｏｎＵｎｉｎｉｔｉａｌｉｚｅの呼び出しと対にならなければならない。
【００７９】
成功した場合に真を返す。
【００８０】
【表４】
2009501394.tif 000006
【００８１】
拡大ライブラリを初期化前の状態に戻す。拡大鏡ウィンドウクラスの登録が解消される。拡大がまだ初期化されていない場合に偽を返す。
【００８２】
【表５】
2009501394.tif 000007
【００８３】
このＡＰＩは、拡大鏡ウィンドウのソース矩形を設定する。このメソッドに渡されるｈｗｎｄは、拡大ウィンドウ自体のものである。矩形はデスクトップ座標を単位とし、拡大されるデスクトップ範囲を指定する。この矩形は、複数のモニタにまたがることが可能である。
【００８４】
操作が成功すると真を返す。
【００８５】
【表６】
2009501394.tif 000008
【００８６】
拡大鏡ウィンドウのソース矩形を返す。このメソッドに渡されるｈｗｎｄは、ソース矩形がそこから要求されている拡大ウィンドウのものである。矩形は、デスクトップ座標で返される。
【００８７】
操作が成功すると真を返す。
【００８８】
【表７】
2009501394.tif 000009
【００８９】
出力のためにソース矩形に適用される変換を設定する。通例は出力を拡大／縮小するために使用される。変換行列は、浮動小数点の配列として指定される。
【００９０】
このメソッドの基本的な用法は、ウィンドウをある率で拡大／縮小することである。
【００９１】
変換行列（ｘは倍率を表す）。
［ｘ００］
［０ｘ０］
［００１］
【００９２】
【表８】
2009501394.tif 000010
【００９３】
ソース矩形に適用される変換を返す。結果は、呼び出し元によって割り当てられた構造で返される。操作が成功すると真を返す。
【００９４】
【表９】
2009501394.tif 000011
【００９５】
フィルタリングに使用されるＨＷＮＤのリストを設定する。拡大鏡ウィンドウは常にフィルタリングで除外される。このリストは、拡大されるウィンドウの包含リストか、フィルタリングで除くべきウィンドウの除外リストのいずれかである。ｄｗＦｉｌｔｅｒＭｏｄｅは、次のいずれかであってよい。
【００９６】
・ＭＷ＿ＦＩＬＴＥＲＭＯＤＥ＿ＩＮＣＬＵＤＥ
・ＭＷ＿ＦＩＬＴＥＲＭＯＤＥ＿ＥＸＣＬＵＤＥ
カウントパラメータを使用して、ＡＰＩに渡されてフィルタリングされるＨＷＮＤの数を指定する。
【００９７】
操作が成功すると真を返す。この関数の実装の１つは、ＬＤＤＭ対応のビデオカードを必要とすることに留意されたい。ＸＰＤＭには偽を返す。
【００９８】
【表１０】
2009501394.tif 000012
【００９９】
初めに０のカウントでＧｅｔを行って最大数を得る。
【０１００】
リスト中のＨＷＮＤの数を返す。＊ｐｄｗＦｉｌｔｅｒＭｏｄｅでフィルタモードを返す。カウントＨＷＮＤを、呼び出し元が割り当てたＨＷＮＤの配列にコピーする。
【０１０１】
このメソッドに渡す適切な数を最初に決めるために、ユーザは、カウントパラメータとして０（ゼロ）を渡すとよい。その呼び出しの戻り値は、リスト中のＨＷＮＤの数であり、その後のこのメソッドの呼び出しでカウントパラメータとして使用できる可能性がある。この関数の実装の１つにはＬＤＤＭ対応のビデオカードが必要となることに留意されたい。ＸＰＤＭには偽を返す。
【０１０２】
【表１１】
2009501394.tif 000013
【０１０３】
この関数は、外部の画像フィルタリング／スケーリングコードのコールバック関数を設定／登録する。コールバックで指定された関数は、ラスタ化されたＧＤＩビットマップが合成される前に、ラスタ化されたすべてのＧＤＩビットマップに対して拡大エンジンによって呼び出される。登録された関数をコールバックする時には、ビデオメモリにハンドルを渡す。コールバック関数が、ハードウェア加速メソッドを使用して、そのハンドルで参照される画像を処理することを期待する。コールバック関数は、画像をシステムメモリに転送し、ソフトウェア加速を使用して画像を処理することもできるが、これは、拡大アプリケーションの性能全体に影響する。
【０１０４】
コールバック関数が返った後、ビデオメモリ内のビットマップは、２つの可能なサイズ状態を持つ。
１．倍率未変更−返されるビットマップは、呼び出し元に渡されたビットマップと同じサイズ。その後、ＡＰＩが、ＳｅｔＷｉｎｄｏｗＴｒａｎｓｆｏｒｍ関数に指定された変換によって拡大／縮小を行う。
２．倍率変更済み−返されるビットマップは、ＳｅｔＷｉｎｄｏｗＴｒａｎｓｆｏｒｍに指定された変換で拡大／縮小されている。
【０１０５】
このコールバック機構は、サードパーティがカスタムの画像フィルタリング／スケーリング機構を実装することを可能にする。フィルタリングとしては、ｔｒｉ−ｌｉｎｅａｒ、ｂｉ−ｃｕｂｉｃ、ｆｌａｔ、およびｂｉ−ｌｉｎｅａｒフィルタリングが可能である。この機構で、エッジの検出および強調も可能になる。
【０１０６】
この関数を介して登録されたコールバックがない場合、拡大ＡＰＩは、ＳｅｔＷｉｎｄｏｗＴｒａｎｓｆｏｒｍに指定された変換でビットマップを拡大／縮小する。プレゼンテーションシステム（例えばＡｖａｌｏｎ）のビットマップは、ｆｌａｔ、ｂｉ−ｌｉｎｅａｒ、ｂｉ−ｃｕｂｉｃフィルタリングを使用して自動的に拡大／縮小されることができ、そのため、このコールバック機構を使用しない。
【０１０７】
この関数の実装の１つにはＬＤＤＭ対応のビデオカードが必要となることに留意されたい。ＸＰＤＭには偽を返す。
【０１０８】
【表１２】
2009501394.tif 000014
【０１０９】
登録されたコールバック関数を返す。コールバックが登録されていない場合、この関数はＮＵＬＬを返す。注：この関数にはＬＤＤＭ対応のビデオカードが必要となる。ＸＰＤＭにはｎｕｌｌを返す。
【０１１０】
【表１３】
2009501394.tif 000015
【０１１１】
この関数は、外部の画像色補正コードのためのピクセルシェーダを設定／登録する。ｐｓで指定されたピクセルシェーダは、画像合成が行われた後に実行される。ピクセルシェーダが登録されている場合、合成されたビットマップは、そのピクセルシェーダを使用してビデオメモリで処理される。
【０１１２】
この機構により、サードパーティがネガティブコントラストや高コントラスト等のカスタムの色補正と効果を実装することが可能になる。
【０１１３】
操作が失敗した場合に偽を返す。注：この関数にはＬＤＤＭ対応のビデオカードが必要となる。ＸＰＤＭには偽を返す。
【０１１４】
【表１４】
2009501394.tif 000016
【０１１５】
登録されたピクセルシェーダを返す。登録されたピクセルシェーダがない場合、この関数はＮＵＬＬを返す。この関数の実装の１つにはＬＤＤＭ対応のビデオカードが必要となることに留意されたい。ＸＰＤＭにはｎｕｌｌを返す。
【０１１６】
結論
本発明には、各種の変更および代替の構成が可能であるが、その特定の例示的実施形態を図面に示し、上記で詳細に説明した。ただし、本発明をここに開示される特定の形態に限定する意図はなく、その反対に、本発明の主旨および範囲に該当するすべての変更、代替の構成、および均等物を包含する意図であることを理解されたい。
【図面の簡単な説明】
【０１１７】
【図１】本発明の各種態様が組み込まれることが可能な汎用コンピューティング環境の例を説明する図である。
【図２】本発明の各種態様による拡大鏡を提供する際の例示的ステップを表す流れ図である。
【図３】本発明の各種多様によるテキストとグラフィックを拡大するための例示的実装を表すブロック図である。
【図４】本発明の各種態様による例示的な拡大エンジン内の各種構成要素を表すブロック図である。
【図１】
2009501394.tif 000017
【図２】
2009501394.tif 000018
【図３】
2009501394.tif 000019
【図４】
2009501394.tif 000020
【国際調査報告】
2009501394.tif 000021