分享
 
 
 

在VFP中制做异型窗口

王朝other·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

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

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有