全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
=相信大家看过许多形状怪异的窗口吧?可是在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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026上半年贵州事业单位联考贵州电子信息职业技术学院招聘4人备考题库带答案详解(a卷)
- 2026中国日报社及所属事业单位招聘国内高校应届毕业生21人备考题库带答案详解(预热题)
- 2026新疆疆粮恒丰粮油食品有限公司招聘20人备考题库附答案详解(培优a卷)
- 2026广西贵港市广耀电力发展有限责任公司招聘22人备考题库附答案详解
- 2026上半年贵州事业单位联考黔东南州招聘948人备考题库含答案详解(综合题)
- 2026内蒙古鄂尔多斯市机关事务服务中心引进高层次和紧缺人才2人备考题库必考题
- 2026广东东莞市麻涌中学招聘临聘教师10人备考题库附参考答案详解(达标题)
- 2026广东广州市中山大学附属口腔医院工勤人员招聘1人备考题库及参考答案详解一套
- 2026河北石家庄平山县人民医院招聘救护车司机人员4名备考题库附答案
- 辐射安全考核试题(核技术利用辐射安全法律法规)及参考答案
- 2026德江县县属国有企业招聘13人参考考试题库附答案解析
- 寻脉山河:中国主要河流与湖泊的空间认知与生态理解-八年级地理教学设计
- 达人精准运营方案
- 四川省凉山州2025-2026学年上学期期末考试七年级数学试题(含答案)
- 语文试题-汕头市2025-2026学年度普通高中毕业班教学质量监测(含解析)
- 2026年浙江高考英语考试真题及答案
- (16)普通高中体育与健康课程标准日常修订版(2017年版2025年修订)
- 质量信得过班组汇报材料
- 医学伦理学案例分析
- 金融科技对商业银行业务的影响研究
- 寒假辅导班招生方案
评论
0/150
提交评论