说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

在VB中利用API实现窗体的平滑显示

HTML文档下载 WORD文档下载 PDF文档下载
在VB中利用API实现窗体的平滑显示


 Win98的一个新功能是窗体能够平滑显示,那我们是否能编程来实现这种功能呢?答案是肯定的。首先讲述一下原理,其实我并没有让窗体本身平滑地显示,而是在窗体显示之前在窗体的位置上画一系列的矩形,利用视觉暂留让人以为是窗体在从小变大。
  下面就用VB来实现这种功能。
  建立两个窗体form1和form2,在form1上添加如下控件:由五个optionbutton控件组成的控件数组,index为0-4,caption属性分别为“从中间扩散”、“右上到左下”、“左上到右下”、“右下到左上”和“左上到右下”,一个commandbutton,caption属性为“显示窗体”, 添加一个模块其中代码如下:
   Option Explicit
  `声明所用的API函数、常量和变量
  Public Declare Function GetDC Lib “user32” (ByVal hwnd As Long) As Long
   Public Declare Function Rectangle Lib “gdi32” (ByVal hdc As Long, _
   ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2_
   As Long) As Long
   Public Declare Function SelectObject Lib “gdi32” (ByVal hdc As Long, _
   ByVal hObject As Long) As Long
   Public Declare Function DeleteObject Lib “gdi32”(ByVal hObject As _
   Long) As Long
   Public Declare Function ReleaseDC Lib “user32” (ByVal hwnd As Long,_
   ByVal hdc As Long) As Long
   Public Declare Sub Sleep Lib “kernel32” (ByVal dwMilliseconds As Long)
   Public Declare Function CreateSolidBrush Lib “gdi32” (ByVal crColor As_
   Long) As Long
   Public Declare Function GetBkColor Lib “gdi32” (ByVal hdc As Long) As Long
   Public hbrush As Long, hdc5 As Long
   Public dx As Long, dy As Long
   Public rx1 As Long, rx2 As Long, ry1 As Long, ry2 As Long
   Public i As Long, j As Long, bcolor As Long
   Public ind As Integer
   Public DispCnt As Long
  
  Public Sub showform(win As Form, ind)
   DispCnt = 60 `画几个矩形后显示窗体
   `下面这段代码用来获得窗体颜色,不用me.backcolor的原因是窗体颜色不一定是系统调色板的颜色,如果用me.backcolor的话颜色可能会不准。
   hdc5 = GetDC(0)
   bcolor = GetBkColor(win.hdc)
   hbrush = CreateSolidBrush(bcolor)`设定刷子颜色
   Call SelectObject(hdc5, hbrush)
   dx = win.Width \ (DispCnt)
   dy = win.Height \ (DispCnt)
   j = 1
   Select Case ind
   Case 1
   dx = dx \ 2; dy = dy \ 2
   For i = DispCnt To 1 Step -1
   rx1 = (win.Left + dx * (i - 1)) \ Screen.TwipsPerPixelX
   ry1 = (win.Top + dy * (i - 1)) \ Screen.TwipsPerPixelY
   rx2 = rx1 + dx * 2 * j \ Screen.TwipsPerPixelX
   ry2 = rx1 + dy * 2 * j \ Screen.TwipsPerPixelY
   j = j + 1
   Call Rectangle(hdc5, rx1, ry1, rx2, ry2)
   Sleep (1); Next i
  Case 2
   For i = DispCnt To 1 Step -1
   rx1 = (win.Left + win.Width - dx * j) \ Screen.TwipsPerPixelX
   ry1 = win.Top \ Screen.TwipsPerPixelY
   rx2 = (win.Left + win.Width) \ Screen.TwipsPerPixelX
   ry2 = (win.Top + dy * j) \ Screen.TwipsPerPixelY
   j = j + 1
   Call Rectangle(hdc5, rx1, ry1, rx2, ry2)
   Sleep (1); Next i
   Case 3
   For i = DispCnt To 1 Step -1
   rx1 = win.Left \ Screen.TwipsPerPixelX
   ry1 = win.Top \ Screen.TwipsPerPixelY
   rx2 = rx1 + dx * j \ Screen.TwipsPerPixelX
   ry2 = rx1 + dy * j \ Screen.TwipsPerPixelY
   j = j + 1
   Call Rectangle(hdc5, rx1, ry1, rx2, ry2)
   Sleep (1); Next i
   Case 4
   For i = DispCnt To 1 Step -1
   rx1 = (win.Left + dx * (i - 1)) \ Screen.TwipsPerPixelX
   ry1 = (win.Top + dy * (i - 1)) \ Screen.TwipsPerPixelY
   rx2 = (win.Left + win.Width) \ Screen.TwipsPerPixelX
   ry2 = (win.Top + win.Height) \ Screen.TwipsPerPixelY
   j = j + 1
   Call Rectangle(hdc5, rx1, ry1, rx2, ry2)
   Sleep (1); Next i
   Case 5
   For i = DispCnt To 1 Step -1
   rx1 = (win.Left) \ Screen.TwipsPerPixelX
   ry1 = (win.Top + win.Height - dy * j) \ Screen.TwipsPerPixelY
   rx2 = (win.Left + dx * j) \ Screen.TwipsPerPixelX
   ry2 = (win.Top + win.Height) \ Screen.TwipsPerPixelY
   j = j + 1
   Call Rectangle(hdc5, rx1, ry1, rx2, ry2)
   Sleep (1); Next i
   End Select
  Call ReleaseDC(0, hdc5)`释放设备描述表
  Call DeleteObject(hbrush)`删除刷子
  End Sub
  在form1中输入如下代码
  Private Sub Command1_Click()`显示窗体
  Unload Form2
  Load Form2
  Form2.Show
  End Sub
  
  Private Sub Form_Load()
   ind = 1`初始化参数
  End Sub
  
  Private Sub Option1_Click(Index As Integer)
  Select Case Index
   Case 0
   ind = 1
   Case 1
   ind = 2
   Case 2
   ind = 3
   Case 3
   ind = 4
   Case 4
   ind = 5
   Case 5
   ind = 6
   End Select
  
  End Sub
  在form2中输入如下代码
  Private Sub Form_Load()
   Call showform(Me, ind)
  End Sub
  本程序调用了一些有关系统和绘图的API函数,有利于大家进一步了解API函数的功能。本程序在vb5企业版,Win98中运行通过。
为移动而设计之信息架构篇 难逃厄运:Zynga将关闭Draw Something母公司OMGPOP 直接拿来用!最火的iOS开源项目(一) 是时候抛弃Eclipse转向IntelliJ了 Arrow:轻量级的Python时间日期库 编程语言API,你最青睐哪一款? 推动新输入方式发展:英特尔为感知计算设1亿美元基金 AWS到底有多大?目前看来有158000台服务器 C语言实现树的动态查找 第五届中国云计算大会于北京隆重举行 改变企业移动化:新Google地图API支持用户定制 诺基亚旗舰手机EOS真机图曝光 配备“巨型”摄像头 走进豆瓣:豆瓣的技术架构与团队文化分享 加速Web开发的10款HTML5工具 微软式微?AMD、英特尔等开始疏远Windows 语音技术现状:四千万突破语音产业的技术壁垒? 万维网联盟W3C推荐Web性能API 微软郑子颖:Windows Azure如何支持开源系统和软件? EMC 叶成辉:软件定义数据中心实现统一、开放的管理 百度云主任架构师 侯震宇:云终端开启数字生活 中国工程院院士 倪光南:中国云计算在全世界份额远超3% 信息图:未来的企业移动培训应用与技术 “2013年度中国优秀开源项目征集”活动最后三天 为什么开发者倾向于使用杂乱无章的免费工具 EMC合作伙伴销售经理杜术清:实现云的三种途径 开发者想走向海外:你融入老外的圈子了吗? 前微软工程师:美国监控和直接访问服务器?这不太可能 代码、TDD速查表 如何选择前端架构:服务器端HTML vs. JS部件 vs.单页Web应用 世界上最高深的Android特洛伊病毒 招聘iOS开发,老板必问的5个问题 重装WINDOWS200后ORACLE的处理办法 用backup database备份数据库的时候如何获取SQL返回的操作信息 基本性能调整Basic Performance Tuning 不知怎么好,又相似情况给点建议 菜鸟提问,请各位大哥帮忙!在线等,参与有分!! 那位大哥给我一段datagrid排序的代码 .mdb文件如何转换成为.asa文件? 请问如何保存绘制的图形? 有一个框架包含2页,左侧页面中有很多复选框。如何钩选一个复选框然后,马上就提交到右侧框架的页面中。 用过压缩控件zipTv的兄弟进来瞧瞧!!! 请问如何设置srcollbar为xp的样式? 求助ddlb里面的事件触发问题。 请问会delphi,c++builder,Vc 现在去北京好找工作吗,工资应该会是多少阿,谢谢 RPC服务选项变灰色,与注册表的哪项有关? 想学LINUX,请推荐好书 能不能捕获某个窗口的图像,即使在这个窗口被其他窗口挡住的情况下? 找mp3 test 程式,出測試方案(請相關高人指點) 我来搬救兵的:导出数据窗口数据,然后图片(工具栏)不可以显示。 win2000安装问题 c在c++中出现的奇怪问题,请高手帮忙解答 MSMQ如何在从远程外网取消息队列的消息?? 用sql语句来对数据的随机读取(在线等.......) 使用ICS共享上网,ICS会自动给客户机分配IP,如何知道这个IP是多少? 一个控制窗体不能通过鼠标改变大小的问题 这是什么 wrox 的书的源码下载怎没有-up有分 求助,JSP+Crystal Report9.22问题。怎么导出EXCEL格式 CSDN的朋友,您如果有时间,给我写一个,快速傅立叶变换的程序把。 二叉树问题 谁对zope,cmf 有研究,谈谈设计思路? 问一下用过VB的人几个问题,谢谢先 关于显示千分位的问题 win98拨号服务器问题 你竟然不回我的短信! 如何在Datagrid的最后追加一行,这一行放多个文本框,用来添加新数据 谁有可垂直居中的QRLabel? 怎样通过程序模拟网页post数据到一个servlet? wrox 的书的源码下载怎没有-up有分 《我们共同的容闳》专辑明天在央视国际频道播出 程序发布问题,大哥大姐来帮忙呀 在线咨询:用ATL做ActiveX控件,能不能让控件是个多文档界面程序。 谁记得这道题是怎么解答的? 申请www开头的域名都是收费的吗 苦恼!考研还是工作! 短信产品:CMPP接口、SGIP接口、CMPP代理网关、计算机与手机连接的短信群发 你是不会知道的!! acrobat pdf 不能打印 怎样使程序发生异常时不弹出带红叉的窗口,异常可采用日志文件记录? 我下载了mysql-3.23.57-win.zip 安装在win2k server下为何不能用? 妹妹求救:用什么软件可以编辑.dll文件! 帮帮忙 麻烦的数学,要用五年级上册的分数知识来答题淘气和笑笑两人同时折纸船,淘气5 min折了18个,笑笑3 min折了14个,他们每做一个纸船各需多少分钟?谁做得快? 一条船上装了45只羊,32头牛,问这条船的主人今年几岁?一道脑筋急转弯 怎么完整表达停下某事去做某事?stop doing sth to do sth?请看清楚,我还想表示他停下的是什么事情,不仅是他去做其它事了。 去看电影 初中英语表达 有哪几种 发一些古诗鉴赏的题目,邮箱是wangluoyongde123@163.com(要题型比较丰富) 什么是特殊党费5656 特殊党费是怎么回事啊?拜托了各位 谢谢 一般说来,安静环境的噪声标准小于? 帮忙写一篇初中英语表达是一道初中英语书面表达题:你叫王平,是一家餐厅的经理,你想招聘一位服务员,你的电话是7865431,请你写一篇招聘广告,说明你对服务员的要求. 请教一道初中英语关于数量表达的选择题This is an ________building.A.eighty eight meters high B.eighty-eight-meter-high 杜牧是什么时候的人 美国六大互联网巨头致信国会要求改革监欧盟成立20周年一体化频遭挑战 经济莫斯科市民发起“落叶保卫战”荷兰发现139幅二战被纳粹掠夺珍贵油巴西前首富申请破产保护 身家蒸发99希腊前外长称希情报报门曾监视美国大使香港警方破获今年最大宗非法外围赌博案监察部发布《监察机关特邀监察员工作办规避新规企业花样百出 同工同酬成“纸中注协发布6项审计准则问题解答 明年直拍悉尼社区万圣节前夕:化妆成小鬼儿阿克苏“枣”寻千名好人走进浙江金华 广州上周查扣五类车万余辆 行政拘留超广西人社厅到马山县开展精准扶贫识别工新疆举行棉纺行业职业技能竞赛 培育一广东国资委四季度将寻求4个壳资源 注提前还清房贷要收罚金 律师:签合同时那些IPO无果 转投新三板的明星:杨手机销号都两年了 未解绑的银行卡咋丢网络支付安全隐患多 你还敢放心的网购征信牌照为啥迟迟不发?P2P未来将是大小共存的时代玄道修仙录唯我独魔哈利波特之守护九州牧云录破军战魂传说暧昧三国天蓬纵横再世和绅代号刀锋死神游乐园日月重光定西旅游芒康旅游巴塘旅游敦化旅游长海旅游珲春旅游贵德旅游济源旅游云浮旅游博尔塔拉旅游石狮旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘