位图创建不规则窗体
要创建个不规则窗体,采用对话框模式,加入一个函数对图像进行逐行扫描去除指点的底色:
void CTestDlg::DigBmp(CDC* pDC, CBitmap* Digged, CRgn* rgnWnd, COLORREF TransColor)
{
CDC dcMem;
CBitmap* pOldBitmap=NULL;
COLORREF cl;
CRgn rgnTemp;
dcMem.CreateCompatibleDC(pDC);
pOldBitmap=dcMem.SelectObject(Digged);
UINT rx,ry;
rx=ry=0;
UINT rx1,ry1;
BITMAP bm;
Digged->GetBitmap(&bm);
rx1=rx+bm.bmWidth;
ry1=ry+bm.bmHeight;
rgnWnd->SetRectRgn(rx,ry,rx1,ry1);
for(UINT x=rx;x<=rx1;x++)
{
for(UINT y=ry;y<=ry1;y++)
{
//取得坐标处象素的颜色值
cl=dcMem.GetPixel(x,y);
if(cl==TransColor)
{
//象素颜色为指定的透明色,创建透明"微区域"
rgnTemp.CreateRectRgn(x,y,x+1,y+1);
//"扣像",从完整的区域中"扣除"透明的"微区域"(异或)
rgnWnd->CombineRgn(rgnWnd,&rgnTemp,RGN_XOR);
//删除刚创建的透明"微区域",释放系统资源
rgnTemp.DeleteObject();
}
}
}
if (pOldBitmap) dcMem.SelectObject(pOldBitmap);
ReleaseDC(&dcMem);
}
2.在OnInitDialog(窗口初始化函数)中,调用DigBmp
{
……
pBitmap->LoadBitmap(IDB_BITMAP1);
DigBmp(GetWindowDC(),pBitmap,rgnWnd,RGB(255,0,254));//RGB(255,0,254)粉红,根据位图底色决定,
SetWindowRgn((HRGN)rgnWnd,true);
……
}
编译时没有错误,但是执行时出现如下错误:
"0x5f442e4d"指令引用的“0xccccccd0”内存,改内存不能为“read”
如果大家没有现成的位图资源可以去下个千千静听,在skin文件下有个“.skin”文件改成“.zip”就有了,希望大家帮忙!!
由于DigBmp()这个函数我时在网上找的,也不知道错没错,如果不行,希望高手给我个行的!