1.在一个窗体随意画了几条斜线(长度随意),并保存了每个线条的起点,终点
  用鼠标在窗体上点击,如何判断点击的点在某一根线条上?2.在一个窗口了放置了几个子窗口(对话框的无模式窗体),现在在父窗口上画线(线会穿越子窗体的所在位置),如何防止该线条在子窗体上绘制?效果可见微软access中的编辑查询时,在两个表之间托拽产生的线条。

解决方案 »

  1.   

    1:用数学函数来计算出你鼠标的位置所在的点在哪一条直线上,可以在你的所有的画的线上用相应的曲线方程算出,如果鼠标点在你的某一个曲线上则画图亮这个线表示选中图形.2:可以用ReleaseCapture或SetCapture来实现,好像是这样的.
      

  2.   

    同意楼上 hbxtlhx(下着春雨的天)的观点
      

  3.   

    第二个问题找到解决方法了,父窗口要增加WS_CLIPCHILDREN
      

  4.   

    我想你CAD之类的画图也是一定是计算出的,不是一个现成的方法来调用,因为在鼠标所点的位置有什么,除了具有句柄的控件外系统就没有办法来得到了.所以这个要靠自己来查找.我想系统对有句柄的控件的查找也一定是相似的算法.
      

  5.   

    判断斜率就可以了:比如说3个点(x1,y1),(x2,y2),(x3,y3),第3个点是鼠标落点,前两个是线条始点和终点
    if (x3 > min(x1, x2) && x3 < max(x1, x2) && y3 > min(y1, y2) && y3 < max(y1, y2) && (y2 - y1)/(float)(x2 - x1) == (y3 - y1)/(float)(x3 - x1))
    {
    }另外,需要注意一下,防止除数为零。
    如果想减少斜率的计算次数,可以在线条对象中保存该线条的斜率。
      

  6.   

    其实就是求斜率,很简单的,你自己写也行.Slope是斜率.// 返回参数坐标是否在此线段上或者在其延长线上
    bool BLine::IsPtOnLineExt(double tX, double tY)const
    {
    BSlope  slope = GetSlope(); if (slope.IsValid()) //判断斜率是否存在
    {
    return (tY - m_bPtBeg.y) == (slope.GetSlope() * (tX - m_bPtBeg.x)); 
    }
    else
    {
    return tX == m_bPtBeg.x;
    }
    }