积累系统性知识
积聚技术精华
  首页    个人中心    撰写积文    建立课题    订立目标    整理积文    管理课题    管理目标    技能Get    代码积累 
MFC基础--怎样贴一张圆型的位图
error997 (error997)    2014-11-20 21:09:50      目标    课题
   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) 
} 

}


转自 http://blog.csdn.net/y___y/article/details/1156358
(+0)技能Get

建议楼主:搜索关键字 |参考其他资源 |回复 |追问
  error997(error997):   个人中心    课题    目标    代码积累