两个图形编程基础问题
问题一:
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(),没有这个操作行吗?
问题点数:60、回复次数:4Top
1 楼chanet(牧师)回复于 2003-09-02 01:55:40 得分 5
1. 用完 HDC 之后,要把它还原呀~ 因为你只是要用它的一部分~
2.??Top
2 楼James0001(虾米—什么时候成大虾?)回复于 2003-09-02 07:37:53 得分 25
1. SelectObject 设置新的brush,然后返回老的brush
然后操作完dc后,把老的brush设置回来。
2. CreateCompatibleBitmap 用来创建一个位图。此位图用来存放 FirstDC 上内容的副本。Top
3 楼wkgenius()回复于 2003-09-02 10:51:10 得分 30
1、SelectObject 设置新的brush,返回以前的brush,在使用相关的brush操作完后,用上一次SelectObject的返回值作为参数,把以前的brush设置回来,就相当于释放当前的brush了。
2、CreateCompatibleBitmap创建一个与当前DC兼容的位图,在GDI中,一个设备都有特定的DC,比如显示器,或者打印机,都有自己的DC,这个概念像是C和C++中的输出终端。DC还描述了当前的一下物理信息,比如说输出设备是屏幕的话,就有一些窗口在屏幕的位置等信息。Top
4 楼falawang()回复于 2003-09-08 13:32:37 得分 0
明白,接分!Top



