RT MFC CPen 画图怎么去掉背景色。主要代码
void CSketchpad::OnMouseMove(UINT nFlags, CPoint point) 
{
CWnd::OnMouseMove(nFlags, point);
// 取得鼠标移动的当前坐标,并在屏幕画图
if (!blMouseUp)
{
CClientDC dc(this); CPen Pen;
CPen *OldPen; //dc.SetBkColor(RGB(0, 255, 0));
//dc.SetBkMode(TRANSPARENT);
Pen.CreatePen(PS_SOLID, nWidth, RGB(nR, nG, nB));
OldPen=dc.SelectObject (&Pen); dc.MoveTo (nX, nY);
dc.LineTo (point.x,point.y); this->Invalidate(TRUE); nX = point.x;
nY = point.y; dc.SelectObject (&OldPen);
Pen.DeleteObject();
OldPen = NULL;
}
}
症状如下

解决方案 »

  1.   

    this->Invalidate(TRUE);会把你前面画的,都干掉了!
      

  2.   

    另外,你OnPaint里面,有什么代码没有?
    背景没有画,用画刷填充,是CBrush,应该画背景函数,被你直接返回了吧代码改了一下,你看看:
    if (!blMouseUp)
        {
    CDC *pDC = GetDC();      
            CPen Pen;
            CPen *OldPen;        //dc.SetBkColor(RGB(0, 255, 0));
            //dc.SetBkMode(TRANSPARENT);
            Pen.CreatePen(PS_SOLID, nWidth, RGB(nR, nG, nB));
            OldPen=pDC->SelectObject (&Pen);        pDC->MoveTo (nX, nY);
            pDC->LineTo (point.x,point.y);                nX = point.x;
            nY = point.y;        pDC->SelectObject (&OldPen);
            Pen.DeleteObject();
            OldPen = NULL;
    ReleaseDC(pDC);
        }
      

  3.   

    呃,上班时间,我们不能上QQ,惭愧!
    你贴出onpaint 的代码!
      

  4.   

    // Sketchpad.cpp : 实现文件
    //#include "stdafx.h"
    #include "ToolBox.h"
    #include "Sketchpad.h"
    // CSketchpadIMPLEMENT_DYNAMIC(CSketchpad, CWnd)CSketchpad::CSketchpad()
    {
    nWidth = 3;
    nR = 255;
    nG = 0;
    nB = 0;
    nX = 0;
    nY = 0;
    blMouseUp = TRUE;
    }CSketchpad::~CSketchpad()
    {
    }
    BEGIN_MESSAGE_MAP(CSketchpad, CWnd)
    ON_WM_LBUTTONDOWN()
    ON_WM_LBUTTONUP()
    ON_WM_MOUSEMOVE()
    ON_WM_PAINT()
    END_MESSAGE_MAP()// CSketchpad 消息处理程序
    BOOL CSketchpad::CreateEx(DWORD dwExStyle, LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, LPVOID lpParam)
    {
    return CWnd::CreateEx(dwExStyle, lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, lpParam);
    }
    BOOL CSketchpad::CreateEx(LPCTSTR pTitle, RECT &rect)
    {
    return CreateEx(
    WS_EX_TRANSPARENT, 
    AfxRegisterWndClass(0,AfxGetApp()->LoadStandardCursor(IDC_ARROW)),
    pTitle,
    WS_POPUP,
    rect,
    NULL,
    NULL,
    NULL
    );
    }
    BOOL CSketchpad::PreTranslateMessage(MSG* pMsg)
    {
    if( pMsg->message ==WM_KEYDOWN)
    {
    // 如果是ESC键,则屏蔽
    if(pMsg->wParam == VK_ESCAPE)
    {
    this->DestroyWindow();
    return TRUE;
    }
    } return CWnd::PreTranslateMessage(pMsg);
    }
    void CSketchpad::OnPaint()
    {
    CPaintDC dc(this);
    //dc.SetBkColor(RGB(0, 255, 0));
    //dc.SetBkMode(TRANSPARENT);
    //CRect rect;
    //GetClientRect(&rect);
    //dc.DrawText(_T("nice to meet you"),&rect,DT_SINGLELINE| DT_CENTER|DT_VCENTER);
    //dc.Ellipse(100,100,200,200); 
    }
    void CSketchpad::OnLButtonDown(UINT nFlags, CPoint point) 
    {
    CWnd::OnLButtonDown(nFlags, point);
    // 设置鼠标左键按下标志
    blMouseUp = FALSE;
        if (!blMouseUp)
    {
    // 取得鼠标坐标
    nX = point.x;
    nY = point.y;
    }
    }
    void CSketchpad::OnLButtonUp(UINT nFlags, CPoint point) 
    {
    CWnd::OnLButtonUp(nFlags, point);
    if(!blMouseUp)
    {
    // 设置鼠标左键释放标志
    blMouseUp = TRUE;
    ReleaseCapture();
    }
    }void CSketchpad::OnMouseMove(UINT nFlags, CPoint point) 
    {
    CWnd::OnMouseMove(nFlags, point);
    // 取得鼠标移动的当前坐标,并在屏幕画图
    if (!blMouseUp)
    {
    /*
    CClientDC dc(this); CPen Pen;
    CPen *OldPen; //dc.SetBkColor(RGB(0, 255, 0));
    //dc.SetBkMode(TRANSPARENT);
    Pen.CreatePen(PS_SOLID, nWidth, RGB(nR, nG, nB));
    OldPen=dc.SelectObject (&Pen); dc.MoveTo (nX, nY);
    dc.LineTo (point.x,point.y); Invalidate(TRUE); nX = point.x;
    nY = point.y; dc.SelectObject (&OldPen);
    Pen.DeleteObject();
    OldPen = NULL;
    */ CDC *pDC = GetDC();   
    CPen Pen;
    CPen *OldPen; //dc.SetBkColor(RGB(0, 255, 0));
    //dc.SetBkMode(TRANSPARENT);
    Pen.CreatePen(PS_SOLID, 1, RGB(nR, nG, nB));
    OldPen=pDC->SelectObject (&Pen); pDC->MoveTo (nX, nY);
    pDC->LineTo (point.x,point.y); nX = point.x;
    nY = point.y; pDC->SelectObject (&OldPen);
    Pen.DeleteObject();
    OldPen = NULL;
    ReleaseDC(pDC); }
    }
      

  5.   

    这句出错了:
    pDC->SelectObject (&OldPen);
    改为
    pDC->SelectObject (OldPen);
      

  6.   

    通过函数
    BOOL CSketchpad::CreateEx(LPCTSTR pTitle, RECT &rect)
    来创建一个透明窗体,然后在用鼠标画线条。 方法
    void CSketchpad::OnPaint()
    基本没内容
      

  7.   

    我已经给你的这个180637640qq发了封MAIL
      

  8.   

    我重新创建了一个工程,然后,添加上你的几个类,运行后,发现没有你说的情况!不过,我把BCMenu给干掉了,你是不是调用RButtondown了?如果是的,怀疑是BCMenu的原因!
      

  9.   

    多谢 fandh   
    实验证明Windows7不好用, Win2003 和 XP系统都是好用的。