我在CreateCompatibleDC 创建的DC画图,然后想用BitBlt把它复制到窗体上,为什么复制不出来呀?那位可以给我一个在内存中作图,然后复制在窗体上的例子(可以运行的)

解决方案 »

  1.   


    void CLegend::OnPaint() 
    {
    CPaintDC dc(this); // device context for painting

    // TODO: Add your message handler code here
    /***********使用双缓冲模式*********************/
    CDC memDC;
    CBitmap bmp;
    CBitmap* pOldBmp;
    CRect rcClientRect;
    GetClientRect(rcClientRect); memDC.CreateCompatibleDC(&dc);
    bmp.CreateCompatibleBitmap(&dc,rcClientRect.Width(),rcClientRect.Height());
    pOldBmp=memDC.SelectObject(&bmp); //绘制背景
    CBrush NewBrush;
    NewBrush.CreateSolidBrush(RGB(100,100,0));
    memDC.FillRect(rcClientRect,&NewBrush); //为每条曲线绘制标签 for(int i=0;i<m_lpLegend.GetSize();i++)
    {
    CPen CurrentPen;
    CPen* pOldPen;
    CurrentPen.CreatePen(PS_SOLID,3,m_lpLegend[i].clColor);
    pOldPen=memDC.SelectObject(&CurrentPen);
    memDC.SetBkMode(TRANSPARENT); //绘制线形
    memDC.MoveTo(rcClientRect.left+15,20+i*30);
    memDC.LineTo(rcClientRect.right-15,20+i*30);

    //绘制文本,文本居中显示
    CString str;
    str.Format("%s",m_lpLegend[i].szName);
    CSize size=memDC.GetTextExtent(str);

    memDC.TextOut(rcClientRect.right/2-size.cx/2,i*30+25,str);
    }
    dc.BitBlt(0,0,rcClientRect.Width(),rcClientRect.Height(),&memDC,0,0,SRCCOPY);
    memDC.SelectObject(pOldBmp);
    // Do not call CWnd::OnPaint() for painting messages
    }
      

  2.   

    把for语句的那部分换成你自己的绘制代码就可以了;
      

  3.   

    hDC = ::GetDC(窗体HWND);
        hMemDC = ::CreateCompatibleDC(hDC);
        hBitmap = ::CreateCompatibleBitmap(hDC, 宽, 高);
        hOldBitmap = (HBITMAP)::SelectObject(hMemDC, hBitmap);
         .
        绘图
         .
        ::BitBlt(hDC, 左, 上, 宽, 高, hMemDC, 0, 0, SRCCOPY);
        ::SelectObject(hMemDC, hOldBitmap);
        ::DeleteDC(hMemDC);
      

  4.   

    在view的OnDraw()中添加如下代码:
    pDC->SetMapMode(MM_TEXT);
    CBitmap bitmap;
    CDC dcMemory;
    bitmap.LoadBitmap(IDB_BITMAP1);
    dcMemory.CreateCompatibleDC(pDC);
    dcMemory.SelectObject(&bitmap);
    pDC->BitBlt(400,100,500,500,&dcMemory,0,0,SRCCOPY);
      

  5.   

    up不对。你的email,我发个程序给你。