[quoted text, click to view] > This could be because the region is actually empty it has no area. I'd
> suggest using GrpahicsPaths. They support IsVisible and IsOutlineVisible
> methods. The latter is what you need to use for hittesting lines.
Thank you so much Stoitcho,
Here is the improved program that does hit testing on a line :-)
//namespace HitTest
namespace HitTest
{
//class Form
class Form:System.Windows.Forms.Form
{
//two points that make up a line
System.Drawing.Point point1=new System.Drawing.Point(0,0);
System.Drawing.Point point2=new System.Drawing.Point(50,50);
//a rectangle
System.Drawing.Rectangle rectangle=new
System.Drawing.Rectangle(50,50,100,100);
//a square region
System.Drawing.Region square;
//a graphicspath
System.Drawing.Drawing2D.GraphicsPath graphicspath=new
System.Drawing.Drawing2D.GraphicsPath();
//a brush
System.Drawing.Brush brush=System.Drawing.Brushes.White;
//constructor
Form()
{
//set style for double buffered graphics
SetStyle
(
System.Windows.Forms.ControlStyles.AllPaintingInWmPaint|
System.Windows.Forms.ControlStyles.DoubleBuffer|
System.Windows.Forms.ControlStyles.ResizeRedraw|
System.Windows.Forms.ControlStyles.UserPaint,
true
);
//add a line to the graphicspath
graphicspath.AddLine(point1,point2);
//use the rectangle to define the square-region
square=new System.Drawing.Region(rectangle);
//prepare for mouse-input
MouseMove+=new System.Windows.Forms.MouseEventHandler(OnMouseMove);
//prepare for paint
Paint+=new System.Windows.Forms.PaintEventHandler(OnPaint);
}
//OnMouseMove
void OnMouseMove(object a,System.Windows.Forms.MouseEventArgs b)
{
//use White brush
brush=System.Drawing.Brushes.White;
if(square.IsVisible(b.X,b.Y))
{
//use Red brush if mouse is over square
brush=System.Drawing.Brushes.Red;
}
else if(graphicspath.IsOutlineVisible(b.X,b.Y,System.Drawing.Pens.Black))
{
//use Blue brush if mouse is over line
brush=System.Drawing.Brushes.Blue;
}
//force redraw
Invalidate();
}
//OnPaint
void OnPaint(object a,System.Windows.Forms.PaintEventArgs b)
{
b.Graphics.DrawLine(System.Drawing.Pens.Black,point1,point2);
b.Graphics.DrawRectangle(System.Drawing.Pens.Black,rectangle);
b.Graphics.FillRectangle(brush,rectangle);
}
//Main
public static void Main()
{
System.Windows.Forms.Application.Run(new Form());
}
}
}