在一个容器内有多个不规则不同的 不规则形状 自定义控件item
现在要判断鼠标选中事件
在容器的mouseDown里轮询所有items
请问如何判断鼠标是否在某个item内,注意item的形状是不规则的,
现在已知它的region和graphicsPath

解决方案 »

  1.   

    知道了region,就可以用mouse的坐标来判断啦
      

  2.   

    那么怎么样通过item的region
    和point来获得point是否在region内呢?
      

  3.   

    Form1.GetControl(MousePosition postion)
      

  4.   

    将不规则区域转换为CRgn对象。然后用PtInRegion函数就可以判断了。   
      

  5.   

    将不规则区域转换为CRgn对象。然后用PtInRegion函数就可以判断了。 
    ??????????????????????????VB.NET吧??
      

  6.   

    将不规则区域转换为CRgn对象。然后用PtInRegion函数就可以判断了。
    ??????????????????????????VB.NET吧??
    ++++++++++++++++++++++++++++++++++++++
    猩猩大哥说的是VC++
    咱们用这个
    graphicsPath.IsVisible(Point)
      

  7.   

    可我所知道的是控件自己内部的graphicspath
    怎么将它转化成容器的graphicspath呢?
      

  8.   

    region和graphicsPath都有IsVisible
    方法来判断一个点等是否在这个region和graphicsPath之内.
      

  9.   

    因为不规则的图其实是由多个不同的GraphicsPath组成的,而一个Region也是由GraphicsPath建立的,所以在一个区域(Region)中是否包含一个点或一个区域就可以直接用Rgion.IsVisible方法或GraphicsPath.IsVisible方法来判读.
      

  10.   

    to hbxtlhx(平民百姓):
    谢谢,但你说的这个我已经知道了
    我现在的问题是:
    我所已知的是:每个不规则控件,相对于包容自己的最小矩形 的 graphicspath
    现在我在一个容器控件里,无规则地放置了很多 这种 不规则控件 
    我获得的鼠标点是相对于这个容器的坐标
    而不是相对于某个指定item的坐标
      

  11.   

    举例说明:
    现在在size为1000,1000的容器内 
    在location (300,300)
    放置了一个 graphicspath为 (0,0),(0,20),(10,19),(20,20),(20,0)的控件item
    我现在鼠标点在了容器的(10,10)上
    我怎么判断鼠标在不在这个item内??
      

  12.   

    楼主不是说了嘛,对每个Item都要做一个IsVisible才行啊.
    你的容器是1000,1000,坐标是从0,0开始,在容器中应是左上角,而每个Item的GraphicsPath的坐标也是左上角0,0开始,鼠标也是左上角0,0开始,所以就可以直接用鼠标的坐标了.这有什么问题呢?
      

  13.   

    每个item的GraphicsPath,不是相对于容器的左上角开始的
    是相对于可以包容它的最小矩形的左上角开始的,
    在 “ location (300,300) “
    放置了一个 graphicspath为 (0,0),(0,20),(10,19),(20,20),(20,0)的控件item
      

  14.   

    可以啊
    就是item的location
    在例子中就是(300,300)啊
      

  15.   

    当前鼠标的坐标加上Item的Location的偏移量再用IsVisible就可以了吧,我没有想错吧!