void CClipScreenToolDlg::ChangeBackGround(HDC &hDC,CRect rect)
{
m_hGrayBitmap=CreateCompatibleBitmap(hDC,m_nGrayWidth,m_nGrayHeight);
HDC hMemDC=CreateCompatibleDC(hDC);
SelectObject(hMemDC,m_hGrayBitmap);
BLENDFUNCTION blend;
memset(&blend,0,sizeof(blend));
blend.BlendOp=AC_SRC_OVER;
blend.SourceConstantAlpha=ALPHA_GRAY;//透明度
if (rect.left==rect.right||rect.top==rect.bottom)
{
AlphaBlend(hDC,0,0,m_xScreen,m_yScreen,hMemDC,0,0,m_nGrayWidth,m_nGrayHeight,blend);
}else{
//【除去矩形后,alpha混合其余四个区域都灰化】
int x1 = rect.left < rect.right ? rect.left : rect.right;
int y1 = rect.top < rect.bottom ? rect.top : rect.bottom;
int x2 = rect.left < rect.right ? rect.right : rect.left;
int y2 = rect.top < rect.bottom ? rect.bottom : rect.top;
if (y1 > 0)
{
AlphaBlend(hDC,0,0,m_xScreen, y1,hMemDC,0,0,m_nGrayWidth,m_nGrayHeight, blend);
}
if (y2 < m_yScreen)
{
AlphaBlend(hDC,0,y2,m_xScreen, m_yScreen-y2,hMemDC,0,0,m_nGrayWidth,m_nGrayHeight, blend);
}
if (x1 > 0)
{
AlphaBlend(hDC,0,y1,x1, y2 - y1,hMemDC,0,0,m_nGrayWidth,m_nGrayHeight, blend);
}
if (x2 < m_xScreen)
{
AlphaBlend(hDC,x2,y1,m_xScreen - x2, y2 - y1,hMemDC,0,0,m_nGrayWidth,m_nGrayHeight, blend);
}
}
DeleteDC(hMemDC);
}