初始化双缓冲是这样的!// CDC MDc ;
// CBitmap bmp;
if(!MDc.CreateCompatibleDC(NULL))
{
::PostQuitMessage(0);
}
bmp.CreateCompatibleBitmap(&MDc, rt.Width(), rt.Height());
::SelectObject(MDc.GetSafeHdc(), bmp);
下面是2个问题!double colorR=255,colorG=255,colorB=255;
CPen* oldPen;

  for(int i2=0;i<rt.Height();i2++)
  {
  if(i<rt.Height()/3)
  {
  colorR-=0.3; 
  colorG-=0.2;
  colorB-=0.1;
  }
  else
  {
  colorR+=0.06; 
  colorG+=0.04;
  colorB+=0.04;
  }
  CPen pen(PS_SOLID, 3, RGB(colorR ,colorG, colorB) );//RGB(189 ,212, 230) 
  oldPen= MDc.SelectObject(&pen);
  MDc.MoveTo(0,i2);
  MDc.LineTo(rt.Width(),i2);
  
MDc.SelectObject(oldPen);(1)以上代码 我要在内存中绘制渐变的背景 然后一次性到对话框上 为什么没效果?要怎么解决呢?(2)我要在内存中先画个蓝色的圆 再画个红色的圆 为什么对内存DC SelectObject pen 没效果啊? 要怎么解决?
CPen* oldPen;
    CPen pen(PS_SOLID, 3, RGB(200 ,0, 0) );
  oldPen= MDc.SelectObject(&pen);   而这样做却2个圆的颜色都一样  pdcView->SetTextColor(RGB(0,0,250));
pdcView->BitBlt(0, 0, rt.Width(), rt.Height(), &m_dcMemory, 0, 0, SRCCOPY);
 

解决方案 »

  1.   

    第一个问题 绘制渐变背景 再BitBlt到对话框上! 显示的是全黑的
      

  2.   

    猜一下:
    1. 你的CDC选择了一个CBitmap,但是却没有在退出的时候将默认值还原,这里似乎不合乎语法习惯。
    2. 针对第一个问题,我很正确地画出了渐进背景色--但是使用的是memDC.CreateCompatibleDC(pDC);
    其中的pDC=GetDC();
    3. 第二个问题,因为你画圆的时候只进行了一次的SelectObject,选中了红色的画笔,所以就只能是红色的圆了。
    CPen pen1(PS_SOLID, 3, RGB(0 ,0, 200) );
    oldPen=    MDc.SelectObject(&pen);
    MDC.Ellipse(...);
    CPen pen2(PS_SOLID, 3, RGB(200 ,0, 0) );
    MDc.SelectObject(&pen);
    MDC.Ellipse(...);
    MDC.SelectObject(oldPen);
      

  3.   


    //OnInitDialog
    ...
    CRect rc;
    GetClientRect(rc);
    CDC *pDC = NULL;
    pDC = GetDC();
    if(pDC)
    {
    bmp.CreateCompatibleBitmap(pDC,rc.Width(),rc.Height());
    memDC.CreateCompatibleDC(pDC);
    ReleaseDC(pDC);
    }
    else
    AfxMessageBox(_T("没有获得到DC"));
    ...//DrawBkgnd function
    void CCBackgndDlg::Draw_Client(CRect rc, CDC *pDC)
    {
    CBitmap *oldBmp = memDC.SelectObject(&bmp);
    double colorR=255,colorG=255,colorB=255;
        CPen* oldPen;
    for(int i=0;i<rc.Height();i++)
    {
    if(i<rc.Height()/3)
    {
    colorR-=0.3;
    colorG-=0.2;
    colorB-=0.1;
    }
    else
    {
    colorR+=0.06;
    colorG+=0.04;
    colorB+=0.04;
    }
    CPen pen(PS_SOLID, 3, RGB(colorR,colorG,colorB));
    oldPen= memDC.SelectObject(&pen);
    memDC.MoveTo(0,i);
    memDC.LineTo(rc.Width(),i);
    memDC.SelectObject(oldPen);
    }
    pDC->BitBlt(rc.left,rc.top,rc.Width(),rc.Height(),
    &memDC,0,0,
    SRCCOPY);
    memDC.SelectObject(oldBmp);
    }
    //OnPaint
    ...
    CDC *pDC = GetDC();
    CRect rc;
    GetClientRect(rc);
    Draw_Client(rc, pDC);
    ReleaseDC(pDC);
    ...你试一下,如果还是黑的找我哈!