不规则窗体使用SetWindowPos//如何能对应的下呢?

不规则窗体使用SetWindowPos//怎么能对应的上呢????

hClipRgn = CreateRgnFromBitmap(m_bMask,RGB(255,255,255));
if (hClipRgn){
SetWindowRgn(hClipRgn, TRUE);
CDC *pDC = GetDC();
if (pDC){
SelectClipRgn(pDC->GetSafeHdc(), hClipRgn);//根据mask图,把窗口创建不剪裁区域之后
ReleaseDC(pDC);
}
}
if (m_DrawMode==0){
SetWindowPos(NULL,0,0,GetBitmapWidth(m_bMask),//把窗口的大小调整为和位图对象大小一样,
位图对象是长方形的图片吗 现在不是修改成不规则的窗体,怎么还能对应的上呢????
GetBitmapHeight(m_bMask),SWP_NOZORDER|SWP_NOMOVE);
}

------解决方案--------------------
微调整Rgn的裁剪区域,同时还可以调整底图,最后完全对应上,裁剪时还得注意尽量不要让锯齿太严重,另外可以用PNG图来实现,我写了个例子,希望能帮上你http://bbs.csdn.net/topics/390333291

------解决方案--------------------
代码的话参照
void __fastcall TForm1::FormCreate(TObject *Sender)

{

register int x,y;

int l,r;

POINT *a;

bool lb,rb;

HRGN WndRgn,TempRgn,tepRgn;


Width=800;Height=600;

if((a=(POINT *)malloc(800*4*(sizeof(POINT))))==NULL)

{

ShowMessage("申请内存失败!");

exit(0);

}

Image1->Picture->LoadFromFile(".\\face.bmp");

Width=Image1->Width;

Height=Image1->Height;

Repaint();

l=0;r=Image1->Height*2-1;

WndRgn=CreateRectRgn(0,0,Image1->Width,Image1->Height);

< //应用方法二产生轮廓坐标点数组

for(y=0;y<Image1->Height;y++)

{

lb=true;

for(x=0;x<Image1->Width;x++)

if(Image1->Canvas->Pixels[x][y]!=clWhite)

{

a[l].x=x+1;

a[l].y=y;

lb=false;

break;

}

if(lb) a[l]=a[l-1];

l++;


rb=true;

for(x=Image1->Width-1;x>=0;x--)

if(Image1->Canvas->Pixels[x][y]!=clWhite)

{

a[r].x=x;

a[r].y=y;

rb=false;

break;

}

if(rb) a[r]=a[r+1];

r--;

}

//应用方法一抠去图片内凹部分

r=Image1->Height*2-1;

for(y=0;y<Image1->Height;y++){

for(x=a[y].x;x<a[r].x;x++)

if(Image1->Canvas->Pixels[x][y]==clWhite)

{

< tepRgn=CreateRectRgn(x,y,x+1,y+1);

CombineRgn(WndRgn,WndRgn,tepRgn,RGN_XOR);

DeleteObject(tepRgn);

}

r--;



//将图片外围部分抠去

TempRgn=CreatePolygonRgn(a,Image1->Height*2,ALTERNATE);

CombineRgn(WndRgn,WndRgn,TempRgn,RGN_AND);

DeleteObject(TempRgn);

free(a);

//显示不规则窗体

SetWindowRgn(Handle,WndRgn,true);

SetWindowPos(Handle,HWND_TOP,0,0,0,0,SWP_NOMOVE
------解决方案--------------------
SWP_NOSIZE);

}