我想判断一个点是否在某区域,没有成功。那么,我就用一个很简单的程序试一下,还是不对,请大家帮助: 
  
 测试的小函数如下: 
 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)这个点应该在这个区域内的,但没有不成功区域

解决方案 »

  1.   


    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;
      

  2.   

    CreatePolygonRgn(   LPPOINT   lpPoints,   int   nCount,   int   nMode)   
    MSDN中说lpPoints是一个指向POINT结构数组或是CPoint类数组的指针