ITPub博客

首页 > 应用开发 > IT综合 > MFC基础--怎样贴一张圆型的位图 (转)

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

原创 IT综合 作者:amyz 时间:2007-10-02 10:54:39 0 删除 编辑
MFC基础--怎样贴一张圆型的位图 (转)[@more@]

 

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)
}

}


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752019/viewspace-974403/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    3984
  • 访问量
    7363907