文档章节

GdiPlus[35]: IGPGraphicsPath (二) 命中测试

涂孟超
 涂孟超
发布于 2014/09/26 15:36
字数 274
阅读 6
收藏 0

IGPGraphicsPath.IsVisible        //指定点是否在路径内
IGPGraphicsPath.IsOutlineVisible //指定点是否在路径轮廓上

 
 
 
 
 

 

 

  

本例测试图:



本例代码:

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);
    procedure FormResize(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses GdiPlus;

var
  Path1,Path2,Path3: IGPGraphicsPath;
  Pen: IGPPen;

procedure TForm1.FormCreate(Sender: TObject);
var
  R: TRect;
begin
  Pen := TGPPen.Create($FFFF0000, 3);

  Path1 := TGPGraphicsPath.Create;
  Path2 := TGPGraphicsPath.Create;
  Path3 := TGPGraphicsPath.Create;

  Path1.AddLine(0, 0, ClientWidth, ClientHeight);

  R := ClientRect;
  InflateRect(R, -ClientWidth div 3, -ClientHeight div 3);
  OffsetRect(R, -Trunc((R.Right-R.Left) * 0.6), -Trunc((R.Bottom-R.Top) * 0.6));
  Path2.AddRectangle(TGPRect.Create(R));

  OffsetRect(R, R.Right-R.Left, R.Bottom-R.Top);
  Path3.AddEllipse(TGPRect.Create(R));
end;

procedure TForm1.FormPaint(Sender: TObject);
var
  Graphics: IGPGraphics;
begin
  Graphics := TGPGraphics.Create(Handle);
  with Graphics do
  begin
    DrawPath(Pen, Path1);
    DrawPath(Pen, Path2);
    DrawPath(Pen, Path3);
  end;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
  Pt: TGPPoint;
  str: string;
begin
  Pt.Initialize(X, Y);
  str := '';
  if Path2.IsVisible(Pt) then str := '在矩形内';
  if Path3.IsVisible(Pt) then str := '在椭圆内';

  if Path1.IsOutlineVisible(Pt, Pen) then str := '在直线上';
  if Path2.IsOutlineVisible(Pt, Pen) then str := '在矩形的边线上';
  if Path3.IsOutlineVisible(Pt, Pen) then str := '在椭圆的圆周线上';

  if Text <> str then Text := str;
end;

procedure TForm1.FormResize(Sender: TObject);
begin
  OnCreate(Sender);
  Repaint;
end;

end.

 
 
 
 
 

 

 

  

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

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
vs 2005 添加GDI配置

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

种地瓜
2015/12/08
85
0
GDI+里面的问题。。。。。。。。。。

error C2248: “Gdiplus::Bitmap::Bitmap”: 无法访问 private 成员(在“Gdiplus::Bitmap”类中声明) 1> c:program filesmicrosoft sdkswindowsv7.0aincludegdiplusheaders.h(630) : 参见“G......

xxdd
2013/10/24
60
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
509
0
强大的http加速器------varnish

varnish 简介 varnish是一款强大的http加速器,其设计初衷因为计算机越来越复杂,不像那个只有内存与硬盘的存储媒介的年代,如今的计算机系统除了内存外还有cpu的L1、L2、L3快取,因此当初的...

jungege1216
2014/05/07
0
0
MFC用GDI+动感歌词的制作

源代码:http://download.csdn.net/detail/nuptboyzhb/4219669 源代码: 1. 插入一个对话框的资源,删除默认控件,并为对话框创建一个类,命名为ClyricDlg; 2. 在对话框的头文件中添加GDI+相...

长平狐
2012/10/08
236
0

没有更多内容

加载失败,请刷新页面

加载更多

如何在Java中生成比特币钱包地址

让我们通过学习比特币(Bitcoin)如何实施该技术的各个方面来工作,好吗?该技术包括以下几个方面: 比特币地址bitcoin address是用来发送和接收比特币的。 交易transaction是比特币从一个地...

geek12345
8分钟前
0
0
面试必备Linux基础知识

学习Linux之前,我们先来简单的认识一下操作系统。 一 从认识操作系统开始 1.1 操作系统简介 我通过以下四点介绍什么操作系统: 操作系统(Operation System,简称OS)是管理计算机硬件与软件...

小小明童鞋
9分钟前
0
0
SpringBoot基础教程3-1-3 Quartz定时任务单点持久化

1 概述 实际项目中,复杂的定时任务都会结合持久化,动态改变定时任务状态,本文将介绍基于Quartz的定时任务单点持久化方式,通过RESTful风格,演示定时任务的CRUD,最后使用Swagger测试。 ...

Mkeeper
25分钟前
3
0
Android入门—文件目录解析

AndroidManifest.xml 是每个android程序中必须的文件,它位于整个项目的根目录。我们每天都在使用这个文件,往里面配置程序运行所必要的组件,权限,以及一些相关信息。但是对于这个文件,我...

haoyuehong
28分钟前
0
0
IDEA中Maven打包时如何跳过测试

方法1:直接使用IDEA提供的方式 Maven命令栏的工具栏有下图中的图标,上面就写着 Skip Tests 按下图标后,如下图,test就不可用了 直接使用package命令即可。 方法2:自己编辑maven命令 进入...

karma123
41分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部