发信人: tjam() 
整理人: girlrong(1999-11-09 10:17:53), 站内信件
 | 
 
 
如果你要做有关棋类的东东
 又恰好有两张漂亮棋子的位图,
 可惜两张位图是方型的,后面
 有背景..在Delphi里只要将
 背景色设成透明就行了,可在
 MFC里怎样实现把背景去掉只
 显示圆形的棋子呢?
 
 For Example:
 //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.bmWidth,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.bmWidth,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)
   }
 
 }
  -- 春风再美也比不上你的笑,
 没见过你的人不会明了!
 -- 
  \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
 ^v^ Name:James Tan                ^o^
 ^v^ E-mail:[email protected]  ^o^
  ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.101.14.205]
  | 
 
 
 |