如何用 windows API 改变窗口和按钮的形状(100分)

  • 主题发起人 主题发起人 nsc
  • 开始时间 开始时间
N

nsc

Unregistered / Unconfirmed
GUEST, unregistred user!
如何用 windows API 改变窗口和按钮的形状成不规则的形状 ?<br>
 
窗口比较容易<br>////////////////////////////////////////////<br><br>四四方方的窗体也会变形,利用win32 API函数setwindowrgn就可以将窗口定义为任何形状,以下是将窗口定义为园角矩形的例子:<br><br>procedure TPortForm.FormCreate(Sender: Tobject);<br>var hr :thandle;<br>begin<br>hr:=createroundrectrgn(0,0,width,height,20,20);//定义园角矩形或圆角正方形(win API函数)<br>//CreateEllipticRgn 定义圆形或椭圆<br>setwindowrgn(handle,hr,true); //设置园角窗口<br>end;<br>为了使该窗口更好,应在onResize事件处理程序放相同的代码。<br>/////////////////////////////////////<br><br>用汉字做窗体形状<br>procedure TForm1.FormCreate(Sender: TObject);<br>var<br>rgn:HRGN;<br>begin<br>&nbsp;BeginPath(Canvas.Handle);<br>&nbsp;SetBkMode( Canvas.Handle, TRANSPARENT );<br>&nbsp;Canvas.Font.Name:= '宋体';<br>&nbsp;Canvas.Font.Size:=100;<br>&nbsp;Canvas.TextOut( 20, 20, '漂亮吗?');//用"漂亮吗?"作为form的形状<br>&nbsp;EndPath(Canvas.Handle);<br>&nbsp;rgn:= PathToRegion(Canvas.Handle);<br>&nbsp;SetWindowRgn( Handle, rgn, true );<br>end;
 
MyRegion := CreateRoundRectRgn(0, 0, 50, 100, 50, 50);<br>SetWindowRgn(Button1.Handle, MyRegion, True);<br>// Never free or use MyRegion after called SetWindowRgn.
 
&nbsp;啊,老猫和 Another_eYes 动作真快啊,对你们的佩服如滔滔之...(以下省略一万字)<br>人家 11:20 贴的帖子,11:28 和 11:31 就搞定了,是不是整天在论坛上逛啊。
 
不至于吧!请回答我的帖子好吗?
 
多人接受答案了。
 
wjiachun的方法我试了一下,不行!
 
后退
顶部