ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

[复制链接]

TA的精华主题

TA的得分主题

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

虽然看的人不多,但是还是有人看 ,我就继续下去.(顺便庆祝今天换了个头,呵呵)
上回说道如何做局部透明的窗体,这是一个比较深的话题了.
要看懂本课的内容是需要一定的基础的,看不懂的也没关系,就当是开开眼界吧,
也见识一下API的强大.

上次讲了SetLayeredWindowAttributes这个函数,它的缺点就是不管三七二十一一概透明.
其实api里还有一个更强大的函数UpdateLayeredWindow,这个函数是通过用一副32位带Alpha
通道的位图来更新窗口,你可以精确的设定每一个象素的Alpha值(就是透明度),这样你想要哪里
透明就哪里透明.此函数的结构如下:
UpdateLayeredWindow hwnd:HWND; // 窗口句柄
                    hdcDst:HDC; // 目标 DC
                    ptDst:pPoint; // 目标的 TopLeft
                    Size:pSize; // 显示 Size
                    hdcSrc:HDC; // 源 DC
                    ptSrc:pPoint; // 源 DC 的 TopLeft
                    crKey:COLORREF; // 透明颜色值
                    Blend:pBlendFunction; // Alpha 混合函数
                    dwFlags:DWord // 一组标志位常量
DC:Device Context 设备描述表或设备上下文,是GDI内部保存数据的一种数据结构,此结构中的属性
内容与特定的输出设备(显示器,打印机等)相关.
什么是GDI?GDI是Graphics Device Interface的缩写,含义是图形设备接口,它的主要任务是负责
系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出。是api的一个子集.
呵呵,要说的概念还真多.对于不熟的朋友来说一时也弄不明白.如果真的想学,可以看看有关的书籍.
否则了解一下就ok了.
dc也有句柄就是hdc.最后一个参数blendFunction 是一个BLENDFUNCTION结构。
Private Type BLENDFUNCTION
        BlendOp   As Byte
        BlendFlags   As Byte
        SourceConstantAlpha   As Byte
        AlphaFormat   As Byte
  End Type
BLENDFUNCTION结构控制源和目标位图的混合方式,它的BlendOp字段指明了源混合操作,
但只支持 AC_SRC_OVER,即根据源alpha值把源图像叠加到目标图像上。
OpenGL的alpha混合还支持其他的方式,如常量颜色源。下一个字段 BlendFalgs必须是0,
也是为以后的应用保留的。最后一个字段AlphaFormat有两个选择:0表示常量alpha值,
 AC_SRC_ALPHA表示每个像素有各自的alpha通道。

有个不幸的消息,在我将代码从vb移植到vba的时候失败了,几经调试未成功,好像是在动态
创建32位的位图时不行,我把代码放上来,希望有高手可以解决.在vb是没问题的,下面有一个
别人做的效果图;

GEtZYC2x.rar (196.24 KB, 下载次数: 657)


最后,很遗憾的告诉你,UpdateLayeredWindow仍然有缺点,就是更新过的窗口上面的控件都看不见了。
但是还可以响应鼠标事件,看来要做局部透明的窗体真不容易啊。只有另寻他法了(等我学完《windows
图形编程》在说吧。)


预告:如果你认为以前各课都没有什么实用价值的话,那么下一课的内容将非常实用,敬请关注!





预告:如果你认为以前各课都没有什么实用价值的话,那么下一课的内容将非常实用,敬请关注!




[此贴子已经被作者于2007-1-23 13:17:59编辑过]

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

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

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

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

LDcRaP5Y.rar

10.54 KB, 下载次数: 399

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

BL8cpCMD.rar

242.05 KB, 下载次数: 483

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

hdthlVqN.rar

210 KB, 下载次数: 442

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

TA的精华主题

TA的得分主题

发表于 2007-1-23 12:57 | 显示全部楼层

不知为何,在我的电脑上什么也看不到,彻底透明了

TA的精华主题

TA的得分主题

发表于 2007-1-23 13:05 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-1-23 13:20 | 显示全部楼层
QUOTE:
以下是引用qq1234567在2007-1-23 13:05:51的发言:

版主真厉害!

感谢感谢!

我可不是版主,呵呵

网络太垃圾,刚才附件没传完,现在传完了,有2个分卷。

TA的精华主题

TA的得分主题

发表于 2007-1-23 15:17 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
QUOTE:
以下是引用hxhgxy在2007-1-23 12:57:43的发言:

不知为何,在我的电脑上什么也看不到,彻底透明了

我这里也是,所有东东全部透明,请修正!

另外,外带图片可以改为用窗体中的图片控件或者窗体底纹图片吗?

即兰色处不用,直接处理窗体中的控件.

Private Sub UserForm_Initialize()
    Dim GpInput As GdiplusStartupInput
    GpInput.GdiplusVersion = 1
     If GdiplusStartup(token, GpInput) <> 0 Then
        MsgBox "Fehler bem laden von GDI+!", vbCritical
        Unload Me
    End If
    MakeTrans (ThisWorkbook.Path & "\fdj.png")
End Sub

[此贴子已经被作者于2007-1-23 15:32:05编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-1-23 15:59 | 显示全部楼层
QUOTE:
以下是引用andysky在2007-1-23 15:17:50的发言:

我这里也是,所有东东全部透明,请修正!

另外,外带图片可以改为用窗体中的图片控件或者窗体底纹图片吗?

即兰色处不用,直接处理窗体中的控件.

Private Sub UserForm_Initialize()
    Dim GpInput As GdiplusStartupInput
    GpInput.GdiplusVersion = 1
     If GdiplusStartup(token, GpInput) <> 0 Then
        MsgBox "Fehler bem laden von GDI+!", vbCritical
        Unload Me
    End If
    MakeTrans (ThisWorkbook.Path & "\fdj.png")
End Sub


第一个代码我已经说了,我没有移植成功啊,是请高手解决的。

第二个问题我在文中已经说明了 ,vb 和vba 是不支持png格式的图片的,你是插不进去的。只有用api载入。

TA的精华主题

TA的得分主题

发表于 2007-1-23 19:25 | 显示全部楼层
跟一贴 5PHW6fvi.rar (238.1 KB, 下载次数: 203)

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

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

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-1-24 10:33 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2007-1-24 10:58 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2007-1-24 11:13 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-27 13:46 , Processed in 0.045519 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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