用这个,不清楚来函[email protected] CShowDlg::SetRgn(CDC *pDC)
{
CBitmap c_bitmap;
CBitmap *pOldmap;
CDC memDC;
CRgn rgnTemp,rgnWin;
BITMAP bitmap;
COLORREF colMask,colCur;
CRect rect,rect1;

GetWindowRect(&rect);
c_bitmap.LoadBitmap(IDB_BITMAP2);
//装载掩码输位图
c_bitmap.GetBitmap(&bitmap); 
//得到位图信息
rect1.SetRect(rect.TopLeft(),CPoint(bitmap.bmWidth,bitmap.bmHeight));    
memDC.CreateCompatibleDC(pDC);
//建立兼容内存设备
pOldmap=memDC.SelectObject(&c_bitmap);
//建立位图内存映象
rgnWin.CreateRectRgn(0,0,bitmap.bmWidth,bitmap.bmHeight);   
//建立位图区域
colMask=memDC.GetPixel(0,0); 

for(int i=0;i<=bitmap.bmWidth;i++)
{
for(int j=0;j<=bitmap.bmHeight;j++)
{
colCur=memDC.GetPixel(i,j);
if(colCur==colMask)
{
rgnTemp.CreateRectRgn(i,j,i+1,j+1);
rgnWin.CombineRgn(&rgnWin,&rgnTemp,RGN_XOR);
rgnTemp.DeleteObject(); 
}
}
}
if (pOldmap) memDC.SelectObject(pOldmap); 
SetWindowRgn((HRGN)rgnWin,TRUE);
MoveWindow(&rect1,TRUE);
InvalidateRect(NULL,TRUE);
}