void monster::cur_backbit() { CClientDC dc(hwnd); if (tar_p.x-ori_p.x>0)ori_p.x+=0.125; else if (tar_p.x-ori_p.x<0)ori_p.x-=0.125; else if (tar_p.y-ori_p.y>0)ori_p.y+=0.125; else if (tar_p.y-ori_p.y<0)ori_p.y-=0.125; else { screen.x=(int)tar_p.x; screen.y=(int)tar_p.y; turntag=turn1; } mdc->BitBlt(0,0,WIDTH,HEIGHT,map,(int)(32*ori_p.x),(int)(32*ori_p.y),SRCCOPY); for(p1=hhead;p1!=0;p1=p1->next) { mdc1->SelectObject(hero[p1->ID]); if(!p1->selected) if(p1->action) TransparentBlt2(*mdc,(int)(-32*ori_p.x)+p1->x*32,(int)(-32*ori_p.y)+p1->y*32,32,32,*mdc1,flag*16,0,16,16,RGB(72,168,16)); else TransparentBlt2(*mdc,(int)(-32*ori_p.x)+p1->x*32,(int)(-32*ori_p.y)+p1->y*32,32,32,*mdc1,(3+flag)*16,0,16,16,RGB(72,168,16)); } for(q1=mhead;q1!=0;q1=q1->next) { mdc1->SelectObject(mon); if(!q1->selected) if(q1->action) TransparentBlt2(*mdc,(int)(-32*ori_p.x)+q1->x*32,(int)(-32*ori_p.y)+q1->y*32,32,32,*mdc1,flag*16,0,16,16,RGB(72,168,16)); else TransparentBlt2(*mdc,(int)(-32*ori_p.x)+q1->x*32,(int)(-32*ori_p.y)+q1->y*32,32,32,*mdc1,flag*16,16,16,16,RGB(72,168,16)); } dc.BitBlt(0,0,WIDTH,HEIGHT,mdc,0,0,SRCCOPY); }
void menu::selectmenu() { if(p->selected && flag1) { mdc1->SelectObject(hero[p->ID]); TransparentBlt2(*mdc,-32*screen.x+p->x*32,-32*screen.y+p->y*32,32,32,*mdc1,(6+flag2%2+bd1[pt[mi].D])*16,0,16,16,RGB(72,168,16)); } dman(); if(flag1) { if(cur.selectfriend){cur.x=it->x;cur.y=it->y;} if(cur.selectmon){cur.x=v->x;cur.y=v->y;} mdc1->SelectObject(curp); TransparentBlt2(*mdc,-32*screen.x+cur.x*32,-32*screen.y+cur.y*32,32,32,*mdc1,32,0,16,16,RGB(0,0,0)); } }
BOOL CDuiBitmap::TileBlt(HDC hdc,int x,int y,int nWid,int nHei,int xSrc,int ySrc,int nWidSrc,int nHeiSrc,BYTE byAlpha/*=0xFF*/) { if(IsEmpty()) return FALSE; if(nWid==nWidSrc && nHei==nHeiSrc) return BitBlt(hdc,x,y,nWid,nHei,xSrc,ySrc,byAlpha); BOOL bRet=FALSE; HDC hMemdc=CreateCompatibleDC(hdc); HGDIOBJ hOldBmp=SelectObject(hMemdc,m_hBitmap); BOOL bTransDraw=m_crMask!=CLR_INVALID; int yt=y; while(yt<y+nHei) { int xt=x; int nHeiT=min(nHeiSrc,y+nHei-yt); while(xt<x+nWid) { int nWidT=min(nWidSrc,x+nWid-xt); if(bTransDraw) { bRet=TransparentBlt2(hdc,xt,yt,nWidT,nHeiT,hMemdc,xSrc,ySrc,nWidT,nHeiT,m_crMask); } else { bRet=::BitBlt(hdc,xt,yt,nWidT,nHeiT,hMemdc,xSrc,ySrc,SRCCOPY); } xt+=nWidT; } yt+=nHeiT; } SelectObject(hMemdc,hOldBmp); DeleteDC(hMemdc); return TRUE; }
void KDraw::DrawCombineButton( HDC hdc, HBITMAP hBitmap, RECT rcSrc, LONG lBtnWidth, LONG lSkinLeftSize, LONG lSkinRightSize, COLORREF crBackground, COLORREF crTransparent ) { HDC hdcMem = ::CreateCompatibleDC(hdc); HBITMAP hbmpOld = (HBITMAP)::SelectObject(hdcMem, hBitmap); RECT rcDraw = {0, 0, lBtnWidth, rcSrc.bottom - rcSrc.top}; ::FillRect(hdc, &rcDraw, (HBRUSH)::GetStockObject(WHITE_BRUSH)); TransparentBlt2( hdc, 0, 0, lSkinLeftSize, rcSrc.bottom - rcSrc.top, hdcMem, rcSrc.left, rcSrc.top, lSkinLeftSize, rcSrc.bottom - rcSrc.top, crTransparent ); TransparentBlt2( hdc, lSkinLeftSize, 0, lBtnWidth - lSkinLeftSize - lSkinRightSize, rcSrc.bottom - rcSrc.top, hdcMem, rcSrc.left + lSkinLeftSize, rcSrc.top, 1, rcSrc.bottom - rcSrc.top, crTransparent ); TransparentBlt2( hdc, lBtnWidth - lSkinRightSize, 0, lSkinRightSize, rcSrc.bottom - rcSrc.top, hdcMem, rcSrc.left + lSkinLeftSize + 1, rcSrc.top, lSkinRightSize, rcSrc.bottom - rcSrc.top, crTransparent ); ::SelectObject(hdcMem, hbmpOld); ::DeleteDC(hdcMem); }
void KDraw::DrawTransparentBitmap(HDC hdc, HBITMAP hBitmap, POINT ptDest, POINT ptSrc, SIZE sizeSrc, COLORREF crTransparent) { HDC dcDraw = ::CreateCompatibleDC(hdc); HBITMAP hBmpOld = (HBITMAP)::SelectObject(dcDraw, hBitmap); TransparentBlt2( hdc, ptDest.x, ptDest.y, sizeSrc.cx, sizeSrc.cy, dcDraw, ptSrc.x, ptSrc.y, sizeSrc.cx, sizeSrc.cy, crTransparent ); ::SelectObject(dcDraw, hBmpOld); ::DeleteDC(dcDraw); }
void KDraw::DrawTransparentBitmap(HDC hdc, HBITMAP hBitmap, INT xStart, INT yStart, COLORREF crTransparent) { BITMAP bmpInfo; HDC dcDraw = ::CreateCompatibleDC(hdc); HBITMAP hBmpOld = (HBITMAP)::SelectObject(dcDraw, hBitmap); ::GetObject(hBitmap, sizeof(BITMAP), &bmpInfo); TransparentBlt2( hdc, xStart, yStart, bmpInfo.bmWidth, bmpInfo.bmHeight, dcDraw, 0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, crTransparent ); ::SelectObject(dcDraw, hBmpOld); ::DeleteDC(dcDraw); }
BOOL CDuiBitmap::BitBlt(HDC hdc,int x,int y,int nWid,int nHei,int xSrc,int ySrc,BYTE byAlpha/*=0xFF*/) { if(IsEmpty()) return FALSE; BOOL bRet=FALSE; HDC hMemdc=CreateCompatibleDC(hdc); HGDIOBJ hOldBmp=SelectObject(hMemdc,m_hBitmap); if(m_crMask!=CLR_INVALID) { bRet=TransparentBlt2(hdc,x,y,nWid,nHei,hMemdc,xSrc,ySrc,nWid,nHei,m_crMask); } else { bRet=::BitBlt(hdc,x,y,nWid,nHei,hMemdc,xSrc,ySrc,SRCCOPY); } SelectObject(hMemdc,hOldBmp); DeleteDC(hMemdc); return bRet; }
void monster::AImoving() { if(moves==0) { q->selected=false; q->action=false; AfxMessageBox("待机"); q=q->next; if(q=0)endmonturn(); return; } if(mj==0) { detx=(float)(pt[mi+1].x-pt[mi].x); dety=(float)(pt[mi+1].y-pt[mi].y); detx/=2; dety/=2; } // mdc1->SelectObject(hero[p->ID]); mdc1->SelectObject(mon); TransparentBlt2(*mdc,-32*screen.x+(int)(32*(pt[mi].x+mj*detx)),-32*screen.y+(int)(32*(pt[mi].y+mj*dety)),32,32, *mdc1,(6+mj+bd2[pt[mi+1].D])*16,0,16,16,RGB(72,168,16)); mj++; if(mj==2) { mj=0; mi++; if(mi==moves) { q->selected=false; q->action=false; AfxMessageBox("待机"); q=q->next; if(q=0)endmonturn(); } } }
void KDraw::DrawTransparentFrameByBitmap(HDC hDC, RECT rcFrame, UINT uBmpID, SIZE sizeLT, COLORREF crTransparent/* = RGB(0xFF, 0, 0xFF)*/) { BITMAP bmpInfo; HBITMAP hBitmap = NULL;// = g_bmpMap[uBmpID]; HDC dcDraw = ::CreateCompatibleDC(hDC); HBITMAP hBmpOld = (HBITMAP)::SelectObject(dcDraw, hBitmap); SIZE sizeRB, sizeCenter; if (NULL == hBitmap) return; ::GetObject(hBitmap, sizeof(BITMAP), &bmpInfo); sizeRB.cx = bmpInfo.bmWidth - sizeLT.cx - 3; sizeRB.cy = bmpInfo.bmHeight - sizeLT.cy - 3; sizeCenter.cx = rcFrame.right - rcFrame.left - bmpInfo.bmWidth + 3; sizeCenter.cy = rcFrame.bottom - rcFrame.top - bmpInfo.bmHeight + 3; // TopLeft TransparentBlt2( hDC, rcFrame.left, rcFrame.top, sizeLT.cx, sizeLT.cy, dcDraw, 0, 0, sizeLT.cx, sizeLT.cy, crTransparent ); // TopRight TransparentBlt2( hDC, rcFrame.right - sizeRB.cx, rcFrame.top, sizeRB.cx, sizeLT.cy, dcDraw, sizeLT.cx + 3, 0, sizeRB.cx, sizeLT.cy, crTransparent ); // BottomLeft TransparentBlt2( hDC, rcFrame.left, rcFrame.bottom - sizeRB.cy, sizeLT.cx, sizeRB.cy, dcDraw, 0, sizeLT.cy + 3, sizeLT.cx, sizeRB.cy, crTransparent ); // BottomRight TransparentBlt2( hDC, rcFrame.right - sizeRB.cx, rcFrame.bottom - sizeRB.cy, sizeRB.cx, sizeRB.cy, dcDraw, sizeLT.cx + 3, sizeLT.cy + 3, sizeRB.cx, sizeRB.cy, crTransparent ); // Top TransparentBlt2( hDC, rcFrame.left + sizeLT.cx, rcFrame.top, sizeCenter.cx, sizeLT.cy, dcDraw, sizeLT.cx + 1, 0, 1, sizeLT.cy, crTransparent ); // Left TransparentBlt2( hDC, rcFrame.left, rcFrame.top + sizeLT.cy, sizeLT.cx, sizeCenter.cy, dcDraw, 0, sizeLT.cy + 1, sizeLT.cx, 1, crTransparent ); // Right TransparentBlt2( hDC, rcFrame.right - sizeRB.cx, rcFrame.top + sizeLT.cy, sizeRB.cx, sizeCenter.cy, dcDraw, sizeLT.cx + 3, sizeLT.cy + 1, sizeRB.cx, 1, crTransparent ); // Bottom TransparentBlt2( hDC, rcFrame.left + sizeLT.cx, rcFrame.bottom - sizeRB.cy, sizeCenter.cx, sizeRB.cy, dcDraw, sizeLT.cx + 1, sizeLT.cy + 3, 1, sizeRB.cy, crTransparent ); ::SelectObject(dcDraw, hBmpOld); ::DeleteDC(dcDraw); }
// 绘制透明图片 inline void DrawTransBmp(HDC hdc, HDC hdcTmp, int xx, int yy, HBITMAP bmp) { SelectObject(hdcTmp, bmp); TransparentBlt2(hdc, xx, yy, SQUARE_SIZE, SQUARE_SIZE, hdcTmp, 0, 0, SQUARE_SIZE, SQUARE_SIZE, MASK_COLOR); }