/*
*圖像合成函數
*輸入:客戶區GDI句柄
*輸出:空
*/
void abc::paintPicAnd(CDC *cdc)
{
//變量初始化
CRect rect;
CBitmap f_bmp,b_bmp,m_bmp;
CDC f_cdc,b_cdc,m_cdc;
COLORREF colorTran;
GetClientRect(rect);
CBrush brush(RGB(255,255,255));
//CDC适配建立
f_cdc.CreateCompatibleDC(cdc);
b_cdc.CreateCompatibleDC(cdc);
m_cdc.CreateCompatibleDC(cdc);
//Bitmap建立
f_bmp.LoadBitmap(IDB_FRONT);
b_bmp.LoadBitmap(IDB_BACK);
m_bmp.CreateBitmap(rect.Width(),rect.Height(),1,1,NULL);//遮罩層建立的是單色圖檔,黑白作為邏輯(二值性)
//CDC,Bitmap綁定
f_cdc.SelectObject(&f_bmp);
b_cdc.SelectObject(&b_bmp);
m_cdc.SelectObject(&m_bmp);
//遮罩層填充
colorTran=f_cdc.GetPixel(1,1);
f_cdc.SetBkColor(colorTran);
m_cdc.SelectObject(&brush);
m_cdc.FillRect(&rect,&brush);
//前景複制到遮罩層,真彩向單色拷貝時,真彩的背景色拷貝為白色,其他顔色為黑色
m_cdc.BitBlt(0,0,rect.Width(),rect.Height(),&f_cdc,0,0,SRCCOPY);
///遮罩 與 複制到前景,單色向真彩轉換時,白色轉為真彩的背景色,黑色轉為前景色
f_cdc.SetBkColor(RGB(0,0,0));//遮罩層底色黑色
f_cdc.SetTextColor(RGB(255,255,255));//遮罩層畫筆白色
// cdc->BitBlt(0,0,rect.Width(),rect.Height(),&m_cdc,0,0,SRCCOPY);
f_cdc.BitBlt(0,0,rect.Width(),rect.Height(),&m_cdc,0,0,SRCAND);
//遮罩 與 複制到背景
b_cdc.SetBkColor(RGB(255,255,255));//遮罩層底色白色
b_cdc.SetTextColor(RGB(0,0,0));//遮罩層畫筆黑色
b_cdc.BitBlt(0,0,rect.Width(),rect.Height(),&m_cdc,0,0,SRCAND);
//前景 或 複制到背景
b_cdc.BitBlt(0,0,rect.Width(),rect.Height(),&f_cdc,0,0,SRCPAINT);
//背景複制到客戶區
cdc->BitBlt(0,0,rect.Width(),rect.Height(),&b_cdc,0,0,SRCCOPY);
}