0

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

边缘示例

    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);
4

1 回答 1

1

该问题与 MFC 无关,而是在底层 Windows GDI 函数中固有的。的文档LineTo说:

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

如果您需要绘制最后一个点,您应该在LineTo距离第一个像素的地方再做一个像素。

于 2013-02-05T16:47:36.573 回答