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);
}
解决方案 »
- 谁能给我个程序
- 创建兼容DC
- CreateSemaphore(NULL, 2, 2, NULL);第二个值是什么意思?初始化信号数?
- 为什么SetupDiGetDeviceRegistryProperty在win2k下总是返回ERROR_INSUFFICIENT_BUFFER?
- 请问大虾们这句WORD宏代码怎么翻译成BCB的代码
- 地址赋值时 sin_addr.S_un.S_addr 与sin_addr.s_addr 的问题。为什么在MSDN里面的struct in_addr 定义中没有s_addr 这个成员???
- 如何用程序实现在别的程序可编辑区域中输入字符?
- 如何编写宏代码到VC开发环境中去,实现把选中的文本在www.google.com中查找
- 《Windows核心编程》中调试遇到的问题?解决者有分相赠。
- 最小化按纽的WM_SYSCOMMAND消息怎么截获?在视图,还是框架类中编写处理程序?
- PNG图片窗口分享(有源码)
- DIRECTX 10 SDK 自带的例子编译通过,但是为什么奔出个错误
//我现在用bmp图片黑白图的方法剪裁按钮,然后把png图片的前景图拷贝到剪裁区域里。
用Image把png图片的前景拷贝到窗口的某处怎么办呢?//后景RGB(255,255,255)+a 12
hdcMem.BitBlt(r.left,r.top,cx,cy,&dcMask,0,0,SRCAND);
hdcMem.BitBlt(r.left,r.top,cx,cy,&dcBmp,0,0,SRCINVERT);
//bmp的方法!
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);}