MFC鼠标绘制圆形实现

本代码示例展示了如何在VC6.0 MFC工程中使用鼠标绘制圆形。程序逻辑清晰简洁,适合MFC初学者理解学习。

核心功能:

  • 鼠标事件捕获:程序监听鼠标点击和移动事件。
  • 圆形绘制算法:根据鼠标起始点和结束点计算圆心和半径,调用GDI函数绘制圆形。
  • MFC绘图机制:利用CDC类进行图形绘制操作。

代码示例:

// ... 省略头文件和类定义 ...

void CMyView::OnLButtonDown(UINT nFlags, CPoint point)  
{
    // 记录鼠标按下时的坐标
    m_startPoint = point;
    // 设置绘制开始标志
    m_bDrawing = TRUE;
    CView::OnLButtonDown(nFlags, point);
}

void CMyView::OnMouseMove(UINT nFlags, CPoint point) 
{
    // 鼠标移动且正在绘制
    if ((nFlags & MK_LBUTTON) && m_bDrawing) 
    {
        // 获取设备上下文
        CClientDC dc(this);
        // 构造画笔
        CPen pen(PS_SOLID, 1, RGB(0, 0, 0)); 
        // 选择画笔
        CPen* pOldPen = dc.SelectObject(&pen); 

        // 计算圆心和半径
        CPoint center = (m_startPoint + point) / 2;
        int radius = static_cast(m_startPoint.DistanceTo(point) / 2);

        // 绘制圆形
        dc.Ellipse(center.x - radius, center.y - radius, 
                   center.x + radius, center.y + radius);

        // 恢复设备上下文
        dc.SelectObject(pOldPen);
    }
    CView::OnMouseMove(nFlags, point);
}

void CMyView::OnLButtonUp(UINT nFlags, CPoint point) 
{
    // 鼠标抬起,结束绘制
    m_bDrawing = FALSE;
    CView::OnLButtonUp(nFlags, point);
}

使用方法:

  1. 在VC6.0中创建一个MFC单文档应用程序。
  2. 将上述代码添加到视图类的对应函数中。
  3. 编译运行程序,在视图窗口中点击并拖动鼠标即可绘制圆形。
zip 文件大小:2.27MB