Chinaunix首页 | 论坛 | 博客
  • 博客访问: 208855
  • 博文数量: 21
  • 博客积分: 1546
  • 博客等级: 上尉
  • 技术积分: 290
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-10 14:54
文章分类

全部博文(21)

文章存档

2020年(1)

2019年(3)

2015年(2)

2014年(1)

2011年(1)

2009年(7)

2008年(4)

2007年(2)

我的朋友

分类: 数据库开发技术

2011-12-10 08:59:14

在浏览某些网页中, 当跳出对话框让用户选择的时候, 为了让对话框醒目, 常常让背景变暗, 如同覆盖上一层黑薄膜. 如同以下效果:
这种效果在VFP中可以很容易实现. 原理是在背景表单上覆盖一层半透明表单
首先定义一个表单 FM_COVER, windowType一定要是无模式的 (modeless)
  1. DEFINE CLASS form1 AS form


  2.     Top = 0
  3.     Left = 0
  4.     Height = 1000    &&足够大
  5.     Width = 1600
  6.     Desktop = .T.    && 一定要为T, 否则无透明效果
  7.     DoCreate = .T.
  8.     BorderStyle = 0   && 无框
  9.     Caption = "Form1"
  10.     TitleBar = 0      && 无标题
  11.     BackColor = RGB(80,80,80)   && 背景为暗黑色
  12.     Name = "Form1"


  13.     PROCEDURE Init
  14.         DECLARE SetWindowLong In Win32Api AS _Sol_SetWindowLong Integer, Integer, Integer
  15.         DECLARE SetLayeredWindowAttributes In Win32Api AS _Sol_SetLayeredWindowAttributes Integer, String, Integer, Integer

  16.         _Sol_SetWindowLong(THISFORM.hWnd, -20, 0x00080000)
  17.         _Sol_SetLayeredWindowAttributes(THISFORM.hWnd, 0, 200, 2) && 第三个为alpha参数, 设置透明效果,0-255之的一个数

  18.     ENDPROC


  19. ENDDEFINE
在程序启动时候, 先创造表单, 但不显示:
do form fm_cover noshow
 
在需要跳出对话框时, 比如打开一个模式表单时, 前后各加上show和hide语句:
  1. ....
  2. fm_cover.show()              && 背景变暗
  3. do form xxx 或 messagebox(...)   && 这个模式表单的desktop也必须设为.t., 否则会被fm_cover所覆盖
  4. fm_cover.hide()              && 恢复背景
  5. ....
以上代码在VFP8.0, MDI窗口为_screen的条件下测试成功
阅读(2403) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~