全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
=相信大家看过许多形状怪异的窗口吧?可是在VB里,系统提供的只是一个矩形的窗体。如何在VB里实现这种异形窗体呢?其实原理很简单。首先,在内存中构建一个想要的图形,再通过API函数将窗体设置为此形状,最后将图片放上去就可以了。关键在于如何构建这个想要的图形。让我们看看下面这个图:。这张图片中既有白色,也有其他彩色,而我们想要的颜色正是除白色以外的其它颜色。我们可以这样想:在内存中创建一幅一样大小的空的图像,然后只把我们需要的颜色(即非白色)输入内存。这样,就可以创建出我们想要的图形了。以上是原理,接下来介绍几个API函数。GetPixel:获取指定对象的某个点的颜色。定义为:Public Declare Function GetPixel Lib gdi32 (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long其中hdc为图形对象的句柄,x、y为坐标。SelectObject:向内存中的指定地点输入图形。定义为:Public Declare Function SelectObject Lib gdi32 (ByVal hdc As Long, ByVal hObject As Long) As Long其中hdc为内存中图形对象的句柄,hObject为欲输入的图像。CreateCompatibleDC:在内存中创建一个与指定对象一样的场景(可以理解为图像)。定义为:Public Declare Function CreateCompatibleDC Lib gdi32 (ByVal hdc As Long) As Long其中hdc为指定对象的句柄。DeleteObject:删除GDI对象(在这里用来删除用完的内存中的图形)。记住,用完后释放资源是非常重要的!定义为:Public Declare Function DeleteObject Lib gdi32 (ByVal hObject As Long) As Long其中hObject为欲删除的对象。CreateRectRgn:在内存中创建一个矩形,返回值为矩形的句柄。定义为:Public Declare Function CreateRectRgn Lib gdi32 (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long其中X1、Y1为矩形左上角的点坐标,X2、Y2为矩形右下角的点坐标。CombineRgn:将两个图形结合为一个图形。定义为:Public Declare Function CombineRgn Lib gdi32 (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long其中hDestRgn为合成后的图形句柄,hSrcRgn1、hSrcRgn2为两个欲合成的图形,nCombineMode为合成模式(包括交集部分、并集部分、并集以外部分、不相交部分,我们需要的是并集部分)SetWindowRgn:使指定窗口形状成为指定形状。定义为:Public Declare Function SetWindowRgn Lib user32 (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long其中hwnd为指定窗口的句柄,hRgn为指定图形句柄,bRedraw为选择是否立即重画窗口。SetWindowPos:为窗口指定一个新位置和状态。定义为:Declare Function SetWindowPos Lib user32 Alias SetWindowPos (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long其中hwnd为目标窗口的句柄,hWndInsertAfter设置窗口的新位置,x、y设置了窗体的坐标,cx、cy设置了窗体的新大小,wFlags设置了窗口的状态。还有一个需要的常数:RGN_OR,是CombineRgn函数的模式之中的并集模式,定义为:Public Const RGN_OR = 2为了方便,我将这些代码制作成了一个函数。以下为代码+注释:Public Sub CreateImageForm(Form As Object, Imagebox As Object, strFile As String, BGColor As Long) Form为目标窗体,Imagebox是放图片用的,strFile是源图片路径,BGColor是不需要的颜色 Dim T As Integer 图形横坐标 Dim R As Integer 图形纵坐标 DoEvents 防止死机 Imagebox.AutoSize = True 使图片框自动调整大小,大小为图片大小 Imagebox.BorderStyle = 0 使图片框无边框,防止边框占用图形位置 Imagebox.Picture = LoadPicture(strFile) 将图片读入图片框。图片框是用来更好的控制窗体大小 Form.Width = Imagebox.Width Form.Height = Imagebox.Height 这两行将窗体大小调整为图片框大小 Imagebox.Visible = False 图片框不是让用户看的 Form.Picture = Imagebox.Picture 图片框没有了,窗体就应该显示图形 Form.ScaleMode = 3 设置度量用的单位 FW = Form.ScaleWidth FH = Form.ScaleHeight 将窗体内部大小赋值给变量,方便读取 Dim DC As Long 内存中图形句柄 Dim BMP As Long 不知道是什么句柄 Dim rgn As Long 临时用的矩形的句柄 Dim rgnTotal As Long 欲得到的图形句柄 Dim SX As Long 搜索用的变量 DC = CreateCompatibleDC(Form.hdc) 创建一个与目标窗体一样大的内存图形空间 BMP = SelectObject(DC, LoadPicture(strFile) 将图形放入刚刚创建的空间中 rgnTotal = CreateRectRgn(0, 0, 0, 0) 初始化目标图形 For T = 0 To FW 逐行搜索 R = 0: Do 搜索前横坐标归零 While GetPixel(DC, T, R) = BGColor And R = FH 当找到需要留下的点后退出搜索 R = R + 1 Wend SX = R 记录下此行所需部分开始的点坐标 While GetPixel(DC, T, R) BGColor And R = FH 当找到需要要除去的点后退出搜索 R = R + 1 Wend If SX = FH 此行结束后进入下一个搜索循环 Next T SetWindowRgn Form.hwnd, rgnTotal, True 将目标窗体形状设置为已经创建好的图形 SetWindowPos Form.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE + SWP_SHOWWINDOW 将目标窗体设置在所有窗口的最顶层,且不能移动、不能改变大小 End Sub最后,还需要注意:有时图片里在需要的部分中也会出现背景颜色(比如说一幅白花的图,背景为白色),此时直接用本函数会造成需要的图片不能完整出现。怎么办呢?这是你需要准备一张底图。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度腻子产品销售与售后服务合同2篇
- 二零二五年度环保技术开发合伙投资合同
- 2024版学校污水处理设施清掏协议版B版
- 忻州师范学院《建筑工程评估基础》2023-2024学年第一学期期末试卷
- 二零二五年水利工程劳务派遣与设备租赁合同3篇
- 西安工商学院《图像处理》2023-2024学年第一学期期末试卷
- 武汉警官职业学院《低频模拟电路》2023-2024学年第一学期期末试卷
- 文山学院《房屋建筑学课程设讨》2023-2024学年第一学期期末试卷
- 二零二五年生物制药技术转让及合作开发协议2篇
- 二零二五年度厂长任期企业战略规划与执行合同2篇
- 2024年沧州经济开发区招聘社区工作者笔试真题
- 中外美术史试题及答案
- 2025年安徽省铜陵市公安局交警支队招聘交通辅警14人历年高频重点提升(共500题)附带答案详解
- 公共政策分析 课件 第8章政策评估;第9章政策监控
- 人教版八年级上学期物理期末复习(压轴60题40大考点)
- 企业环保知识培训课件
- 2024年度管理评审报告
- 暨南大学《微观经济学》2023-2024学年第一学期期末试卷
- 医药销售合规培训
- DB51-T 5038-2018 四川省地面工程施工工艺标准
- 三年级数学(上)计算题专项练习附答案
评论
0/150
提交评论