在VFP中制做异型窗口

原创 2000年09月06日 12:27:00
在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)即可。

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

在VFP中制做异型窗口

  • zgqtxwd
  • zgqtxwd
  • 2008年05月01日 02:58
  • 96

VC异形窗体

方法一: 异形窗口的原理很简单,首先加载一张位图画刷作窗口背景,然后设置透明色就可以使得窗口由矩形变成任意形状。这样使得窗口的显示更加美观。  1.重写OnCreate方法 int CClien...
  • liujiayu2
  • liujiayu2
  • 2014年11月18日 09:38
  • 542

Win32下创建异形窗口

异型窗口 先来说说什么是异形窗口,
  • u011645174
  • u011645174
  • 2014年04月15日 18:27
  • 1251

自定义VFP主窗口背景图片填充方式

*-------------------------声明-------------------------Start**描述:自定义VFP主窗口背景图片填充方式*版本:V1.0.0*作者:狂龙娇子(Q...
  • Sn_Keys
  • Sn_Keys
  • 2010年04月02日 22:34
  • 2104

用UpdateLayeredWindow实现任意异形窗口

[转]http://qjw.qiujinwu.com/blog/2012/11/03/UpdateLayeredWindow_window/ 对于SetWindowRgn,它通过一个Rgn来设置区域...
  • heluan123132
  • heluan123132
  • 2015年06月02日 10:39
  • 567

WIN API-VFP获取第三方窗体的控件信息(句柄,窗口ID,进程ID,类名,标题)

*十豆三 2010-02-09 *函数返回与指定字符创相匹配的窗口类名或窗口名的最顶层窗口的窗口句柄。这个函数不会查找子窗口。Declare Long FindWindow In WIN32API S...
  • apple_8180
  • apple_8180
  • 2010年03月27日 11:47
  • 8191

VFP中DeskTop、WindowType、ShowWindow三个表单属性

1."ShowWindow"是规定表单在"显示方面的从属关系"的属性 ShowWindow属性实际上仅有两种选择:"作为顶层表单"与"在顶层表单中"。为了表达方便,我们把具有前者属性值的表单称为"顶层...
  • ljllljlsy
  • ljllljlsy
  • 2016年06月26日 18:02
  • 912

MFC中异形分层窗口设计

关于异形窗口,网上有很多关于这方面的教程,杂七杂八,有很多的问题,比如异形窗口控件不显示等等,关于复杂异形窗口,可以通过分层窗口来解决。下面说一下设计思路。 方法/步骤 ...
  • learner198461
  • learner198461
  • 2015年02月06日 12:48
  • 978

vfp中MESSAGEBOX( )函数的使用

MESSAGEBOX() 函数可以显示一个自定义的对话框。常用作提示之用,也可以作一些简单的选择,比如“确定”、“取消”等,程序中经常用到的一个函数。语法格式:MESSAGEBOX(提示信息[,对话框...
  • heronivy
  • heronivy
  • 2007年12月22日 15:51
  • 2607

关于Vfp表单全部控件控制【thisform.setall】!(经典)

来源csdn论坛: thisform.setall thisform.setall("enabled",.f.,"textbox") SQL code setall 方法 为容...
  • dxnn520
  • dxnn520
  • 2012年06月05日 09:51
  • 4293
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在VFP中制做异型窗口
举报原因:
原因补充:

(最多只允许输入30个字)