我正在尝试创建一个允许用户在图片控件框上绘制矩形的界面。我有一个图片控件类,并使用CRectTracker允许用户绘制一个矩形。我希望用户也能够选择以前绘制的矩形,但我不知道如何处理绘制矩形的选择。 我希望能够选择矩形并在其上添加调整大小处理程序。
这是我绘制矩形的代码。
void PictureCtrl :: OnLButtonDown(UINT nFlags,CPoint point) {
// If mouse click is outside of rectangle
if(m_drawRect.m_tracker.HitTest(point) < 0 ) {
if(m_drawRect.m_tracker.TrackRubberBand(this, point, TRUE)) {
CDC* pDC = GetDC();
m_drawRect.m_tracker.m_nStyle &= CRectTracker::resizeInside;
// Paint transparent rectangle
pDC->SelectStockObject(NULL_BRUSH);
pDC->Rectangle(m_drawRect.m_tracker.m_rect);
ReleaseDC(pDC);
}
}
CStatic::OnLButtonDown(nFlags, point);
}
任何帮助将不胜感激。谢谢。
答案 0 :(得分:1)
您需要在班级中存储矩形的坐标(同时保存/加载)并在鼠标按下期间执行HitTest
。
要实现调整大小句柄,您需要一个布尔值来表示选择矩形(如果单击不在矩形上,则将布尔值设置为FALSE)并在绘制期间绘制抓取句柄(如果布尔值为TRUE);如果鼠标在抓握手柄上移动,请更改鼠标光标,在此情况下,在鼠标按下和鼠标按下时执行调整大小。
如果你有一个以上的矩形,这一切都非常复杂并且变得更加复杂! 这是一个DrawCLI MSDN example,它使用矩形,圆角矩形,椭圆,直线和折线以及对OLE的支持来完成所有这些 - 也许这会有所帮助,在它处于状态之前从DrawCLI删除类/函数可能更容易与您的申请合并......