Mfc 画和擦线

Mfc 画和擦线,mfc,Mfc,我有一个mfc mdi应用程序 我有一条黑色的线 单击“绘制”按钮,我必须在背景色线上绘制红色线 单击“删除”按钮时,我必须删除红色线条,但黑色线条应可见 我会画红色的线,但我不知道如何擦除红色的线 我正在使用下面的代码。在擦除线条时,我得到了一种绿色线条,黑色线条也被擦除了 void CScrRulerView::DrawLine(CDC* pDC, CRect rulerRect, bool bDraw) { int nPrevMode; CPen pen(PS_SOLID

我有一个mfc mdi应用程序

我有一条黑色的线

单击“绘制”按钮,我必须在背景色线上绘制红色线

单击“删除”按钮时,我必须删除红色线条,但黑色线条应可见

我会画红色的线,但我不知道如何擦除红色的线

我正在使用下面的代码。在擦除线条时,我得到了一种绿色线条,黑色线条也被擦除了

void CScrRulerView::DrawLine(CDC* pDC, CRect rulerRect, bool bDraw)
{
    int nPrevMode;

    CPen pen(PS_SOLID,1,RGB(255,0,0));
    CPen* pPenOld = pDC->SelectObject (&pen);
    if(bDraw)
        nPrevMode = pDC->SetROP2(R2_COPYPEN);
    else
        nPrevMode = pDC->SetROP2(R2_NOT);
    pDC->MoveTo(rulerRect.left,rulerRect.top);
    pDC->LineTo(rulerRect.right,rulerRect.bottom);
    pDC->SelectObject(pPenOld);
    pDC->SetROP2(nPrevMode);


}

我正在使用SetROP2(R2_不是);用于擦除是否必须使用其他选项?

您可以通过恢复以前的背景来“擦除”图形。你已经知道如何画一条黑线了。有时,您只需将乐高积木拼在一起。是否有可能只擦除线条而不恢复以前的背景。有几种方法可以恢复以前的图像,例如完全渲染以前的图像,或使用适当的光栅操作(XOR)重新绘制要擦除的线条。然而,这个问题表明,对于如何在Windows GDI中进行渲染缺乏深入了解。你必须先适应它。使用库(如MFC)可能没有帮助。我尝试了R2_XORPEN。它对我有用。实际上我有一把尺子,我在尺子上显示红色的线来指示光标的位置。在滚动时,我开始闪烁。您必须使用相同的颜色进行两次异或,才能恢复初始图像。虽然这不会产生红线;它将由原始图像组成。这里没有捷径:您必须以某种方式还原原始图像。您可以渲染到屏幕外的设备上下文中,这也会处理闪烁问题。但实际上,您绝对需要积极地学习GDI渲染的基础知识。同样,没有捷径。