ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 只让窗体透明,而上面的控件不透明

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-4-15 23:45 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:Windows API应用
我想达到只让窗体透明,而让控件不透明,

Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Const GWL_EXSTYLE As Long = -20
Private Const WS_EX_TRANSPARENT = &H20&

Private Sub UserForm_Initialize()

Dim hwnd As Long
Dim rtn As Long

hwnd = FindWindow("ThunderDFrame", Me.Caption) '取得当前窗体的句柄
rtn = GetWindowLong(hwnd, GWL_EXSTYLE)

SetWindowLong hwnd, GWL_EXSTYLE, rtn or WS_EX_TRANSPARENT

doevents

End Sub

但是好像窗体和控件全部都看不见了,不知道要怎么才能只显示出控件,

[ 本帖最后由 tonyibm 于 2009-4-16 15:17 编辑 ]

点评

知识树索引内容:7楼  发表于 2013-9-25 12:51

TA的精华主题

TA的得分主题

发表于 2009-4-16 09:26 | 显示全部楼层
先占个位,等高人相助!!!!!!

TA的精华主题

TA的得分主题

发表于 2009-4-16 10:25 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-4-16 12:46 | 显示全部楼层

考虑容器

窗体是其他控件的容器,窗体看不到,其他自然也看不到了.
就像篮子里有鸡蛋,你想把篮子塞到帘子背面,又想看到鸡蛋.自然mission imposible了.
使用windows自带的窗体应该不行的,除非你自行做窗体.
另外,我个人认为应该更多的关注实用的东西,少停留在界面新颖方面

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-4-16 14:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢楼上的兄弟关注,

这个肯定是可以实现的,我现在发现问题在于,成功运行程序之后,什么也看不到,要用鼠标点击一下窗体上面的控件(比如按钮),被点击的控件才会显示出来,
比如在下面这张截图上,刚开始是什么也看不到的,我摸索着点击了一下按钮所在的位置,按钮就显示出来了,而窗体是透明的,

1.jpg

[ 本帖最后由 tonyibm 于 2009-4-16 14:57 编辑 ]

TA的精华主题

TA的得分主题

发表于 2009-4-16 19:00 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
用userform.controls遍历窗体上的控件获取它们的矩形区域,然后createRectRgn为每个控件创建一个矩形区域,注意磅和像素的换算,还有坐标系统,窗体上控件的left和top是相对于窗体客户区左上角的,还应该加上标题栏高度和窗体边框宽度,这两个数值可以用GetSystemMetrics函数获得,或者在此之前用setWindowLong去掉窗体的边框和标题栏。
然后用CombineRgn r,r1,r2,RGN_OR将这些矩形联合起来生成新的Region区域,最后用setwindowRegion就可以了,注意用deleteobject销毁所有由createXXXrgn和combineRgn生成的region,在一个region被销毁之前,不要将表示它的句柄的变量赋值,否则会造成GDI泄露。

[ 本帖最后由 小fisher 于 2009-4-16 19:05 编辑 ]

TA的精华主题

TA的得分主题

发表于 2009-4-16 19:46 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
附件: transWindow.rar (14.47 KB, 下载次数: 1087)
设计模式下的窗口:
未标题-1.gif
运行效果:
未标题-1.gif

[ 本帖最后由 小fisher 于 2009-4-16 19:48 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-4-16 21:05 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-2-8 19:41 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-12-30 11:31 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
牛呀                  
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-7 05:03 , Processed in 0.041474 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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