比喻将这个bitmap选入内存dc中,然后呢,我怎么画都是黑色的呀。

解决方案 »

  1.   

    不知道这是不是你要的
    CPaintDC dc(this);
    CDC* pMemDC=new CDC;
    CBitmap* pBitmap=new CBitmap;
    CRect Rect;
    GetClientRect(&Rect);
    pMemDC->CreateCompatibleDC(&dc);
    pBitmap->LoadBitmap(IDB_BITMAP);
    pMemDC->SelectObject(pBitmap);
    dc.BitBlt(0,0,Rect.bottom,pMemDC,0,0,SRCCOPY);
    pBitmap->DeleteObject();
    pMemDC->DeleteObject();
      

  2.   

    我要用CreateCompatibleBitmap创建位图,然后在位图上画东西 
      

  3.   

    先创建位图。再用一种颜色fillsolidrect。然后用pen画一些颜色渐变。再用bitblt后来发现不管用不用bitblt都 是黑色的。奇怪
      

  4.   

    给你个例子,包它正确:可要多给分呀!
    CBitmap bitmap;
        CBitmap* pOldBitmap;
        CDC MemDC;
        int i;
        CPen pen;
        CPen* oldpen;
        MemDC.CreateCompatibleDC(&dc); ///建立与显示设备兼容的内存设备场境
        bitmap.CreateCompatibleBitmap(&dc,100,100);///建立与显示设备兼容的位图
        pOldBitmap=MemDC.SelectObject(&bitmap); ///将位图选入内存场境
        for(i=0;i<100;i++)
        { ///画100根线
           pen.CreatePen(PS_SOLID,1, RGB(0,0,i*2+55));    
           oldpen=MemDC.SelectObject(&pen);
           MemDC.MoveTo(0,i);
           MemDC.LineTo(100,i);
           MemDC.SelectObject(oldpen);
           pen.DeleteObject();
        }
        dc.BitBlt(50,50,100,100,&MemDC,0,0,SRCCOPY); ///显示它
        MemDC.SelectObject(pOldBitmap);
      

  5.   

    void CXPMenu::DrawGrade(CDC* pDC, CRect rt, COLORREF cl1,COLORREF cl2, bool bHro)
    {
    CDC memdc;
    memdc.CreateCompatibleDC(pDC); HBITMAP memBmp = ::CreateCompatibleBitmap(pDC->m_hDC, rt.Width(), rt.Height());

    int width = rt.Width();
    int height = rt.Height(); int r1 = GetRValue(cl1);
    int g1 = GetGValue(cl1);
    int b1 = GetGValue(cl1); int r2 = GetRValue(cl2);
    int g2 = GetGValue(cl2);
    int b2 = GetBValue(cl2); //dibcolor table
    RGBQUAD *rgb ;
    if (bHro)
    rgb = new RGBQUAD[width];
    else
    rgb = new RGBQUAD[height]; HBITMAP oldBmp = (HBITMAP)::SelectObject(memdc.m_hDC, memBmp);
    //memdc.FillSolidRect(&rt, RGB(0XFF, 0, 0XFF));
    if (bHro) //
    {
    float dr = (float)((float)(r2 - r1) / (float)width);
    float dg = (float)((float)(g2 - g1) / (float)width);
    float db = (float)((float)(b2 - b1) / (float)width); for (int i = 0; i < width; i++)
    {
    int r = dr * i + r1;
    int g = dg * i + g1;
    int b = db * i + b1;

    //--------------
    //test only
    //--------------
    rgb[i].rgbRed = r;
    rgb[i].rgbBlue = b;
    rgb[i].rgbGreen = g;

    /*if (!::SetDIBColorTable(memdc.m_hDC, 0, width, rgb))
    PostQuitMessage(0);*/
    CPen pen, *pPen;
    pen.CreatePen(PS_SOLID, 1, RGB(r, g, b));
    pPen = memdc.SelectObject(&pen); memdc.MoveTo(i /*+ rt.left*/, rt.top);
    memdc.LineTo(i /*+ rt.left*/, rt.bottom); memdc.SelectObject(pPen);
    ::DeleteObject(pen.m_hObject); //Destroy object
    }

    }
    else
    {
    float dr = (float)((float)(r2 - r1) / (float)height);
    float dg = (float)((float)(g2 - g2) / (float)height);
    float db = (float)((float)(b2 - b2) / (float)height); for (int i = rt.top; i < rt.bottom; i++)
    {
    int r = (int)dr * i + r1;
    int g = (int)dg * i + g1;
    int b = (int)db * i + b1; CPen pen, * pPen;
    pen.CreatePen(PS_DOT, 1, RGB(r, g, b)); pPen = pDC->SelectObject(&pen);
    memdc.MoveTo(rt.left, i);
    memdc.LineTo(rt.right, i); memdc.SelectObject(pPen);
    ::DeleteObject(pen.m_hObject); //Destroy object }
    }
    pDC->BitBlt(rt.left, rt.top, rt.Width(), rt.Height(), &memdc, 0, 
    0, SRCCOPY);
    ::SelectObject(memdc, oldBmp);
    ::DeleteObject(oldBmp);
    delete rgb;
    ::DeleteDC(memdc.m_hDC);
    }
      只看if 中的就有了,else 还没有改。
      

  6.   

    memdc的区域是CRect(0,0,rt.Width(),rt.Height()),而不是rt!
      

  7.   

    错误有三:
    1.memdc.FillSolidRect(&rt, RGB(0XFF, 0, 0XFF));
    2.memdc.MoveTo(i /*+ rt.left*/, rt.top);
      memdc.LineTo(i /*+ rt.left*/, rt.bottom);
    3.memdc.MoveTo(rt.left, i);
      memdc.LineTo(rt.right, i);
    我想不用我在解释了吧
      

  8.   

    谢谢大家。特别是: mousubin(无情剑客) 这位"淫兄"
     问题解决了。呵呵、
    大家分了吧
      

  9.   

    居然给不出分。NND,怎么办啊
      

  10.   

    : mousubin(无情剑客) :
     开个玩笑嘛,呵呵