次へウィンドウの形状を変更してみる今回は、ウィンドウの形を長方形以外にする方法を説明しましょう。ウィンドウの形は、楕円形や多角形などにすることができます。リージョンオブジェクトウィンドウの形状を設定するためには、まず、設定したい形のリージョンオブジェクトを作成する必要があります。リージョンオブジェクトとは、Windowsが提供するGDIオブジェクトの1つで、画面イメージの再描画やクリッピングなどを行なうときに、実際に描画や塗りつぶしなどを行なう「領域(region:リージョン)」を定義しているオブジェクトのことです。矩形(長方形)や多角形、楕円などの図形をいくつも組み合わせた複雑な領域をもつリージョンを作成することもできます。リージョンオブジェクトは、作成するリージョンの形状に応じたAPI関数を呼び出すことによって作成することができます。右下y座標);この関数には、それぞれ長方形の左上と右下のx座標・y座標を指定します。指定すると、空の(領域を持たない)リージョンオブジェクトが作成されます。リージョンオブジェクトが作成されると、この関数は戻り値として作成されたリージョンオブジェクトのハンドルを返します。以降、このリージョンに対して操作を行なうためには、このハンドルを指定することになります。丸みの高さ);始めの4つのパラメータは、長方形リージョンの場合と同じです。それぞれ、長方形の左上と右下のx座標・y座標を指定します。パラメータ)には、角を丸めるときの丸みの幅と高さを指定します。長方形リージョンの場合と同様に、この関数も、戻り値として作成されたリージョンオブジェクトのハンドルを返します。長方形の右下y座標);この関数には、それぞれ楕円の位置とサイズを定義するための長方形の左上と右下のx座標・y座標を指定します。これらのパラメータで指定された長方形に内接するような楕円形のリージョンオブジェクトが作成されることになります。この関数もまた、戻り値として作成されたリージョンオブジェクトのハンドルを返します。構造体の配列のアドレスを指定します。この配列は、多角形の頂点の数だけ要素数を持っている必要があります。パラメータ)には、多角形の頂点の数を指定します。パラメータ)には、多角形リージョンを作成する際のフィリングモード(塗りつぶし形式)と呼ばれるものを指定します。いずれかを指定します。この2つのモードの違いは、実際に下のサンプルプログラムを実行させて試してみてください。ウィンドウリージョン本来、リージョンオブジェクトは、GDIオブジェクトの1つとして、画面への描画において描画領域や塗りつぶし領域などを定義するためのオブジェクトなのですが、このリージョンオブジェクトをウィンドウに割り当てることで、ウィンドウそのものの形状を定義することができます。このようにウィンドウの形状を定義するためにウィンドウに割り当てられたリージョンオブジェクトのことをウィンドウリージョンと呼びます。パラメータには、ウィンドウのハンドルを指定します。このパラメータで指定されたウィンドウに対して、新しいウィンドウリージョンが割り当てられます。パラメータには、ウィンドウリージョンとして割り当てるリージョンオブジェクトのハンドルを指定します。指定すると、それまでウィンドウに割り当てられていたウィンドウリージョンが削除されて、ウィンドウにウィンドウリージョンが割り当てられていない状態になります。パラメータには、ウィンドウリージョンを割り当てた後でウィンドウを再描画するかどうかを指定します。ウィンドウが表示されている場合には、再描画しないと、リージョンに割り当てられなかった領域がそのまま残ってしまうことになるので、ウィンドウが表示されているなら再描画しておきましょう。この関数によって新しいウィンドウリージョンが割り当てられると、それまでウィンドウリージョンとして割り当てられていたリージョンオブジェクトは自動的に削除されます。関数によって削除されなければならないはずです。関数によってウィンドウリージョンとして割り当てられたリージョンオブジェクトは、不要となった時点でシステムによって削除されることになっています。そのため、ウィンドウリージョンとして割り当てられているリージョンを明示的に削除してはいけません。サンプルスクリプトさて、実際にスクリプトを書いてみます。このサンプルスクリプトでは画像を読み込んでいますが、実際には画像を読み込む必要はありません。ウィンドウを適当な大きさに初期化しておけば十分です。サンプルに含まれているものをそのまま使用しています。ウィンドウにウィンドウリージョンを割り当てていない状態と、長方形のウィンドウリージョンを割り当てた状態がまったく同じように表示されていますが、ウィンドウと同じ大きさの長方形リージョンを作成しているので、それは当然のことですね。長方形リージョンをウィンドウサイズよりも小さめに作成すると、異なって表示されます。