 
         
         
        
            全文预览已结束            
        
        下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
            Visual Basic三级跳贵州 杨欧阳在小生的印象中,很多人对Visual Basic是不屑一顾的,他们总是固执的认为Visual Basic干不了大事,但事实上,通过Visual Basic本身快捷的开发模式和Windows API的强大支持,我们完全可以在较短的时间做出漂亮的应用程序来。诚然,用Windows API完成一些功能比较罗嗦,但是决不复杂,不信吗?快来跟着小生一起做Visual Basic 三级跳。应该说,一个应用程序给用户最强烈的感受就是这个应用程序的界面,Winamp就是一个最好的例子,如图,这是小生编写的两个小程序,分别演示了透明的窗体和不规则窗口。首先我们来看一下透明窗体是怎样实现的:我们知道,在Windows终生成一个新的窗口时,默认的操作是生成长方形的窗口并且会毫不保留的盖住背景,但是我们同时也知道,Windows的窗口无非是能及时响应消息的图形区域罢了,很自然的,我们,应该能想到将背景拷贝到窗体中即可实现“透命”的功能,在这里我们将用到几个Windows API,他们的定义如下:Declare Function GetDC Lib user32 (ByVal hwnd As Long) As Long 获取窗口句柄Declare Function CreateCompatibleBitmap Lib gdi32 (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long 创建兼容图形设备环景Declare Function CreateCompatibleDC Lib gdi32 (ByVal hdc As Long) As LongDeclare Function SelectObject Lib gdi32 (ByVal hdc As Long, ByVal hObject As Long) As LongDeclare Function BitBlt Lib gdi32 (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As LongDeclare Function DeleteDC Lib gdi32 (ByVal hdc As Long) As LongDeclare Function DeleteObject Lib gdi32 (ByVal hObject As Long) As Long接下来,为工程中的窗体添加一个计时器、一个按钮和下面的代码:Dim nW, nH, myDC, hDestDC, hBMP, myLeft, myTopPrivate Sub cmdEnd_Click() Unload MeEnd SubPrivate Sub Form_Load()获取窗体的宽和高 nW = Me.ScaleWidth nH = Me.ScaleHeight获取背景的句柄 hDestDC = GetDC(0) myDC = CreateCompatibleDC(hDestDC) hBMP=CreateCompatibleBitmap(hDestDC,ScaleX(Screen.Width,1,3),ScaleY(Screen.Height,1,3) SelectObject myDC, hBMP把背景的图像拷贝到窗体中 BitBlt myDC, 0, 0, ScaleX(Screen.Width, 1, 3), ScaleY(Screen.Height, 1, 3), hDestDC, 0, 0, vbSrcCopy myLeft = Me.Left myTop = Me.TopEnd Sub把背景的图像拷贝到窗体中Sub Brush() nW = Me.ScaleWidth nH = Me.ScaleHeight BitBlt Me.hdc, 0, 0, nW, nH, myDC, ScaleX(Me.Left, 1, 3) + 4, ScaleY(Me.Top, 1, 3) + 28, vbSrcCopyEnd SubPrivate Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)结束程序时释放资源是每个程序员都必备的素质 DeleteDC hDestDC DeleteObject hBMPEnd SubPrivate Sub Form_Resize()用Brush过程重画窗体 BrushEnd SubPrivate Sub Timer1_Timer()定时检测,如果窗体位置改变则刷新窗体 If Me.Left myLeft Or Me.Top myTop Then Form_Resize myLeft = Me.Left myTop = Me.Top End IfEnd Sub好了,现在运行程序应该能看到控件好像悬空一样了吧,但是到这里并没有完,因为你很快就会发现它仅仅对刚刚运行时的背景透明,什么意思呢?就是说当你在多个软件间切换时,我们的窗体并不相应的透明而是依然显示原来的背景,这样,我们可以把Form_Load()过程中的那段代码添加到刷新过程中并强行刷新窗体即可,但是我不得不告诉你的是,这样会极大影响比的应用程序的速度,孰轻孰重就由你自己衡量了。接下来,我们来看一看不规则窗口的实现。同样的,我们也要用到几个Windows API:Declare Function ReleaseCapture Lib user32 () As LongDeclare Function SendMessage Lib user32 Alias SendMessageA (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongDeclare Function CreateEllipticRgn Lib gdi32 (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As LongDeclare Function SetWindowRgn Lib user32 (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As LongPublic Const HTCAPTION = 2Public Const WM_NCLBUTTONDOWN = &HA1事实上,上述函数中真正完成创建不规则窗口功能的是SetWindowRgn,但是作为一个任意形状的窗口,由于没有了标题栏,我们必须考虑到窗口的移动,因此需要用到ReleaseCapture和SendMessage,而CreateEllipticRgn则是用来创建弧形区域的,下面是实现图中的演示程序的代码:Private Sub Form_Load()SetWindowRgn hWnd, CreateEllipticRgn(0, 0, 1500, 1200), TrueEnd SubPrivate Sub Form_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)ReleaseCaptureSendMessage hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&End Sub怎么样,够简单吧?当然,你肯定会说这种形状也是有规则的呀,事实上我们也可以创建完全不规则的窗体:比如我们希望用图片中的某一部分来作为游戏主角并且想把它当窗口打整,好了,首先我们要将图片中除主角以外的地放方都填充为某种颜色A,然后把图片设成窗体的背景并用Point方法(记住,这里又是一个技巧,通过在Mouse_Down中使用该方法可以获得鼠标当前点的RGB值,把该值转换为16进制后前两位为Red,中间两位为Green)来识别图片,凡是遇到颜色A的地方就跳过,并把每一行(或每一列)剩下的地方创建成一个区域(用Windows API的CreateRectRgn函数),最后用Windows API的CombineRgn函数把这些区域合并成一个区域并用SetWindowRgn赋给窗体即可,限于篇幅小生就不给出代码,唯一还要提个醒的是最好单独用一个程序来生成        
    温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026国网青海省高校毕业生提前批招聘(约450人)笔试模拟试题浓缩500题及答案详解(名校卷)
- 2026国网内蒙古电力公司高校毕业生提前批招聘笔试参考题库浓缩500题含答案详解(能力提升)
- 2026秋季国家管网集团浙江省天然气管网有限公司高校毕业生招聘笔试参考题库(浓缩500题)附参考答案详解(综合题)
- 2026秋季国家管网集团西北公司高校毕业生招聘笔试模拟试题(浓缩500题)带答案详解(轻巧夺冠)
- 2025国网湖北省电力公司高校毕业生提前批招聘笔试模拟试题浓缩500题及参考答案详解一套
- 2025国网陕西省电力校园招聘(提前批)笔试模拟试题浓缩500题及答案详解(易错题)
- 2026秋季国家管网集团华南公司(广东省管网公司)高校毕业生招聘考试备考题库(浓缩500题)带答案详解(完整版)
- 2026国网湖北省电力公司高校毕业生提前批招聘笔试模拟试题浓缩500题完整参考答案详解
- 2026年牡丹江市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)含答案详解(基础题)
- 2026国网内蒙古高校毕业生提前批招聘(约450人)笔试模拟试题浓缩500题附答案详解(综合题)
- 教学第六章-海洋资源与海洋经济课件
- 三国全面战争秘籍大全
- (完整word版)10J301地下防水图集
- DBJ50-112-2016 现浇混凝土桥梁梁柱式模板支撑架安全技术规范
- 注册会计师全国统一考试《审计》试题及答案
- 城市轨道交通运营管理毕业论文题目
- 武汉近现代重要史迹和代表性建筑
- 2021智慧树答案运动安全与健康-研究生校内课 知到网课章节测试答案
- 《新媒体营销》新媒体营销与运营
- 监理业务手册 (范本)【精选文档】
- 第5章-电感式传感器
 
            
评论
0/150
提交评论