问题一:
BOOL CSampleView::OnEraseBkgnd(CDC* pDC)
{//设置brush为希望的背景颜色
CBrush backBrush(RGB(255, 128, 128));//保存旧的brush
CBrush* pOldBrush = pDC->SelectObject(&backBrush);
CRect rect;
pDC->GetClipBox(&rect);//画需要的区域
pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(), PATCOPY);
pDC->SelectObject(pOldBrush);return TRUE;}
上例中,为什么CBrush* pOldBrush = pDC->SelectObject(&backBrush);是保存旧的brush,backBrush是新的brush啊?!而pDC->SelectObject(pOldBrush);又怎么说是释放bursh呢?问题二:
1. FirstDC  <-----这个dc是屏幕上的一个dc
2. SecondDC <-----这个dc,我们希望复制FirstDC里的东西,我们这样做:{
CBitmap TmpBitmap;
TmpBitmap.CreateCompatibleBitmap(&FirstDC,dcWidth,dcHeight);
CDC SecondDC;SecondDC.CreateCompatibleDC(&FirstDC);//如果没有这行,画上去的是黑图SecondDC.SelectObject(TmpBitmap);
SecondDC.BitBlt(0,0,dcWidth,dcHeight,&FirstDC,0,0,SRCCOPY);
}
上例中,TmpBitmap.CreateCompatibleBitmap(&FirstDC,dcWidth,dcHeight);为什么需要CreateCompatibleBitmap(),没有这个操作行吗?

解决方案 »

  1.   

    1. 用完 HDC 之后,要把它还原呀~ 因为你只是要用它的一部分~
    2.??
      

  2.   

    1. SelectObject 设置新的brush,然后返回老的brush
        然后操作完dc后,把老的brush设置回来。2. CreateCompatibleBitmap 用来创建一个位图。此位图用来存放 FirstDC 上内容的副本。
      

  3.   

    1、SelectObject 设置新的brush,返回以前的brush,在使用相关的brush操作完后,用上一次SelectObject的返回值作为参数,把以前的brush设置回来,就相当于释放当前的brush了。2、CreateCompatibleBitmap创建一个与当前DC兼容的位图,在GDI中,一个设备都有特定的DC,比如显示器,或者打印机,都有自己的DC,这个概念像是C和C++中的输出终端。DC还描述了当前的一下物理信息,比如说输出设备是屏幕的话,就有一些窗口在屏幕的位置等信息。