当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++进阶与实例

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)
    }

    }

相关内容
赞助商链接