次へイメージリストを使ってみる今回は、コモンコントロールでアイコンなどのイメージを使う場合に必要となるイメージリストについてやってみましょう。list)とは、コモンコントロールライブラリ(COMCTL32.DLL)によって提供されている、同じサイズのイメージ(アイコンやビットマップなど)を効率的に管理するための機能のことです。イメージリスト自体は、同じサイズのイメージの集合を持つオブジェクトで、個々のイメージリストオブジェクトはハンドルによって識別されます。始まるインデックスによって参照されます。イメージリストにはマスクを用いて、特定の領域を透明化して描画するという機能があります。右図のように、アイコンを表示させたようなイメージを使うことができるようになります。イメージリストの作成手順イメージリストを作成する手順は、以下のようになります。関数を呼び出しイメージリストを作成する。表示するイメージのビットマップオブジェクトを作成する。関数を呼び出して、作成したビットマップオブジェクトのイメージをイメージリストに追加する。ビットマップオブジェクトを削除する。関数を呼び出してイメージリストを破棄する。関数を呼び出してライブラリの初期化を行なわなければならないことになっています。(実際には呼び出さなくても動作はするのですが。パラメータはイメージのサイズをピクセル単位で指定します。パラメータにはイメージリストのタイプを指定します。パラメータは、それぞれイメージ数の初期値とイメージリストリサイズ時のイメージ数です。最初に述べた通り、イメージリストはWindowsオブジェクトとして、ハンドルによって管理されます。関数は、戻り値として作成したイメージリストのハンドルを返します。関数を呼び出してイメージを追加していきます。関数は、マスクなしイメージを追加する場合や、マスクイメージのビットマップからマスク付きイメージを作成する場合に使用します。マスクにはモノクロのビットマップを指定します。関数は、マスク付きイメージを作成する際に、マスクイメージを指定した色から生成する場合に使用します。進数で表したものです。パラメータで指定された色があると、その部分の色情報をすべて黒に変換していしまいます。指定されたイメージリストがマスクなしで作成されたものであっても、イメージ追加時にこの関数を使った場合には、マスク色として指定された部分は黒に変換されます。(黒)を指定するようにしてください。これら2つの関数は、戻り値として新しく追加されたイメージのインデックスを返します。どちらの関数も、イメージをビットマップのハンドルで指定するようになっています。したがって、あらかじめビットマップオブジェクトを作成しておく必要があります。ここでは、HSPウィンドウのイメージからDIBセクションオブジェクトを作成して、それを指定することにします。ビットマップオブジェクトの作成については、『ビットマップオブジェクトを作成する』の項を参照してください。マスクを指定するビットマップイメージとして、モノクロのビットマップが使われます。関数を使うことによって、モノクロのビットマップを作成できます。関数に渡した方が簡単なので、モノクロビットマップについてはここでは説明しないことにします。通常、追加するイメージのサイズは、イメージリスト作成時に指定した大きさでなければなりません。ビットマップイメージの幅をイメージリスト作成時に指定した幅の整数倍にすると、一度に複数のイメージをイメージリストに追加することができます。このとき、イメージの数はビットマップの幅から自動的に決定されるようになっています。関数の戻り値として、追加されたイメージのうち最初のイメージのインデックスが返ります。関数を呼び出して削除しておきましょう。関数を呼び出してイメージリストを破棄しなければなりません。イメージリストのハンドル);この関数は、指定されたイメージリストを破棄して、イメージリストの情報の保持のために使われていたメモリを解放します。破棄した後のイメージリストのハンドルは無効なものになってしまうので、使用することはできません。パラメータには描画先デバイスコンテキストのハンドルを指定します。構造体に含まれているメモリデバイスコンテキストのハンドルを指定することになります。描画中ウィンドウのデバイスコンテキストとして、この値を指定します。実行する必要があります。パラメータには、描画スタイルを指定します。サンプルスクリプトさて、実際にスクリプトを書いてみます。今回は以下の画像を使用します。(iconlist.bmp)ビットマップファイルのダウンロード次のスクリプトを実行させると、マスクを用いない場合のイメージと用いた場合のイメージがそれぞれ描画されます。命令を用いていったん画面を塗りつぶしています。実行させる必要があります。