+ -
当前位置:首页 → 问答吧 → 关于HDC的问题

关于HDC的问题

时间:2011-12-10

来源:互联网

求解答,想了好久不会解决:

现在我有一个画了一些内容的兼容HDC,接着我在这个兼容HDC上画了其他东西(即改变了其中的内容),然后我将这个兼容HDC画到真正的HDC上。画完后我想恢复原来最先的兼容HDC要怎么办???

问题可以抽象成这样:
(1)两个变量的情况很简单:
          tmp   =   value;
          value   ++;
          value   =   tmp;   (恢复原来的value)

(2)现在是HDC:
          tmpHDC   =   MDC;       //原来有内容的MDC
          Draw(MDC,   ...)     //画一些东西在MDC上
          mdc   =   tmpHDC;   //   恢复原来的MDC    
这里因为都是HDC句柄,所以这样是不行的,就像引用一样,MDC改了,tmpHDC也跟着改,所以应该如何解决,望能人能帮小弟解决这个问题!感激不已!

作者: donger0159   发布时间: 2011-12-10

SelectObject 之类的函数 系统不会为你保存DC中的内容

C/C++ code

.h
    CDC m_dcMem, *m_pDcOld;
.cpp
    CClientDC dc(this);
    if(!m_dcMem.m_hDC)
    {
        m_dcMem.CreateCompatibleDC(&dc);
        m_pDcOld = m_dcMem.SelectObject(YOUR_OBJECT);
.....
    }

    CDC dcMemTmp, *m_pDcOldTmp;
    dcMemTmp.BitBlt(m_dcMem);// 把你要用的画到局部的内存DC变量中

    ...
    dc.Bitblt(dcMemTmp);

/////

~()//析构函数m_dcMem 判断存在后 1.选回去 2.销毁
{
}




作者: likang0712   发布时间: 2011-12-11