4

Delphi/GDIでクリッピング領域から丸い長方形を除外する正しい方法は何ですか?

四角形の領域を除外するExcludeClipRectと、クリッピング領域を丸い四角形に設定するSelectClipRgnと共にCreateRoundRectRgnがあります。

しかし、クリッピング領域から丸い四角形を除外するにはどうすればよいですか (ExcludeClipRoundRect や ExcludeClipRgn など)。CombineRgnを試してみましたが、うまくいきませんでした。

4

2 に答える 2

6

@TLama のコメントのおかげで、次のように解決できました。

Region := CreateRectRgn (0, 0, ClientWidth, ClientHeight);
ExcludedRegion := CreateRoundRectRgn (1, 1, ClientWidth - 1, ClientHeight - 1, 3, 3);
CombineRgn (Region, Region, ExcludedRegion, RGN_XOR);
SelectClipRgn (Canvas.Handle, Region);

以前の問題は、最初のパラメーターとして渡された領域CombineRgnが作成されていないことでした。リンクされたチュートリアルの1つの文が手がかりを提供しました:

指摘すべきもう 1 つの点は、CombineRgn の宛先リージョンがソース リージョンの 1 つになる可能性があることです。

MSDN からのこの情報と共に:

hrgnDest [入力]: 他の 2 つの領域を結合することによって定義された次元を持つ新しい領域へのハンドル。(この領域は、CombineRgn が呼び出される前に存在している必要があります。)

于 2013-11-11T10:03:36.813 に答える