void CA99View::doPushBmp(CPoint point)
{
CBitmap m_bmp;
CBitmap *pOldBitmap;
CBrush *pOldBrush;
CPen *pOldPen; CDC *pDC = GetDC();
if(pDC == NULL)
return; CDC dcMem;
if (!dcMem.CreateCompatibleDC(pDC))
return; CRect rect; //Get the rectangle of stone;
rect.left = point.x - 25/1;
rect.right = point.x + 25/1;
rect.top = point.y - 25/1;
rect.bottom = point.y + 25/1; m_bmp.LoadBitmap(IDB_MYBMP);
CBrush br(RGB(0, 0, 0));
CPen pen(PS_NULL,1,RGB(0, 0, 0)); pOldBitmap = dcMem.SelectObject(&m_bmp);
pOldPen=pDC->SelectObject(&pen);
pOldBrush = pDC->SelectObject(&br); pDC->Ellipse(&rect);
BITMAP bm;
m_bmp.GetBitmap(&bm); pDC->StretchBlt(rect.left,rect.top,rect.Width(),rect.Height(),
&dcMem,0,0,bm.bmWidth,bm.bmHeight,SRCPAINT); dcMem.SelectObject(pOldBitmap); //select old bitmap
pDC->SelectObject(pOldPen);//select old pen
pDC->SelectObject(pOldBrush);//select old brush ReleaseDC(pDC);
}这段代码,是LBUTTONDOWN的响应代码
效果是画出圆形图片我的理解是:
白色,颜色值的各位,都是1
黑色,颜色值的各位,都是0
这段代码调用StretchBlt时,使用SRCPAINT参数,执行OR操作
那么如果我在白底的地方点击,
圆图部分,因为已经画出黑色圆,因此和0进行OR操作,保留图片的样子,可以理解
rect中除了圆图部分的其他部分,因此和白底(即1)进行OR操作,结果肯定是1,也就是白色,可以理解
但是,如果我在已经画出的圆形图片上面点击(非白色)
rect中除了圆图部分的其他部分,和已经画出的圆形图片进行OR操作,我觉得结果应该是背景图片和源图片的混合物,
但我看到的结果,是显示背景图片,我有点不明白
{
CBitmap m_bmp;
CBitmap *pOldBitmap;
CBrush *pOldBrush;
CPen *pOldPen; CDC *pDC = GetDC();
if(pDC == NULL)
return; CDC dcMem;
if (!dcMem.CreateCompatibleDC(pDC))
return; CRect rect; //Get the rectangle of stone;
rect.left = point.x - 25/1;
rect.right = point.x + 25/1;
rect.top = point.y - 25/1;
rect.bottom = point.y + 25/1; m_bmp.LoadBitmap(IDB_MYBMP);
CBrush br(RGB(0, 0, 0));
CPen pen(PS_NULL,1,RGB(0, 0, 0)); pOldBitmap = dcMem.SelectObject(&m_bmp);
pOldPen=pDC->SelectObject(&pen);
pOldBrush = pDC->SelectObject(&br); pDC->Ellipse(&rect);
BITMAP bm;
m_bmp.GetBitmap(&bm); pDC->StretchBlt(rect.left,rect.top,rect.Width(),rect.Height(),
&dcMem,0,0,bm.bmWidth,bm.bmHeight,SRCPAINT); dcMem.SelectObject(pOldBitmap); //select old bitmap
pDC->SelectObject(pOldPen);//select old pen
pDC->SelectObject(pOldBrush);//select old brush ReleaseDC(pDC);
}这段代码,是LBUTTONDOWN的响应代码
效果是画出圆形图片我的理解是:
白色,颜色值的各位,都是1
黑色,颜色值的各位,都是0
这段代码调用StretchBlt时,使用SRCPAINT参数,执行OR操作
那么如果我在白底的地方点击,
圆图部分,因为已经画出黑色圆,因此和0进行OR操作,保留图片的样子,可以理解
rect中除了圆图部分的其他部分,因此和白底(即1)进行OR操作,结果肯定是1,也就是白色,可以理解
但是,如果我在已经画出的圆形图片上面点击(非白色)
rect中除了圆图部分的其他部分,和已经画出的圆形图片进行OR操作,我觉得结果应该是背景图片和源图片的混合物,
但我看到的结果,是显示背景图片,我有点不明白
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货