不规则窗体

yang_yang 2001-04-27 09:00:00
怎样根据已有的不规则图形创建窗体呢?
可以提供范例吗?

sjtuyjc@263.net

Thank you !
...全文
127 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
神奇的肚肚 2001-04-27
  • 打赏
  • 举报
回复
有控件
ELAIN 2001-04-27
  • 打赏
  • 举报
回复
对了,上面我的例子是vc++,可以参看,原理是不会错的!
ELAIN 2001-04-27
  • 打赏
  • 举报
回复
1.加载图形
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);
……


Sachow 2001-04-27
  • 打赏
  • 举报
回复
建立一个窗体,设其BorderStyle为bsSingle。
procedure TForm1.FormDblClick(Sender: TObject);
var ARgn: HRGN;
begin
//创建一个剪裁区域,它可以是任意形状,在此创建的是一个椭圆形
ARgn := CreateEllipticRgn(0,0,Width,Height);
//根据剪裁区域形状设置窗体形状。
SetWindowRgn(Handle, ARgn, True);
//释放剪裁区域
DeleteObject(ARgn);
end;
BigBen 2001-04-27
  • 打赏
  • 举报
回复
好象在深度历险上见过一个例子。应该不难吧,得到不规则图形的rgn,然后再,,,

5,930

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧