当前所在位置:珠峰网资料 >> 计算机 >> 计算机等级考试 >> 正文
在MFC里实现把背景去掉只显示圆形图片
发布时间:2010/6/7 10:15:14 来源:城市学习网 编辑:ziteng
  如果你要做有关棋类的东东又恰好有两张漂亮棋子的位图,可惜两张位图是方型的,后面有背景..在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)
  }
  }
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved