文档章节

GdiPlus[41]: IGPRegion 区域

涂孟超
 涂孟超
发布于 2014/09/26 15:30
字数 438
阅读 16
收藏 0

// 区域建立:
TGPRegion.Create();   { 参数可以是矩形、路径、HRGN、区域数据, 或无参}
TGPRegion.FromHRGN(); { 从 HRGN 初始化 }

// 区域运算(矩形、路径、或另一个区域):
IGPRegion.Intersect();   { 交集 }
IGPRegion.Union();       { 并集 }
IGPRegion.Exclude();     { 减去 }
IGPRegion.ExclusiveOr(); { 减去交集 }
IGPRegion.Complement();  { 不相交 }

// 其他:
IGPRegion.IsVisible();       { 判断指定的点或矩形是否在区域内 }

IGPRegion.GetData;           { 获取区域数据(IGPBuffer), 其中包含数据指针和数据大小 }
IGPRegion.GetRegionScans();  { 从区域中获取矩形数组, 浮点型 }
IGPRegion.GetRegionScansI(); { 从区域中获取矩形数组, 整型 }

IGPRegion.Translate();       { 偏移 }
IGPRegion.Transform();       { Matrix 变换 }

IGPRegion.MakeInfinite;      { 初始化为无限大 }
IGPRegion.MakeEmpty;         { 初始化为空 }
IGPRegion.IsEmpty();         { 判断区域是否为空 }
IGPRegion.IsInfinite();      { 判断区域是否是无限大 }
IGPRegion.GetBounds();       { 获取边界矩形 }
IGPRegion.GetHRGN();         { 获取 HRGN(Windows 区域的句柄) }
IGPRegion.Clone;             { 复制 }
IGPRegion.Equals();          { 判断是否相同 }

 
 
 
 
 

 

 

  

区域的两个重要用途:

1、IGPRegion.IsVisible();

2、IGPGraphics.Clip 或 IGPGraphics.SetClip();

IsVisible 测试:



unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses GdiPlus, GdiPlusHelpers;

var Region: IGPRegion;

procedure TForm1.FormCreate(Sender: TObject);
var
  Rect: TGPRect;
  Path: IGPGraphicsPath;
begin
  Rect.Initialize(ClientRect);
  Rect.Inflate(-20, -20);
  Region := TGPRegion.Create(Rect);

  Rect.Inflate(-2, -2);
  Path := TGPGraphicsPath.Create();
  Path.AddEllipse(Rect);

  Region.Exclude(Path);
end;

procedure TForm1.FormPaint(Sender: TObject);
var
  Brush: IGPHatchBrush;
begin
  Brush := TGPHatchBrush.Create(HatchStyleMin, TGPColor.Silver, TGPColor.Red);
  Canvas.ToGPGraphics.FillRegion(Brush, Region);
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  Text := 'Form1';
  if Region.IsVisible(X, Y) then Text := '在区域中';
end;

end.

 
 
 
 
 

 

 

  

剪切区域测试:



uses GdiPlus;

procedure TForm1.FormPaint(Sender: TObject);
const
  Pts: array [0..3] of TGPPoint = (
    (X: 10; Y: 10), (X: 150; Y: 10), (X: 100; Y: 75), (X: 100; Y: 150));
var
  Graphics: IGPGraphics;
  Path: IGPGraphicsPath;
  Region: IGPRegion;
  Pen: IGPPen;
  Font: IGPFont;
  Brush: IGPBrush;
begin
  Graphics := TGPGraphics.Create(Handle);
  Path := TGPGraphicsPath.Create;
  Path.AddPolygon(Pts);
  Region := TGPRegion.Create(Path);
  Pen := TGPPen.Create($FF000000);
  Graphics.DrawPath(Pen, Path);

  Graphics.Clip := Region;
//  Graphics.SetClip(Region); //或者这样
  Font := TGPFont.Create('Arial', 36, [FontStyleBold], UnitPixel);
  Brush := TGPSolidBrush.Create($FFFF0000);
  Graphics.DrawString('A Clipping Region', Font, TGPPointF.Create(15, 25), Brush);
  Graphics.DrawString('A Clipping Region', Font, TGPPointF.Create(15, 68), Brush);
end;

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2009/12/21/1628755.html

涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
私信 提问
MFC边框重绘

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 pragma once incl......

江河海流
2016/01/30
665
0
用C++实现半透明按钮控件(PNG,GDI+)

使用MFC实现上面的按钮半透明效果能看到父窗口中的内容,上面是效果图(一个是带背景图片的、另一个是不带的)。 控件继承自CWnd类(彩色的部分是窗口的背景图片、按钮是PNG图片,第二个图标是鼠...

shzwork
09/17
4
0
GDI+里面的问题。。。。。。。。。。

error C2248: “Gdiplus::Bitmap::Bitmap”: 无法访问 private 成员(在“Gdiplus::Bitmap”类中声明) 1> c:\program files\microsoft sdks\windows\v7.0a\include\gdiplusheaders.h(630) : ......

xxdd
2013/10/24
81
0
vs 2005 添加GDI配置

在VS2005当中由于自带了GDI+的开发包,所以不需要在安装GDI开发包,这些头文件的位置由VS中的$(WindowsSdkDir)/include自动包含进来了 下午自己添加了好几次,总是出现有报错,,在 stdafx.h...

种地瓜
2015/12/08
135
0
在DLL中调用createwindows,报错1407

//初始化 AtlAxWinInit(); Gdiplus::GdiplusStartupInput gdiplusStartupInput; ULONG_PTR gdiplusToken; Gdiplus::GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); //名字和当......

哈大哈傻瓜
2016/03/27
212
0

没有更多内容

加载失败,请刷新页面

加载更多

nginx学习笔记

中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。 是连接两个独立应用程序或独立系统的软件。 web请求通过中间件可以直接调用操作系统,也可以经过中间件把请求分发到多...

码农实战
今天
5
0
Spring Security 实战干货:玩转自定义登录

1. 前言 前面的关于 Spring Security 相关的文章只是一个预热。为了接下来更好的实战,如果你错过了请从 Spring Security 实战系列 开始。安全访问的第一步就是认证(Authentication),认证...

码农小胖哥
今天
11
0
JAVA 实现雪花算法生成唯一订单号工具类

import lombok.SneakyThrows;import lombok.extern.slf4j.Slf4j;import java.util.Calendar;/** * Default distributed primary key generator. * * <p> * Use snowflake......

huangkejie
昨天
12
0
PhotoShop 色调:RGB/CMYK 颜色模式

一·、 RGB : 三原色:红绿蓝 1.通道:通道中的红绿蓝通道分别对应的是红绿蓝三种原色(RGB)的显示范围 1.差值模式能模拟三种原色叠加之后的效果 2.添加-颜色曲线:调整图像RGB颜色----R色增强...

东方墨天
昨天
11
1
将博客搬至CSDN

将博客搬至CSDN

算法与编程之美
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部