吵吵   2011-03-03  阅读:3,893

以前用到dreamvever的时候倒是没有觉得刚开始的按个窗口到底是怎么创建的,不过后来看到了搜狗的输入法的悬浮框的时候,就想着那些根据图片创建的不规则窗口是怎么做到的?网上查了资料后终于明白:www.chaochaoblog.com

SetWindowRgn原来是用这个函数来实现的。不过你首先得得到那个不规则的矩形区域,怎么做呢,那就是先在ps中把你要去掉的部分用一种颜色覆盖,比如说蓝色,然后在vc中把你那些蓝色的矩形区域从中排除,就得到剩下部分的不规则矩形区域了。

代码如下:


CDC *pDC=GetDC();

CBitmap bmpBack;
bmpBack.LoadBitmap(IDB_BACK);
CDC dcMem;
dcMem.CreateCompatibleDC(pDC);
// BITMAP bmp;
dcMem.SelectObject(&bmpBack);
// bmpBack.GetBitmap(&bmp);
CPoint point;
CRgn rgnFinal,rgnTemp;

rgnFinal.CreateRectRgn(0,0,188,51);

for (point.x=0;point.x<=188;point.x++)//两个循环把图片中像素点都扫面一遍
{
for(point.y=0;point.y<=51;point.y++)
{
if(dcMem.GetPixel(point)==RGB(255,255,255))//这点为你设置的要去除部分的颜色
{
rgnTemp.CreateRectRgn(point.x,point.y,point.x+1,point.y+1);
rgnFinal.CombineRgn(&rgnFinal,&rgnTemp,RGN_DIFF);//使用这个函数把rgnFinal中的rgnTemp去除
rgnTemp.DeleteObject();// www.chaochaoblog.com

}

}

}

SetWindowRgn(rgnFinal,true);
dcMem.DeleteDC();
bmpBack.DeleteObject();
rgnFinal.DeleteObject();
rgnTemp.DeleteObject();
ReleaseDC(pDC);

吵吵微信朋友圈,请付款实名加入:

吵吵 吵吵

发表评论

电子邮件地址不会被公开。 必填项已用*标注