MFC基础--怎样贴一张圆型的位图

 

MFC基础--怎样贴一张圆型的位图


如果你要做有关棋类的东东
又恰好有两张漂亮棋子的位图,
可惜两张位图是方型的,后面
有背景..在Delphi里只要将
背景色设成透明就行了,可在
MFC里怎样实现把背景去掉只
显示圆形的棋子呢?

实例如下:
//To invoke this function with the position

BOOL IsBlack = TRUE;//set the black stone defautly
CBitMap m_bStoneB;
CBitMap m_bStoneW;
//load bmp from resource
m_bStoneB.LoadBitmap(IDB_BLACKSTONE);
m_bStoneW.LoadBitmap(IDB_WHITESTONE);

void CxxDlg::OnPutStone(CPoint point)
{
CDC *pDC = GetDC(); //Get Device Context
CBitmap *pOldBitmap;
CBrush *pOldBrush;
CPen *pOldPen;

if(pDC == NULL)
return;

CDC dcimage;
if (!dcimage.CreateCompatibleDC(pDC)) //Create MemDC
return;

CRect rect; //Get the rectangle of stone;
rect.left = point.x - 25/3;
rect.right = point.x + 25/3;
rect.top = point.y - 25/3;
rect.bottom = point.y + 25/3;

if(IsBlack) //judge whether stone is black
{
//Select blackstone in memory and select out oldbitmap
pOldBitmap = dcimage.SelectObject(&m_bStoneB);
CBrush br(RGB(0, 0, 0)); //set brush to black
CPen pen(PS_SOLID,1,RGB(0, 0, 0));//set pen to black
pOldPen=pDC->SelectObject(&pen);//select in pen(black)
//and out oldpen

pOldBrush = pDC->SelectObject(&br);//select in brush(black)
pDC->Ellipse(&rect);//draw a ellipse in defined rectangle
BITMAP bm;
m_bStoneB.GetBitmap(&bm);//Get blackstone bitmap info

//paint memory bitmap(blackstone) with the operator OR
pDC->StretchBlt(rect.left,rect.top,rect.Width(),rect.Height(),
&dcimage,0,0,bm.
mWidth,bm.bmHeight,SRCPAINT);
}
else //the same to draw whitestone bitmap
{
//select in whitestone and select out blackstone
pOldBitmap = dcimage.SelectObject(&m_bStoneW);
CBrush br(RGB(255, 255, 255)); //set white brush
CPen pen(PS_SOLID,1,RGB(255, 255, 255));//set white pen
pOldPen=pDC->SelectObject(&pen);
pOldBrush = pDC->SelectObject(&br);
pDC->Ellipse(&rect);
BITMAP bm;
m_bStoneW.GetBitmap(&bm);
//paint memory bitmap(whitestone) with the operator AND
pDC->StretchBlt(rect.left,rect.top,rect.Width(),rect.Height(),

&dcimage,0,0,bm.
mWidth,bm.bmHeight,SRCAND);
}

dcimage.SelectObject(pOldBitmap); //select old bitmap
pDC->SelectObject(pOldPen);//select old pen
pDC->SelectObject(pOldBrush);//select old brush

IsBlack = !IsBlack; //switch to white or black
ReleaseDC(pDC);//relieve GDI resource(important)
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值