CRect rc;
      this->GetClientRect(&rc);
      CDC* pDC=GetDC();
      CBitmap bmp,memBitmap;
      bmp.LoadBitmapW(IDB_BITMAP_ROSE);
      memBitmap.CreateCompatibleBitmap(pDC,rc.Width(),rc.Height());
              CDC memDC;
      memDC.CreateCompatibleDC(pDC);
      Graphics graphics(memDC.m_hDC);
      Image ima(L"玫瑰紫花边.bmp");
      graphics.DrawImage(&ima,rc.Width(),rc.Height());
      pDC->BitBlt(0,0,rc.Width(),rc.Height(),&memDC,0,0,SRCCOPY);以上代码是想用兼容DC和的方法在屏幕上绘制位图,但是不成功,求解

解决方案 »

  1.   

    你创建个memBitmap有啥用?
    你根本没有把memBitmap选入到memDC中去啊
    这时你对memDC所有的绘图都是无效的
    需要用memDC.SelectObject(&memBitmap)选入
      

  2.   

    3楼的意思是,没有memDC.SelectObject(&memBitmap);这一句的话,在memDC上的绘图操作就无效了吗?为什么啊?用CDC *pDC=GetDC();的时候是可以直接在上面绘图的
    内存设备上下文memDC和当前设备上下文pDC到底有什么不一样呢,我原来的理解是两者的操作并没有太大的不一样,只是在memDC上绘图看不出来而已
      

  3.   

    我已经尝试过了,多加了一条代码,变成这样
    CRect rc;
    this->GetClientRect(&rc);
    CDC* pDC=GetDC();
    CBitmap bmp,memBitmap;
    bmp.LoadBitmapW(IDB_BITMAP_ROSE);
    memBitmap.CreateCompatibleBitmap(pDC,rc.Width(),rc.Height());  

    CDC memDC;
    memDC.CreateCompatibleDC(pDC);
    memDC.SelectObject(&memBitmap);

    Graphics graphics(memDC.m_hDC);
    Image ima(L"玫瑰紫花边.bmp");
    graphics.DrawImage(&ima,rc.Width(),rc.Height());

    pDC->BitBlt(0,0,rc.Width(),rc.Height(),&memDC,0,0,SRCCOPY);但是不行啊,这样子屏幕变成一片黑色,什么都没有画出来
      

  4.   

    你这代码在哪?还需要GetDC,
    最好放在OnDraw里
      

  5.   

    这代码是放在一个消息映射的函数里,在OnDraw里的效果也是一样的,我试过了
      

  6.   

    7楼,我已经在6楼里尝试了3楼得思路了,不行,屏幕会变成一片黑色
    没有人对GDI+绘图比较熟吗
      

  7.   

    帮你看了一下,graphics.DrawImage(&ima,rc.Width(),rc.Height());这一句有问题,,第三个参数和第四个参数是绘制图片的left ,top,而你传的却是宽度跟高度,所以什么都看不见,还有,最好画图片之前,填充一下背景色。
      

  8.   

    嗯,很感谢楼上,可以了,是一个小疏忽啊,漏了两个参数
    graphics.DrawImage(&ima,0,0,rc.Width(),rc.Height());
    这样子就可以了,太感谢了