类型:转载 责任编辑:asp 日期:2007/03/01
如何实现窗体的异形显示?如窗体是个不规则的圆形。
谢谢大家!
推荐阅读
我们还是来看一下在vb6中的实现,vb6中实现
做一个古怪的窗口必须要用的也是此程序中最重要的一个函数就是setwindowrgn
它的功能就是对指定的窗口进行重画,把这个窗口你选择的部分留下其余的部分抹掉
参数:hwnd:你所要重画的窗口的句柄,比如你想重画form1则应该让此参数为form1.hwnd
hrgn:你要保留的区域的句柄,这个句柄是关键,你需要通过别的渠道来获得
在这里的区域是由combinergn合成的新区域
bredram:是否要马上重画,一般设为true
函数combinergn将两个区域组合为一个新区域
函数createrectrgn为创建一个由点x1,y1和x2,y2描述的矩形区域
函数createellipticrgn为创建一个x1,y1和x2,y2的椭圆区域
用deleteobject这个函数可删除gdi对象,比如画笔、刷子、字体、位图、区域以及调色板等等。对象使用的所有系统资源都会被释放
以下是vb6的代码:
private declare function createellipticrgn lib "gdi32" (byval x1 as long, byval y1 as long, byval x2 as long, byval y2 as long) as long
private declare function createrectrgn lib "gdi32" (byval x1 as long, byval y1 as long, byval x2 as long, byval y2 as long) as long
private declare function combinergn lib "gdi32" (byval hdestrgn as long, byval hsrcrgn1 as long, byval hsrcrgn2 as long, byval ncombinemode as long) as long
private declare function setwindowrgn lib "user32" (byval hwnd as long, byval hrgn as long, byval bredraw as boolean) as long
private declare function deleteobject lib "gdi32" (byval hobject as long) as long
private const rgn_diff = 4
private sub form_load()
dim rgn as long
dim rgnrect as long
dim rgndest as long
rgn = createellipticrgn(0, 0, me.width / screen.twipsperpixelx, me.height / screen.twipsperpixely)
rgnrect = createrectrgn((me.width / screen.twipsperpixelx - 20) / 2, (me.height / screen.twipsperpixely - 20) / 2, (me.width / screen.twipsperpixelx + 20) / 2, (me.height / screen.twipsperpixely + 20) / 2)
rgndest = createrectrgn(0, 0, 1, 1)
combinergn rgndest, rgn, rgnrect, rgn_diff
setwindowrgn me.hwnd, rgndest, true
call deleteobject(rgnrect)
call deleteobject(rgndest)
end sub
private sub command1_click()
end
end sub