ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 11043|回复: 24

[原创]千奇百怪的窗体——第三课

[复制链接]

TA的精华主题

TA的得分主题

发表于 2007-1-19 13:30 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:窗体

上回说到要创建一个毫不规则的窗体是否要画n个图形来拼呢?
这是不可行的,人会疯的.既然画图形不行,那么我们反过来想,
把不想要的图形挖掉不就ok了,这就是所谓的逆向思维了.

api中挖图的方法有很多,比如bitblt函数等.本课重点要介绍的是
etLayeredWindowAttributes函数,有点眼熟把?我在玻璃窗体一贴中
就用到 了他.有人问了,它不是使窗体透明的马?对,但这只是其一,他的
另一个功能就是挖图.这个函数要2000以后的版本才有,呵呵,应该没人还
用98了吧.

下面开始详细解说:
首先看函数名,跟setwindow是不是很像阿,对,只不过它是设置层窗口的属性.
什么是层窗口呢?
在2000以前,Windows系统为了减少刷新时的数据量,采用了剪裁窗口无效区机制  
 也就是说,当某个窗口处于了下层窗口上面时,对于下层窗口被覆盖的区域就会被自

动剪裁掉,在此区域上的绘图操作都立即返回
到了Windows2000,microsoft也认识到透明窗口的重要性,所以提出分层窗口  
之所以叫分层窗口,这因为这种窗口中的图像是位于一个单独的内存位图中的  
当屏幕刷新时,Windows系统负责在桌面图像上叠加分层窗口图像,并将合并结果送往

显存.不明白没关系,别管他.

函数声明如下:
Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal
hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As
Long) As Long
参数:
hwnd 不用说了吧
crKey 色彩关键值
bAlpha 用来设置混合功能,就是透明度了,取值0-255 ,0为完全透明.
dwFlags 控制方式,此参数有两个值,LWA_COLORKEY和LWA_ALPHA.
当取LWA_COLORKEY时,第二个参数crKey才有效,
当取LWA_ALPHA时,第三个参数bAlpha才有效,
要是两个值都有效,就设成LWA_COLORKEY Or LWA_ALPHA.

挖图方法:
你可以直接指定crkey的值,在vb 里如果不知道颜色值可以用getpixel获取
图片上某个像素的RGB值,在vba里比较麻烦,因为窗体里的控件都没有句柄了。
所以还是直接指定的好,在属性里你 可以看到颜色的后面都有一个十六进制的数。
那就是他的值了。

在使用此函数前,要先用GetWindowLong获取窗体的扩展样式,
GetWindowLong(hwnd, GWL_EXSTYLE) ,GWL_EXSTYLE就是扩展样式
然后用SetWindowLong将窗体设成分层样式,才能用。

最后要去掉窗体的标题和边框,直接在窗体内部画个矩形就ok。

下面是效果图:

  9DDWHyUR.rar (14.42 KB, 下载次数: 533)


[原创]千奇百怪的窗体——第三课

[原创]千奇百怪的窗体——第三课

TA的精华主题

TA的得分主题

发表于 2007-1-19 13:33 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-1-22 12:27 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

看的人越来越少了,不知还有没有继续的必要,呵呵。

TA的精华主题

TA的得分主题

发表于 2007-1-22 12:41 | 显示全部楼层
感谢楼主,很需要这样的教程,楼主不要泄气!还有我们支持呢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-1-22 18:50 | 显示全部楼层
QUOTE:
以下是引用ifhwfu在2007-1-22 12:41:07的发言:
感谢楼主,很需要这样的教程,楼主不要泄气!还有我们支持呢!

谢谢,只要有人想看,我就继续,可能是大家觉得api太难了吧

其实我给的都是比较好理解的,也比较实用的api,

api函数学一个是一个,对大家还是有帮助的。

TA的精华主题

TA的得分主题

发表于 2007-1-22 20:00 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

搂主的讲解很细致,底层api函数的学习是很有必要的。支持楼主!

TA的精华主题

TA的得分主题

发表于 2007-3-7 23:15 | 显示全部楼层

我刚看到这么好的帖子

最近在学api,有些东西看书本还真的有点难理解

强烈支持楼主 !

TA的精华主题

TA的得分主题

发表于 2007-3-7 23:21 | 显示全部楼层
另类窗体的先进者,追求窗体的完美主义者!坚持一下。

TA的精华主题

TA的得分主题

发表于 2007-4-19 15:32 | 显示全部楼层
能不能开一个专讲api的帖子或者小版,规整一下,要不象打游击似的,而且零乱,易丢掉好的帖子哈!

TA的精华主题

TA的得分主题

发表于 2007-5-12 09:59 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-3-29 16:21 , Processed in 0.056589 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表