int CombineRgn( HRGN hDestRgn, HRGN hSrcRgn1, HRGN hSrcRgn2, int CombineMode);
Declare Function CombineRgn Lib "gdi32" ( _
ByVal hDestRgn As Long, _
ByVal hSrcRgn1 As Long, _
ByVal hSrcRgn2 As Long, _
ByVal CombineMode As Long) As Long
指定する三つのリージョンはそれぞれ異なるものを指定する必要はない。
引数の意味は以下の通り。
| hDestRgn | 結合結果のリージョンを格納するリージョン。 |
| hSrcRgn1 | 結合元のリージョン。 |
| hSrcRgn2 | 結合元のリージョン。 |
| CombineMode | 結合する方法。後述の表を参照。 |
CombineModeには、以下のいずれかのフラグを指定する。
| RGN_AND | 二つのリージョンの共有部分のみが新規リージョンとなる。 |
| RGN_COPY | hSrcRgn1が複製される。 |
| RGN_DIFF | hSrcRgn1のうちhSrcRgn2に含まれない領域のみが新規リージョンとなる。 |
| RGN_OR | 二つのリージョンの論理和が新規リージョンとなる。 |
| RGN_XOR | 二つのリージョンの非共有部分のみが新規リージョンとなる。 |
戻り値は、以下のフラグのいずれかである。
| NULLREGION | 空のリージョンが作成された。 |
| SIMPLEREGION | 境界の重ならないリージョンが作成された。 |
| COMPLEXREGION | ひとつ以上の長方形からなるリージョンが作成された。 |
| ERROR | エラーが発生した。 |
' 交差する二つの長方形からなるリージョンを描画
Private Sub Command1_Click()
Dim hRgn1 As Long
Dim hRgn2 As Long
'リージョンの作成
hRgn1 = CreateRectRgn(0, 0, 100, 100)
hRgn2 = CreateRectRgn(50, 50, 150, 150)
'リージョンの結合
CombineRgn hRgn1, hRgn1, hRgn2, RGN_XOR
'リージョンの描画
FillRgn Picture1.hDC, hRgn1, GetStockObject(WHITE_BRUSH)
'後処理
DeleteObject hRgn1
DeleteObject hRgn2
End Sub