Mfc 使用PatBlt绘制矩形/直线

Mfc 使用PatBlt绘制矩形/直线,mfc,Mfc,我正在使用链接中给出的示例应用程序绘制标尺 在移动光标时,他们正在绘制黑线标记。我想画一条红色的线,就像微软的绘画应用程序一样 在示例中,他们使用以下代码绘制线条 需要做什么才能画出红色的线 void CRulerView::DrawCursorPos(CPoint NewPos) { if (((m_rulerType == RT_HORIZONTAL) && (NewPos.x > m_DocSize.cx*m_fZoomFactor)) || ((

我正在使用链接中给出的示例应用程序绘制标尺

在移动光标时,他们正在绘制黑线标记。我想画一条红色的线,就像微软的绘画应用程序一样

在示例中,他们使用以下代码绘制线条

需要做什么才能画出红色的线

void CRulerView::DrawCursorPos(CPoint NewPos)
 {
    if (((m_rulerType == RT_HORIZONTAL) && (NewPos.x > m_DocSize.cx*m_fZoomFactor)) ||
    ((m_rulerType == RT_VERTICAL) && ((NewPos.y) > m_DocSize.cy*m_fZoomFactor)))
    return;

CDC* pDC = GetDC();
// set the map mode right
int oldMapMode = pDC->SetMapMode(MM_TEXT);
//HBRUSH hBr=CreateSolidBrush(RGB(255,0,0));
//pDC->SelectObject(hBr);
//CBrush* pTempBrush = NULL;
    // pTempBrush = (CBrush*)pDC->SelectObject(&hBr);

CRect clientRect;
GetClientRect(&clientRect);
if (m_rulerType==RT_HORIZONTAL)
{

    // erase the previous position
    pDC->PatBlt(m_lastPos.x, clientRect.top, 1, clientRect.bottom, DSTINVERT);
    // draw the new position
    m_lastPos.x = NewPos.x;
    pDC->PatBlt(m_lastPos.x, clientRect.top, 1, clientRect.bottom, DSTINVERT);
}
else // (m_rulerType==RT_VERTICAL)
{
    // erase the previous position
    pDC->PatBlt(clientRect.left, m_lastPos.y, clientRect.right, 1, DSTINVERT);
    // draw the new position
    m_lastPos.y = NewPos.y;
    pDC->PatBlt(clientRect.left, m_lastPos.y, clientRect.right, 1, DSTINVERT);
}
//pDC->SelectObject(&pTempBrush);

pDC->SetMapMode(oldMapMode);
ReleaseDC(pDC);
  }

当您取消注释选择红色笔刷的行时会发生什么情况?当我取消注释选择红色笔刷的行时,仅获得黑色线条而不是红色线条您是否尝试过将其作为第5个参数传递给?如果我尝试将PATCOPY作为第5个参数,我得到了红色的线,但前一行并没有被删除。