|
|
|
2-3-2. ウィンドウプロパティの機能プロパティリストは、アプリケーションがウィンドウと関連付ける必要があるデータのハンドルを格納する、メモリ領域です。プロパティリストの使いかた あるウィンドウのプロパティリストにデータハンドルを設定すると、そのウィンドウにアクセスできるアプリケーションは、そのハンドルにもアクセスできるようになります。プロパティリストは、アプリケーションがウィンドウを修正する必要があるときに、データ(代わりのタイトルやウィンドウメニューなど)を作成するのに使用すると便利です。 ウィンドウはそれぞれ自分のプロパティリストを持っています。ウィンドウの作成時には、プロパティリストは空です。リストにエントリを追加するときは SetProp関数を使います。各エントリには、一意なWindows文字列とデータハンドルが含まれます。Windows文字列はこのハンドルを識別するものです。
データハンドルは、アプリケーションがウィンドウに関連付けようとしているどのようなオブジェクトでも識別できます。GetProp関数は、エントリを削除せずに、リストからエントリのデータハンドルを取得します。アプリケーションはこのハンドルを使用して、データを取得したり使用したりできます。
プロパティリストの内容を列挙するには、EnumProps関数を使います。この関数は、プロパティリストの各エントリの文字列とデータハンドルを、アプリケーションが提供する関数に渡します。このアプリケーションが提供する関数は、どのような処理も実行できます。 アプリケーションは、プロパティリストの中にエントリを作成します。また、ウィンドウが破棄されるか、ウィンドウを作成したアプリケーションがクローズする前に、RemoveProp関数を使用してプロパティリスト中のすべてのエントリを削除しなければなりません。エントリを削除しないと、USERヒープにプロパティリストが残ったままになってしまうため、プロパティリストが使用したメモリ領域をほかのアプリケーションが使えなくなります。さらに、USERヒープがオーバフローしてしまうこともあります。 アプリケーションは、RemoveProp関数を使用していつでもプロパティリストからエントリを削除できます。ウィンドウがWM_DESTROYメッセージを受け取ったときにプロパティリストにエントリが存在する場合、その時点でエントリを削除しなければなりません。すべてのエントリを確実に削除するには、EnumProps関数を使用して、プロパティリストのすべてのエントリを列挙するとよいでしょう。アプリケーションは、アプリケーション自身がプロパティリストに追加したエントリだけを削除するようにしてください。Windowsも独自にプロパティを追加したり削除したりします。したがって、Windowsがプロパティリストに追加したプロパティをアプリケーションが削除しないように注意する必要があります。
|