好象在深度历险上见过一个例子。应该不难吧,得到不规则图形的rgn,然后再,,,
解决方案 »
- 为何要用到这个数组变量?
- report machine最新版是多少
- 如何在对TCheckBox.Checked设置时不产生Onclick
- 求‘报价单作业’的源程序,自己想参考一下,没做过这方面的东西!!!
- 讨论:垃圾短信和垃圾邮件哪个更令人讨厌?
- 请教关于消息处理的问题,100分送上
- 有几个关于数据库操作的简单问题,请大家帮帮忙!!!
- 关于在delphi中插入mp3到数据库 后怎么不能用tmediaplayer播放
- 用ADO开发三层,当A表有Trigger时,Clientdataset保存会出错,
- 调用DLL时,往Application的消息应该怎么截取?
- 关于用户登录及权限的控制问题!
- 再来一次,如何在程序中动态创建一个Access数据库,并存到硬盘上?
procedure TForm1.FormDblClick(Sender: TObject);
var ARgn: HRGN;
begin
//创建一个剪裁区域,它可以是任意形状,在此创建的是一个椭圆形
ARgn := CreateEllipticRgn(0,0,Width,Height);
//根据剪裁区域形状设置窗体形状。
SetWindowRgn(Handle, ARgn, True);
//释放剪裁区域
DeleteObject(ARgn);
end;
2.抠图,去掉指定颜色的图形部分:
void CNewCBTickerDlg::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=0;
UINT x1,ry1; BITMAP bm;
Digged->GetBitmap(&bm);
rx1=rx+bm.bmWidth;
ry1=ry+bm.bmHeight; rgnWnd->SetRectRgn(rx,ry,rx1,ry1); for(x=rx ; x<=rx1; x++)
{
for(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);
}
3.在OnInitDialog(窗口初始化函数)中,调用DigBmp
{
……
DigBmp(……);
SetWindowRgn((HRGN)rgnWnd,true);
……
}