【问题标题】:MFC does not draw rectangular edges with LineToMFC 不使用 LineTo 绘制矩形边
【发布时间】:2013-01-20 11:02:37
【问题描述】:

我在使用 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);

【问题讨论】:

    标签: mfc visual-c++-2012


    【解决方案1】:

    该问题与 MFC 无关,而是底层 Windows GDI 函数所固有的。 documentation for LineTo 说:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-24
      相关资源
      最近更新 更多