我想判断一个点是否在某区域,没有成功。那么,我就用一个很简单的程序试一下,还是不对,请大家帮助:
测试的小函数如下:
procedure TForm1.Button1Click(Sender: TObject);
var
p: array of TPoint;
rgn: HRGN;
begin
Setlength(p, 4);
p[0].X := 0; p[0].Y := 0;
p[1].X := 100; p[1].Y := 0;
p[2].X := 100; p[2].Y := 100;
p[3].X := 0; p[3].Y := 100;
rgn := CreatePolygonRGN(p, 4, ALTERNATE);//换成WINDING也一样
if PtInRegion(rgn, 50, 50) then edit1.Text := 'good'
else edit1.Text := 'bad';
end;
我试了一下 (500,50)这个点应该不在此区域,但返回也与(50,50)点一样。
按说,(50,50)这个点应该在这个区域内的,但没有不成功点区域
测试的小函数如下:
procedure TForm1.Button1Click(Sender: TObject);
var
p: array of TPoint;
rgn: HRGN;
begin
Setlength(p, 4);
p[0].X := 0; p[0].Y := 0;
p[1].X := 100; p[1].Y := 0;
p[2].X := 100; p[2].Y := 100;
p[3].X := 0; p[3].Y := 100;
rgn := CreatePolygonRGN(p, 4, ALTERNATE);//换成WINDING也一样
if PtInRegion(rgn, 50, 50) then edit1.Text := 'good'
else edit1.Text := 'bad';
end;
我试了一下 (500,50)这个点应该不在此区域,但返回也与(50,50)点一样。
按说,(50,50)这个点应该在这个区域内的,但没有不成功点区域
procedure TForm1.Button2Click(Sender: TObject);
var
p: array of TPoint;
rgn: HRGN;
begin
Setlength(p, 4);
p[0].X := 0; p[0].Y := 0;
p[1].X := 100; p[1].Y := 0;
p[2].X := 100; p[2].Y := 100;
p[3].X := 0; p[3].Y := 100;
//注意下面这句,第一个参数要传p[0]
rgn := CreatePolygonRGN(p[0], 4, winding);//换成WINDING也一样
if PtInRegion(rgn, 50, 50) then edit1.Text := 'good'
else edit1.Text := 'bad';
end;
MSDN中说lpPoints是一个指向POINT结构数组或是CPoint类数组的指针