在VFP中制做异型窗口
来源: 作者: 出处:综艺读书 2006-10-11
周鸣扬
|
|
|||
一、实现原理
在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
4.运行该表单,结果如图1所示。
图1
另外,如果你还想设计出其他形状的窗口,只需要将Form1中的Activate事件代码中的CreateRoundRectRgn(0,0,200,200,200,200)做相应的修改。比如你想要建立一苹果形窗口,将该语句改为: CreateRoundRectRgn(0,0,200,200,90,1800)即可。
通过本文所介绍的程序,以前看起来很困难的事情转眼间就做到了。试试看吧,你能够做出更加丰富多彩的异型窗口!进入讨论组讨论。
相关图文阅读
频道图文推荐
相关专题
最新技术文档
·用FoxWeb在网上快速发布你的FOXPRO数据库 11-03
·用Foxpro制作Windows输入法码表 11-03
·用FoxPro生成HTML文件 11-03
·下载和上载远程视图数据 10-30
·为Visual FoxPro应用程序增加文件压缩功能 10-30
·为VFP添加循环微调控件类 10-30
·为FoxPro中的弹出式菜单增加自学习功能 10-30
·通过编程运行拨号网络连接 10-29
·谈谈在基于Foxpro的MIS中实现提示、帮助与询问 10-29
·谈谈VFP和SQL SERVER搭配做C/S系统 10-29
·用Foxpro制作Windows输入法码表 11-03
·用FoxPro生成HTML文件 11-03
·下载和上载远程视图数据 10-30
·为Visual FoxPro应用程序增加文件压缩功能 10-30
·为VFP添加循环微调控件类 10-30
·为FoxPro中的弹出式菜单增加自学习功能 10-30
·通过编程运行拨号网络连接 10-29
·谈谈在基于Foxpro的MIS中实现提示、帮助与询问 10-29
·谈谈VFP和SQL SERVER搭配做C/S系统 10-29
站内各频道最新更新文档
站内最新制作专题
|
|||
| ·ACDSEE专题教程-下载使用 ·迅雷专题教程-下载使用 ·Windows XP频道 ·Windows Vista频道 ·Windows 2000频道 ·win2003频道 ·Freebsd频道 ·Oracle频道 |
·Linux频道 ·Windows频道 ·邮件服务器专题 ·协议大全 ·数据恢复指南教程 ·FreeBSD使用教程 ·Linux数据库宝典 ·Linux基础知识 |
||
热门关键字导读
站内频道文章精选
| · 秘密:Vista隐蔽的动态屏保 · 腾讯开发新电子宠物--QQ熊 · 惠普否认2999元PC有价无货 |
· 驱逐Win系统“流氓”文件 · WinXP中获取未使用的IP地址 · 尝试format C:格式化硬盘? |
| · 在DOS下恢复回收站中的文件 · 拯救WinXP崩溃的救命稻草 · Linux系统中超级权限的应用 |
· 搜狗PK谷歌:谁能代言拼... · 昨日重现,一键GHOST轻松.. · 实现Web迅雷在空闲时杀毒 |
| · AVIFile函数制做AVI文件 · VC中链接动态链接库的方法 · 熊猫烧香核心源码(Delphi) |
· DateDiff函数祥解 · JavaScript去除空格的三种 · js效果 图片加载进度实时.. |
| · SQL Server数据库优化方案 · Oracle的初学者入门心得 · JSP连接Mysql数据库 |
· Photoshop为美女做艺术处理 · 用Freehand创建发光字特效 · 设计自己的个性QQ动态表情 |
百度推荐,商机无限
搜索您感兴趣的内容




