欢迎光临
我们一直在努力

在VFP中制做异型窗口-数据库专栏,其他相关

建站超值云服务器,限时71元/月

在vfp中制做异型窗口
(作者:周鸣扬 2000年09月04日 11:50)

  制做异型窗口听起来好象只是在vb、vc程序设计中才能够做到的。但是,在vfp中,只要你灵活运用api函数,这并不是一件很难实现的事情。通过本文的介绍,你一定能够发现vfp程序的强项不仅仅是数据处理,在程序界面设计方面也可以和其他的编程语言相媲美。

  一、实现原理

  在vb、vc程序的设计中,如果想要改变窗口的形状,通常会通过对setwindowrgn的调用来达到目的。setwindowrgn函数能够将窗口设定成任意形状。该函数的调用格式如下:

  int setwindowrgn( hwnd hwnd, hrgn hrgn, bool bredraw )

  其中各参数的含意为:

  hwnd:欲改变窗口的句柄

  hrgn:窗口的显示区域

  bredraw:指明窗口在被改变显示区域之后是否需要重绘,通常情况下该值为真。

  通过上面对setwindowrgn函数的介绍,我们可以看出,在vfp中要想改变窗口的形状,需要知道vfp窗口的句柄。在vfp中要想直接得到有关窗口的情况是很困难的,因此必须利用api例程库。vfp自带的api例程库“foxtools.fll”提供了对窗口操作的相关函数。本文中能够用到的例程有_wontop()和_whtohwnd()两种,其中_wontop()是用来获得顶层窗口的句柄,_whtohwnd()返回指定窗口的句柄。这两个api例程的调用格式很简单,这里就不再详细介绍了。

  二、实现过程

  有了上面的认识之后,我们便可以试着去设计异型窗口的程序了。设计步骤如下:

  1.新建一表单mult_shape,按表1设置表单的属性。

                表1

属性名        设置值                备注

autocenter    .t.                  自动居中
backcolor    0,0,160                蓝色背景
borderstyle  no border              窗口无边框
controlbox    .f.                  去掉表单的最大化、最小化、恢复按钮
caption      圆形窗口
fillcolor  128,255,0  
showwindow  2-as top-level form  将表单作为顶层表单,否则表单不能独立于vfp而存在
titlebar      0-off                  取消标题栏

  在表1中,对表单界面所做的设定,目的是为了让表单在运行之后更像一圆形窗口,因此,我们需要去掉标题栏、窗口大小控制按钮等常规窗口上的内容。

  2.在表单上加入一标签控件(label1)和按钮控件(command1),分别设定其标题为“vfp圆形窗口示例”和“退出”。

  3.设定表单和控件的事件代码,其中表单的load事件代码为:

  *注册api函数

  declare integer setwindowrgn in win32api integer,integer,integer

  declare integer createroundrectrgn in win32api integer,integer,integer,integer,integer,integer

  *注册vfp的api例程库

  set library to "c:\program files\microsoft visual studio\vfp98\foxtools.fll"

  *设定表单的大小

  thisform.top=0

  thisform.left=0

  thisform.height=200

  thisform.width=200

  表单的activate事件代码为:

  thisform.label1.top=thisform.top+thisform.height/2-thisform.label1.height

  thisform.label1.left=thisform.left+(thisform.width-thisform.label1.width)/2

  thisform.command1.top=thisform.height-3*thisform.command1.height

  thisform.command1.left=thisform.left+(thisform.width-thisform.command1.width)/2

  *上述代码主要是用来在圆形窗口中准确定位各控件的位置

  topwindow=_wontop( )

  *获得顶层窗口

  hwnd=_whtohwnd(topwindow)

  *获得顶层窗口的句柄

  crn1=createroundrectrgn(0,0,200,200,200,200)

  *建立一圆形窗口,如果要做其他形状的窗口,只需调用不同的建立区域的函数

  setwindowrgn(hwnd,crn1,.t.)

  command1控件的click事件代码为:

  thisform.release

  另外,如果你还想设计出其他形状的窗口,只需要将form1中的activate事件代码中的createroundrectrgn(0,0,200,200,200,200)做相应的修改。比如你想要建立一苹果形窗口,将该语句改为: createroundrectrgn(0,0,200,200,90,1800)即可。

  通过本文所介绍的程序,以前看起来很困难的事情转眼间就做到了。试试看吧,你能够做出更加丰富多彩的异型窗口!

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 在VFP中制做异型窗口-数据库专栏,其他相关
分享到: 更多 (0)

相关推荐

  • 暂无文章