精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>C/C++>>WINDOWS界面设计>>怎样张贴一张圆形的位图

主题:怎样张贴一张圆形的位图
发信人: 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]

[关闭][返回]