//绘画时间 void CGameParrentView::DrawUserTimer(CDC * pDC, int nXPos, int nYPos, WORD wTime, WORD wTimerArea) { if ((wTime>0)&&(wTimerArea>=wTime)) { //创建 DC CDC DCBuffer; DCBuffer.CreateCompatibleDC(pDC); CImageHandle ImageHandle(&m_ImageTimer); HGDIOBJ hOldGdiObj=DCBuffer.SelectObject(ImageHandle.GetBitmapHandle()); //绘画定时器 int nDrawPos=nXPos; for (WORD nArea=10000; nArea>0; nArea/=10) { if (wTimerArea<nArea) continue; int nTimerPos=wTime/nArea; AlphaDrawImage(pDC,nDrawPos,nYPos,m_nXTimer,m_nYTimer,&DCBuffer,nTimerPos*m_nXTimer,0,RGB(255,0,255)); wTime-=nTimerPos*nArea; nDrawPos+=m_nXTimer; } //清理资源 DCBuffer.SelectObject(hOldGdiObj); DCBuffer.DeleteDC(); } return; }
//绘画准备 void CGameParrentView::DrawUserReady(CDC * pDC, int nXPos, int nYPos) { CImageHandle ImageHandle(&m_ImageReady); int nImageWidth=ImageHandle->GetWidth(); int nImageHeight=ImageHandle->GetHeight(); AlphaDrawImage(pDC,nXPos-nImageWidth/2,nYPos-nImageHeight/2,nImageWidth,nImageHeight,ImageHandle.GetBitmapHandle(),0,0,RGB(255,0,255)); return; }
//绘画头像 void __cdecl CUserFaceRes::DrawNormalFace(CDC * pDC, int nXPos, int nYPos, WORD wFaceID, DWORD dwUserID, DWORD dwCustomFace) { //调整参数 if (wFaceID>=m_wCount) wFaceID=0; //绘画头像 CDC DCFace; DCFace.CreateCompatibleDC(NULL); DCFace.SelectObject(m_NormalFace); bool bDrawFace = false; if(dwCustomFace!=0) { //头像名称 CString strDirName; strDirName.Format(TEXT("%s\\CustomFace"),m_szDirWork); CString strFileName; strFileName.Format(TEXT("\\%ld_%d.bmp"), dwUserID, dwCustomFace); //读取文件 CImage FaceImage; HRESULT hResult = FaceImage.Load(strDirName + strFileName); if (SUCCEEDED(hResult)) { //设置模式 int nOldBltMode = pDC->SetStretchBltMode(HALFTONE); //设置大小 CRect rcFace; rcFace.left = nXPos; rcFace.top = nYPos; rcFace.right = rcFace.left + m_NormalSize.cx; rcFace.bottom = rcFace.top + m_NormalSize.cy; //绘画图片 FaceImage.StretchBlt(pDC->GetSafeHdc(), rcFace); //删除资源 pDC->SetStretchBltMode(nOldBltMode); FaceImage.Destroy(); bDrawFace=true; } } //正常头像 if(!bDrawFace) { AlphaDrawImage(pDC,nXPos,nYPos,m_NormalSize.cx,m_NormalSize.cy,&DCFace,wFaceID*m_NormalSize.cx,0); } return; }
//╩Л╨о╩Ф╩╜ bool CPngImageEx::AlphaDrawImage(CDC * pDestDC, INT xDest, INT yDest, INT cxDest, INT cyDest, INT xSrc, INT ySrc, INT cxSrc, INT cySrc, BYTE cbAlphaDepth) { //WIN 7 ж╢пп if ( CD2DEngine::GetD2DEngine() ) { CD2DEngine::GetD2DEngine()->DrawImage(m_pWnd, m_strImageName, xDest, yDest, cxDest, cyDest, xSrc, ySrc, cxSrc, cySrc, cbAlphaDepth ); return true; } //╢╢╫╗╩╨ЁЕ if ((cxDest!=cxSrc)||(cyDest!=cySrc)) { //╪стьеп╤о ASSERT(m_pImage!=NULL); if (m_pImage==NULL) return false; //╢╢╫╗фад╩ ASSERT(pDestDC!=NULL); Graphics graphics(pDestDC->GetSafeHdc()); //╧╧тЛн╩жц RectF rcDrawRect; rcDrawRect.X=(REAL)xDest; rcDrawRect.Y=(REAL)yDest; rcDrawRect.Width=(REAL)cxDest; rcDrawRect.Height=(REAL)cyDest; //м╦цВ╬ьуС ColorMatrix Matrix= { 1.0f,0.0f,0.0f,0.0f,0.0f, 0.0f,1.0f,0.0f,0.0f,0.0f, 0.0f,0.0f,1.0f,0.0f,0.0f, 0.0f,0.0f,0.0f,cbAlphaDepth/255.0f,0.0f, 0.0f,0.0f,0.0f,0.0f,1.0f }; //иХжцйТпт ImageAttributes Attributes; Attributes.SetColorMatrix(&Matrix,ColorMatrixFlagsDefault,ColorAdjustTypeBitmap); //╩Ф╩╜м╪оЯ graphics.DrawImage(m_pImage,rcDrawRect,(REAL)xSrc,(REAL)ySrc,(REAL)cxSrc,(REAL)cySrc,UnitPixel,&Attributes); } else { //фум╗╣Всц AlphaDrawImage(pDestDC,xDest,yDest,cxDest,cyDest,xSrc,ySrc,cbAlphaDepth); } return true; }
//透明绘画 bool CSkinImage::AlphaDrawImage(CDC * pDestDC, int xDest, int yDest, COLORREF crTrans) { return AlphaDrawImage(pDestDC,xDest,yDest,GetWidth(),GetHeight(),0,0,crTrans); }