WinAPI: CombineRgn - 区域合成
来源:互联网 发布:晨曦软件下载 编辑:程序博客网 时间:2024/05/16 17:18
CombineRgn( p1: HRGN; {合成后的区域} p2, p3: HRGN; {两个原始区域} p4: Integer {合并选项; 见下表}): Integer; {有四种可能的返回值}//合并选项:RGN_AND = 1;RGN_OR = 2;RGN_XOR = 3;RGN_DIFF = 4;RGN_COPY = 5; {复制第一个区域}//返回值:ERROR = 0; {错误}NULLREGION = 1; {空区域}SIMPLEREGION = 2; {单矩形区域}COMPLEXREGION = 3; {多矩形区域}本例效果图:
代码文件:
窗体文件:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;type TForm1 = class(TForm) RadioGroup1: TRadioGroup; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormActivate(Sender: TObject); procedure RadioGroup1Click(Sender: TObject); end;var Form1: TForm1;implementation{$R *.dfm}var Rgn1,Rgn2,Rgn: HRGN;//初始化procedure TForm1.FormCreate(Sender: TObject);begin {建立两个原始区域} Rgn1 := CreateEllipticRgn(20, 20, 120, 160); Rgn2 := CreateEllipticRgn(70, 20, 170, 160); {Rgn 是用来接受运算结果的, 但函数 CombineRgn 要求它必须是已存在的区域, 这里虚拟一个} Rgn := CreateRectRgnIndirect(BoundsRect); RadioGroup1.Items.CommaText := '两个原始区域,RGN_AND,RGN_OR,RGN_XOR,RGN_DIFF,RGN_COPY'; RadioGroup1.ItemIndex := 0;end;//见到窗体时先绘制一次procedure TForm1.FormActivate(Sender: TObject);begin RadioGroup1Click(nil);end;//主要代码procedure TForm1.RadioGroup1Click(Sender: TObject);begin Repaint; if RadioGroup1.ItemIndex = 0 then begin Canvas.Brush.Color := clSilver; Canvas.Brush.Style := bsDiagCross; FillRgn(Canvas.Handle, Rgn1, Canvas.Brush.Handle); FillRgn(Canvas.Handle, Rgn2, Canvas.Brush.Handle); Canvas.Brush.Style := bsSolid; Canvas.Brush.Color := clRed; FrameRgn(Canvas.Handle, Rgn1, Canvas.Brush.Handle, 2, 2); FrameRgn(Canvas.Handle, Rgn2, Canvas.Brush.Handle, 2, 2); end else begin CombineRgn(Rgn, Rgn1, Rgn2, RadioGroup1.ItemIndex); Canvas.Brush.Color := clSilver; Canvas.Brush.Style := bsDiagCross; FillRgn(Canvas.Handle, Rgn, Canvas.Brush.Handle); Canvas.Brush.Style := bsSolid; Canvas.Brush.Color := clRed; FrameRgn(Canvas.Handle, Rgn, Canvas.Brush.Handle, 2, 2); end;end;procedure TForm1.FormDestroy(Sender: TObject);begin DeleteObject(Rgn1); DeleteObject(Rgn2); DeleteObject(Rgn);end;end.
object Form1: TForm1 Left = 0 Top = 0 Caption = 'Form1' ClientHeight = 182 ClientWidth = 300 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'Tahoma' Font.Style = [] OldCreateOrder = False OnActivate = FormActivate OnCreate = FormCreate OnDestroy = FormDestroy PixelsPerInch = 96 TextHeight = 13 object RadioGroup1: TRadioGroup Left = 189 Top = 8 Width = 106 Height = 166 Caption = 'RadioGroup1' TabOrder = 0 OnClick = RadioGroup1Click endend
- WinAPI: CombineRgn - 区域合成
- 使用CRgn::CombineRgn判断两个区域是否有共同的覆盖区域
- WINAPI
- WINAPI
- WINAPI
- WINAPI
- WINAPI
- WINAPI
- WinAPI
- WINAPI 区域的建立与删除实际操作注意情况
- CreateRectRgn和CombineRgn函数
- CreateRectRgn和CombineRgn函数
- CreateRectRgn和CombineRgn函数
- CreateRectRgn和CombineRgn函数
- CreateRectRgn和CombineRgn函数
- CreateRectRgn和CombineRgn函数
- 合成
- 合成
- 【怎么安装Chrome插件】安装Chrome第三方插件
- java小问题积累
- 关注细节,放眼用户体验,发散思维研究技术
- Producer-Consumer Pattern
- Eclipse中的classloader
- WinAPI: CombineRgn - 区域合成
- 解决session超时跳转首页,跳出frameset
- 论文阅读笔记 - The Google File System
- MVC 表单验证
- 2010江西程序员大会诚邀您的参与!
- Linux线程管理必备:互斥量与条件变量
- 什么是C10K
- C++11学习笔记(5) —— override and final
- 推荐一个浏览器——搜狗