MFC不会使用LineTo绘制矩形边

时间:2013-02-05 13:40:36

标签: mfc visual-c++-2012

使用MFC CDC类和LineTo和MoveTo函数绘图时遇到问题。 CDC对象不是从我移动指针的位置开始,而是在图像的中心留下第一个Pixel blanc。当我在图像左侧的角落周围绘制时,很明显CDC对象使最外面的像素自由。 我确实尝试加载自定义画笔但没有不同的结果。

Edge example

    memDC.FillSolidRect(client, BACKGROUND_COLOR);
    CPen penBorder(PS_ENDCAP_SQUARE | PS_SOLID, BORDER_WIDTH, BORDER_COLOR);
    //Draw the Horizontal line for the Status Bar
    CPen* oldPen = memDC.SelectObject(&penBorder);
    memDC.MoveTo(client.left + 0.5f * BORDER_WIDTH, client.top + 0.5f * BORDER_WIDTH);
    memDC.LineTo(client.Width() - 0.5f * BORDER_WIDTH, client.top + 0.5f * BORDER_WIDTH);
    CPen penRecess(PS_ENDCAP_SQUARE | PS_SOLID, BORDER_WIDTH, RECESS_COLOR);
    //Draw the recess
    memDC.SelectObject(&penRecess);
    memDC.MoveTo(client.left + 1.5f * BORDER_WIDTH, client.top + 1.5f * BORDER_WIDTH);
    memDC.LineTo(client.Width() - 0.5f * BORDER_WIDTH, client.top + 1.5f * BORDER_WIDTH);

1 个答案:

答案 0 :(得分:1)

该问题与MFC无关,但在底层Windows GDI功能中是固有的。 documentation for LineTo说:

  

LineTo函数从当前位置绘制一条直线,但不包括指定的点。

如果你需要绘制最后一个点,你应该距离第一个点一个LineTo一个像素。