GDI+ graphics CDC混用可以吗
我想用graphics在memDC上画,然后用bitblt,将memDC中的拷贝到pDC上,这种做法可行吗?
我写的好像不行的说,我想问下,是否GDi+在graphics上画的图,在graphics销毁掉之后就被清空了?

解决方案 »

  1.   

    当然可以.Graphics的其中一个构造函数就要求HDC的参数.
    给你几个Sample看看:
    1)
    BOOL bCrate = CBitmap pobj->CreateCompatibleBitmap);
    CDC MemDC.CreateCompatibleDC(NULL);
    MemDC.SelectObject(CBitmap pobj);
    Graphics graphic(MemDC.GetSafeHdc());
    graphic.Clear(::Color::White);
    graphic.DrawImage(Bitmap, left, top, right, bottom);
    dc.BitBlt(0, 0, Width, Height, &MemDC,   0,   0,   SRCCOPY);2)
    Graphics   gs(dc.m_hDC);
    SolidBrush sBrush(Color(255, 0, 1));
    Pen   curvePen(Color(255, 0, 1), 1.0);
    gs.DrawLine(&curvePen, 1,1, 20, 20);
    gs.DrawRectangle(&curvePen, Rect(0, 0, 100, 200));
    gs.ReleaseHDC(dc.m_hDC);
      

  2.   

    我估计也是可以
    问题在于是否把graphics变量销毁掉了之后图就自动消失
      

  3.   

    可是我的不行的样子,我创建了两个Graphics指针,然后在ondraw中加入了下面的代码,然后出不来啊
    “ if(flag==0)//第一次执行时初始化
    {
    memDC1.CreateCompatibleDC(pDC);
    memDC2.CreateCompatibleDC(pDC);
    gr1=Graphics::FromHDC(memDC1.GetSafeHdc());
    gr2=Graphics::FromHDC(memDC2.GetSafeHdc());
    times=1;
    width=wywlist.getWidth();
    height=wywlist.getHeight();
    this->GetClientRect(&rect);
    midPoint.x=rect.Width()/2;
    midPoint.y=rect.Height()/2;
    flag=1;
    }
    wywlist.readFile1(gr1,"china.zb1");
    wywlist.readFile2(&memDC1,"china.zj1");
    copyDC(times);
    wywlist.readFile3(gr2,times,"china.zb1");
    this->GetClientRect(&rect);
    pDC->BitBlt(0,0,rect.Width(),rect.Height(),&memDC2,(int)(midPoint.x-((rect.Width())/2/times)),(int)(midPoint.y-((rect.Height())/2/times)),SRCCOPY);//将memDC2中的指定坐标输出到当前DC”