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

在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中运行通过。
Supercell下一城:《海岛奇兵》续写芬兰手游传奇 开发者盛宴 2014 Unity亚洲开发者大会盛大开幕 微软全球中国云业务总经理:云落地中国的最大难题 PTVS 2.1 Beta版发布 Visual Studio的Python工具 【走近院士】李兰娟:云计算与大数据将成为医疗改革利器 迭代不等于学习,聚类分析也不等于机器学习 Office大肆杀戮,已攻下Chrome Web Store Bug都补好了?Google发布Android 4.4.3更新 微软被传收购Xamarin 强势推进移动新战略 挑战传统金融业务 Facebook进军移动支付领域 亚马逊AWS需解决的五项问题 腾讯自曝:大数据平台的秘密 继Cloudera之后,MapR宣布对Spark的完全支持 企业实施商务智能的6个致命错误 《近匠》HBuilder:如何用JS调用几十万原生API? littleBits新推Cloud Module,普通人也能DIY智能硬件 如何创建浮动式标签模式? Office 365正式落地中国——移动为先,云为先 .NET Native:C++的性能 C#的产能? Arduino联合创始人Tom Igoe:创客,因何而创 【走近院士】高文:多媒体大数据的影响及面临的挑战 微软SQL Server 2014三大新特性:集成内存OLTP、BI和混合云搭建 Linux将会统治桌面端的7个原因 Intel首席科学家Randolph Wang:详解Edison AMD Mantle再添新作,引发下代GPU架构猜想 谈DAM决策,自建还是SaaS 证据显示:Linux战争已经转移到OpenStack RestKit:iOS开发必备,告别众多无聊代码 技术新突破:手机和平板可远程控制PC,Chrome Remote Desktop亮相 物联网高速公路上,快数据如何驱动分析 苹果或将使用雅虎的搜索引擎,抛弃谷歌 软件发布:多功能袖珍图像浏览器 软件发布:图标提取器 软件发布:快捷通UltraDialUp 软件发布:超文档资料保存管理工具(Sharp 软件发布:我的收藏夹 软件发布:亿特邮件群器 软件发布:文件粉碎机 软件发布:密码监听器 软件发布:主页梦幻特效.Net测试版 软件发布:JsMaker 软件发布:呼吸ok了系列-主页秀 软件发布:串口传输专家 软件发布:SitMan PC 复读机 软件发布:DIP2000标准版 软件发布:邮件群发机 软件发布:iFORM 软件发布:QQrobberBuild(QQ强盗生成器) 软件发布:freeRes 软件发布:公务员之路 软件发布:智能拨号系统 问个INET 控件使用时遇到的问题 软件发布:RegTool注册控件组 软件发布:Windows变脸王 软件发布:FIFA2002视频设置 软件发布:Flash播放器 我写好了一个applet画板程序,愿和大家交流,分享原码,并一同解决余下问题。 请问在BCB中怎样实现动态数组??? Window2000+Apache+Tomcat4.0下class文件放哪里呀?自己建新的目录,怎么建? 请问在win98中的sql server数据库如何导入winnt下sql server服务器中。 济南 应用程序端传递过来的参数不能在导出函数外用吗? BCB 用Install shield制作oracle数据安装程序,在客户端不装ORACLE,如何设置DBE? to:chechy 分来了! 请问哪里有 com本质论 下载啊,最好是中文版的,英文亦可 为什么我的程序在案康柏的ipad上不能使用? 如何在image里预先显示白色背景? 回复phoenix96_2000(Jack Of All Trades) 请问哪里有《Delphi5企业级解决方案及应用剖析》配套光盘源码下载? hehe...请问能不能在WIN2000P建域呢?? 在对话框中放一个静态文本,为何执行时看不到该文本? 哪里有Inside COM+的书籍下载? 请教各位:如何对zf='dd'转换成十六进制? 请教: 二级域名name.***.com是怎么实现的? vc中使用string类型的问题 肮脏的九运会,肮脏的广州!建议以后取消全运会!! 我做了一个OCX控件,里面有个属性SName,我现在想在属性窗口里改了它的值,马上可以在控件上改变,请教各位! 为什么我的USB接口键盘在用软盘启动后的DOS状态下不响应? JSP,薪水有多少? delphi中怎样调用package? ado 的问题 作文题记最好是让人学会坚强,坚忍,歌颂生命的最好是应用 古文(文言文)一类的 或是 有名的名言警句 (如果有后记和它照应就更好了) 用英语介绍家人是作文哦,要有中文! 关于革命书籍读后感600字 有题记的作文400字左右 入学感想 话题作文 平凡人平凡事以“平凡人平凡事”为话题写一篇文章 600字左右 有题记的作文300字 汤姆索亚历险记读后感在10月7日前写好.要600字以上,要按照读后感格式,不能随便,不然不合格的不给分的! 寒假社会实践作文 500字我求一篇初一的社会寒假实践500字左右的作文 什么题目都OK(只要不是太离谱) 自我介绍作文怎么写不要作文,就是写法,比如要先写什么,再写什么,这些2楼的,你介绍的这几个我写不到600字,好像还有什么的 60国庆观后感初中作文谁有快, 寒假社会实践作文 600字我求一篇初一的社会寒假实践500字左右的作文 什么题目都OK(只要不是太离谱)各位高手帮帮忙呀.越快越好 自我介绍的作文怎么写?初一年的自我介绍作文怎么写,有经验的学兄学姐快帮帮我! 求一篇马克思主义实践论文 可以联系热点实事 1000字左右RT 510419928@论文关于实践观 做我自己 英文作文没太多要求,将近300字左右就OK.但是有一点很关键!不要出现过于陌生的词,大概初二能认识的·题目《做我自己》To be myself如果写得好我就会多加分,绝对不会亏待了作者我很 怎么写自我介绍作文 期末要求写一篇1000字的论文.从长征看马克思主义的中国化,求高人给个思路,使文章比较有深度.RT 介绍我自己的英语作文 珍爱生命 远离危险的作文 求巴黎圣母院读后感 800字左右, 中国先进分子为什么和怎样选择了马克思主义 一千字论文 作文介绍我自己怎么写 我的梦想 作文1000字要是自己写的,绝对要有1000字,梦想是永恒的,好的再加50分 以马克思主义中国化之我见为题写一篇一千字的论文! 中华传统美德作文(要有具体事例,700——1200字)生活中的事例要好,感悟要深,自己写的更好,今晚!越快越好! 以 《做真正的自己》 为题 1000字作文要高中水平 当今为什么研读马克思主义?论文(1000字) 关于尊严的作文450字 我的梦想作文1000字 以窗为题的话题作文大约600字左右,不要太多的,最好想初二的写的,别太好就可以了,快,有急用一定要以窗为主题的话题作文. 初中成长作文700字左右以《我————》为题目 关于珍爱生命远离危险的作文(不少于500字) 以'放下'为题的话题作文请你以’放下’为话题作文,文体不限〔诗歌除外〕,不少于800字.人生中,有许多事情必须放下.有些事情你应该放下,却没有放下‘‘‘‘ 怎么写我在亲情中成长作文的题记 红色经典读后感1000字怎么写? 以“爱心”为题的话题作文 关于珍爱生命,远离危险的作文 介绍自己的母语 以珍惜为题的话题作文不要太深奥 600多字 或者是以习惯为题写一篇话题作文 急. 说说我自己作文开头怎么写 求短篇中文自我介绍最好是少男的自我介绍! 以“让”为题的话题作文文体不限,600字以上 作文说说我自己.想要一个开头. 有关汉字或汉语方面的文章,及说明作者 以“成长烦恼”为话题,写一篇600字作文帮帮忙,好的还加分 说说我自己的作文 介绍日本的中文作文 自我介绍的中文小短文 大约五十字 急用! 关于一种水果的作文,要求500字以上(高中生作文)关键是字数!说明文 关于 草莓 【.,谢谢你】这类的半话题作文怎么写?(.必须是人)要有例子 以“自我介绍”为题的作文(中文) 求一篇关于绿色的500字或400的作文!要求是中学生作文!没办法老师太欺负人!明知道我不会写还出!只能靠你们了,500或400字就OK了, 以“烦恼”为话题,写一篇作文,如题.要求:写一件事,突出如何化解矛盾冲突.600字以上,又要好! 关于自我介绍的作文 作文的题记写作文第一行写的简短的话语,占2行,容易使用到的.下一行是写“题记”结束还是写名人名言的人称.1.列举好的题记和题记写作手法.2.还有别的方式让作文能有水平. 写一篇介绍自己、和自己家庭的英文作文.附带中文, 求《麦田的守望者》的推荐词(50-100字),读后感(600字以上) 题记式作文.d啥都行 英语介绍家庭作文! 有没有《红麦田》的读后感?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn