PB中图形化窗口的实现

软件世界

说起窗口,大家立刻回想起那些最为常用的千篇一律的图形化窗口?回答是肯定的!下面,我们以PB为开发环境,自己动手做一个图形化窗口。(图1)

图1
图1

一、实现原理

1.创建一个或多个区域。
2.利用ComBineRgn函数将创建的区域进行合并、相交、取反等操作,得到一个新的复杂的区域。
3.将此区域设置成新的窗口区域。

二、具体步骤

1.新建窗口w_main并在Local External Functions中声明API函数
FUNCTION ulong CreateEllipticRgn(ulong X1,ulong Y1,ulong X2,ulong Y2) LIBRARY "gdi32.dll"//创建椭圆或圆形区域
FUNCTION ulong CreateRectRgn(ulong X1,ulong Y1,ulong X2,ulong Y2) LIBRARY "gdi32.dll"//创建矩形
FUNCTION ulong CombineRgn(ulong hDestRgn,ulong hSrcRgn1,ulong hSrcRgn2,ulong nCombineMode) LIBRARY "gdi32.dll"//合并区域
FUNCTION ulong SetWindowRgn(ulong hWnd,ulong hRgn,boolean bRedraw) LIBRARY "user32.dll"//设置新的窗口区域
FUNCTION ulong DeleteObject(ulong hObject) LIBRARY "gdi32.dll"//删除对象
2.在窗口中放置Picture控件,加入相关图片。
3.在窗口的Open事件中输入如下代码:
long E_rgn,R_rgn,lresult
E_rgn=CreateEllipticRgn(100,100,400,400) //创建椭圆
R_rgn=CreateRectRgn(75,400,425,475)// 创建区域
lresult=ComBineRgn(R_rgn,E_rgn,E_rgn,2)//将创建的圆形与圆角矩形区域进行合并操作(2合并)
lresult=SetWindowRgn(handle(this),R_rgn,true)
deleteobject(E_rgn)
deleteobject(R_rgn)

三、结束语

这样,图形化的窗口就完成了。大家还可以在此基础上,做进一步修改,生成符合自己要求的窗口。