说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

用VisualBasic制作半透明窗体

HTML文档下载 WORD文档下载 PDF文档下载
用VisualBasic制作半透明窗体

作者:iProgram



函数SetLayeredWindowAttributes

  使用这个函数,可以轻松的实现半透明窗体。按照微软的要求,透明窗体窗体在创建时应使用WS_EX_LAYERED参数(用CreateWindowEx),或者在创建后设置该参数(用SetWindowLong),我选用后者。全部函数、常量声明如下:

Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long

Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

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],dwFlags是透明方式,可以取两个值:当取值为LWA_ALPHA时,crKey参数无效,bAlpha参数有效;当取值为LWA_COLORKEY时,bAlpha参数有效而窗体中的所有颜色为crKey的地方将变为透明--这个功能很有用:我们不必再为建立不规则形状的窗体而调用一大堆区域分析、创建、合并函数了,只需指定透明处的颜色值即可,哈哈哈哈!请看具体代码。

Private Const WS_EX_LAYERED = &H80000

Private Const GWL_EXSTYLE = (-20)

Private Const LWA_ALPHA = &H2

Private Const LWA_COLORKEY = &H1

代码一:一个半透明窗体

Private Sub Form_Load()

  Dim rtn As Long

  rtn = GetWindowLong(hwnd, GWL_EXSTYLE)

  rtn = rtn Or WS_EX_LAYERED

  SetWindowLong hwnd, GWL_EXSTYLE, rtn

  SetLayeredWindowAttributes hwnd, 0, 200, LWA_ALPHA

End Sub


代码二:形状不规则的窗体

Private Sub Form_Load()

  Dim rtn As Long

  BorderStyler=0

  rtn = GetWindowLong(hwnd, GWL_EXSTYLE)

  rtn = rtn Or WS_EX_LAYERED

  SetWindowLong hwnd, GWL_EXSTYLE, rtn

  SetLayeredWindowAttributes hwnd, &HFF0000, 0, LWA_COLORKEY ’将扣去窗口中的蓝色

End Sub
一周消息树:计算机将拥有五感 人类面临威胁? 通晓数学的人就可以当程序员吗? 360发布企业版4.0 可自定义软件白名单 不要总是依赖机器 MongoDB扩展彰显分片功夫 Dell与HP的OpenStack的战略:渠道对抗SLA 路况电台王雷:未来车载系统会是Android的天下 移动周报:2012移动开发工具系列盘点 谷歌不愿错失机会 Android或不再成它人独享 黑客文化:Facebook公布2012年Hackathon大赛顶级“黑客作品” 中国移动音乐开放平台正式对外开放 GitLab 4.0发布 更好地支持PostgreSQL 傻瓜式移动应用开发平台:专访摩讯创始人赵健 日本DeNA进军中国智能电视,与海信战略合作 扎克伯格不仅为Poke编码,而且还“献声” Wordament:首款支持Xbox Live成就的iPhone游戏 使用Storm实现实时大数据分析! 孙博凯:微软日益开放,Windows Azure更加拥抱开源 大数据计算:如何仅用1.5KB内存计算十亿个不同的对象 我们为什么爱EC2和S3却彻底抛弃EBS 不畏Surface:诺基亚明年或推Windows平板 Linus Torvalds:用户程序被破坏永远是Kernel的问题! Python高效编程技巧 苹果加速硬件迭代 iPad5原型机曝光 宏碁推99美金平板 价格创历史新低 黑莓10全键盘版代号N系列,谍照泄露! 那些年我们用过的互联网产品 QQ亿级业务演变:从文件、音视频说起 少年企鹅的成长之旅:QQ体验设计发展史 全球超算Top 500:Linux已占93.8%,Windows或将消失 AWS东部地区再次发生宕机 Netflix等网站受影响 2012年全球最美的十个数据中心 如何改变图象的对比度和亮度(速度要快点) 请交如何解决这个bug?鼠标消息传给滚动条,但是不能传给层本身的移动函数?(附代码) 网络问题,服务器开起一段时间后,工作站就不能正常登录。 一个比较愁人的问题,不知道谁遇到过…… 各位同仁有没有这样的经历?。。。。。。。。。。。 请问哪里有关于硬盘配额管理的技术文章~~~~ 国内哪家软件公司更尊重技术? 上传问题的扩展!希望高手帮帮我!我实在弄不出来了!在线等待 写过入党申请书的进来了了.... sos, the simplest iis problem 在pb中如何向外部写文件?比如文本文件。急!!在线等待 高分悬赏--哪里有Delphi7.net下载? 请问如何来截获DLL 的函数接口? win 2000 pro 中的direct的问题!请指教! 请问wingate客户端应该如何配置才能使用OICQ? 21fuck(咚咚)进来看 关于表单"type"的判断 关于OnOpenDocument()的一个问题。(先上100分,解决后再给100!在线等!) 在DOS年代有个小程序(什么名称忘记了)能把一部分内存映射为磁盘,不知在WIN2000/9X是否有内似工具或有办法做到吗? win 2000 pro 中的direct的问题!请指教! 来这儿去高分!!!! 各位前辈有谁用MS SQL SERVER 2000的请进! 谁有"我家我设计"(圆方的系统)的注册码? 残啊?都要计算机专业毕业的。。。。。 怎样求得两时间相差10天? 各位高手们 关于ATL COM 在98和2000下的区别 关于CEvent 如何判断commondialog.showsave ,用户是按了确定,还是取消按钮? 我最近编写一个DLL,用来实现ftp功能,使用了delphi中的nmftp控件,结束调用后总出现莫名其妙的内存错误。请高手指教! 请问哪里有win2000 server的软件下呀?迫切需要,恳请各位能帮忙!谢谢! 面试时问主考官什么样的问题算有水平? 我枚举一个外部程序的子窗体,可是却只看到了TDXDraw,我怎么样才能得到TDXDraw中更多的信息呢? 帶一個checkbox的list應該怎麼做? 扫描程序如何循环处理一段IP地址? 数据库中图片如何调用? 如下错误是什么意思,如果解决 一个关于SQL的问题 残啊?都要计算机专业毕业的。。。。。 Miscrosoft Scrioting Library是何东东?Scrrun.dll上那去弄? 如何让softice支持usb鼠标,键盘 多线程程序中使用采用单线程编译参数编译的DLL,会有什么后果? 很多on error goto ... 很简单,有NT4.0或XP的朋友一看就知道。在线等待 手工配置Grub:希望能对大家有所帮助 新显卡驱动For Linux Where download? ADO问题?????????????/ 请问c++的handle class是什么东东呀 怎么textBox控件不可以使用 \n,\r等语句?????? CEdit疑问 急切在线等:打包时出现的问题!
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘