游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3279|回复: 0

转:怎样张贴一张圆形的位图(from bj.163.net)

[复制链接]

101

主题

467

帖子

482

积分

中级会员

Rank: 3Rank: 3

积分
482
QQ
发表于 2003-8-23 17:31:00 | 显示全部楼层 |阅读模式
如果你要做有关棋类的东东  
又恰好有两张漂亮棋子的位图,  
可惜两张位图是方型的,后面  
有背景..在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.  
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)  
  }  
   
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2024-5-2 21:06

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表