数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
在VFP中制做异型窗口

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

在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)即可。

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


相关文章

相关软件