在vb6里面,我们一般通过以下代码来创建不规则窗体。 private declare function setwindowrgn lib "user32" (byval hwnd as long, _ byval hrgn as long, byval bredraw as boolean) as long 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 deleteobject lib "gdi32" (byval hobject as long) as long
private sub form_activate() dim hndrgn as long hndrgn = createellipticrgn(0, 0, 175, 175) call setwindowrgn(me.hwnd, hndrgn, true) call deleteobject(hndrgn) end sub 首先用win32 api createellipticrgn创建一个圆形的区域,然后设置form的区域为用户自定义的region,这样我们就可以得到下面一个圆形的窗体
vb.net里面如何实现以上效果: vb.net是一中跨平台的语言,更好的利用了面向对象机制。它的面向对象能力扩展了语言本身的通路:一切都是对象。这意味着比在以前的vb版本里,你获得了更多的内在功能,你将很少被迫使用 windows api。因此在vb.net里面我们也只好放弃vb6里面利用api的观念,用vb.net强大的对象机制来阐述以上话题。 在vb.net里面,form有一个reigin属性,我们通过创建自定义的reigin,然后指定form的reigin,就可以得到不规则的窗体。而且vb.net里面的reigin对象功能强大,远超过了之前vb的限制,因此我们可以作出很多漂亮的界面。
在form的load事件加入以下代码: dim text_path as graphicspath dim text_region as region me.backcolor = color.red me.width = 600 ' create the text path. text_path = new graphicspath( drawing.drawing2d.fillmode.alternate) text_path.addstring("csdn", new fontfamily("times new roman"), fontstyle.bold, 200,new point(10, 10), stringformat.genericdefault) ' create a region from the path. text_region = new region(text_path) ' constrain the form to the region. me.region = text_region
运行将将得到如下形状的窗体,记住按shift+f5 中止程序。
2.椭圆形状的窗体: 同样加入以下代码,得到如下窗体
me.width = 300 me.height = 220 me.backcolor = color.royalblue dim m_path as graphicspath m_path = new graphicspath(fillmode.winding) m_path.addellipse(1, 1, 200, 200) dim m_region as new region(m_path) me.region = m_region