CombineRgn リージョンの結合

Cの宣言:

int CombineRgn(
	HRGN hDestRgn,
	HRGN hSrcRgn1,
	HRGN hSrcRgn2,
	int CombineMode);

VBの宣言:

Declare Function CombineRgn Lib "gdi32" ( _
    ByVal hDestRgn As Long, _
    ByVal hSrcRgn1 As Long, _
    ByVal hSrcRgn2 As Long, _
    ByVal CombineMode As Long) As Long

説明:

hSrcRgn1とhSrcRgn2を結合し、作成されたリージョンをhDestRgnに新規設定する。

指定する三つのリージョンはそれぞれ異なるものを指定する必要はない。

引数の意味は以下の通り。
hDestRgn 結合結果のリージョンを格納するリージョン。
hSrcRgn1 結合元のリージョン。
hSrcRgn2 結合元のリージョン。
CombineMode 結合する方法。後述の表を参照。

CombineModeには、以下のいずれかのフラグを指定する。
RGN_AND 二つのリージョンの共有部分のみが新規リージョンとなる。
RGN_COPY hSrcRgn1が複製される。
RGN_DIFF hSrcRgn1のうちhSrcRgn2に含まれない領域のみが新規リージョンとなる。
RGN_OR 二つのリージョンの論理和が新規リージョンとなる。
RGN_XOR 二つのリージョンの非共有部分のみが新規リージョンとなる。

戻り値は、以下のフラグのいずれかである。
NULLREGION 空のリージョンが作成された。
SIMPLEREGION 境界の重ならないリージョンが作成された。
COMPLEXREGION ひとつ以上の長方形からなるリージョンが作成された。
ERROR エラーが発生した。

VBのサンプル:

CreateRectRgnを使用して交差する二つの長方形で構成されるリージョンを作成し、ピクチャボックスに描画する。
' 交差する二つの長方形からなるリージョンを描画
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

(original text:2000/02/13 更新)

本ドキュメントの内容は保証しません。本ドキュメントによって生じた結果について、一切の責任を負いません。