使用过Windows Vista 的用户都会对Vista窗口的磨砂玻璃效果印象深刻,而如果你在Windows Vista 下使用过 Windows Media Player 11 更会发现微软把这种效果扩展至WMP11的底部区域,使得WMP的底部按钮区域成为一条“玻璃带”,如图:

事实上,Vista窗口的磨砂玻璃效果不仅限于窗体的边框(非客户区域),他可以任意的延伸,甚至铺满整个窗口,下面我们就来看看怎么用的vb6来实现这种扩展。
Vista实现磨砂玻璃效果主要依靠一组叫做 Desktop Window Manager (DWM) 的API来实现,该组API均以dwm打头,存在于dwmapi.dll中(该文件为Vista特有),顾名思义,这些API是专门用来实现Vista窗口的特效的。由于篇幅所限,这里仅介绍和本文关系最密切的两个函数:DwmIsCompositionEnabled 和 DwmExtendFrameIntoClientArea。
第一个函数DwmIsCompositionEnabled是用于判断系统的磨砂玻璃合成效果是否已经开启,因为该效果可以由用户关闭,尽管你可以在用户关闭合成效果的情况下在程序中单独使用合成效果。

DwmIsCompositionEnabled的原型为:
| HRESULT DwmIsCompositionEnabled( BOOL *pfEnabled ) |
其中pfEnabled为一个输出参数,告诉后面的程序合成效果是否被打开。
该函数的VB声明为:
| Public Declare Function DwmIsCompositionEnabled Lib "dwmapi.dll" (ByRef enabledptr As Long) As Long |
这里要注意C++里的BOOL类型必须译成vb中的Long而不是Boolean,否则你将得到错误的结果。
DwmExtendFrameIntoClientArea函数则用于将磨砂边框扩展至窗体客户区,使得整个窗体看上就像一张卡片(sheet)。
该函数原型为:
| HRESULT DwmExtendFrameIntoClientArea(HWND hWnd,const MARGINS *margins) |
其中hWnd 为目标窗口句柄,margins为一个MARGINS结构体指针
MARGINS结构体定义为:
| typedef struct _MARGINS { int cxLeftWidth; int cxRightWidth; int cyTopHeight; int cyBottomHeight; } MARGINS, *PMARGINS; |
该函数的vb引用为:
| Public Declare Function DwmExtendFrameIntoClientArea Lib "dwmapi.dll" (ByVal hwnd As Long, margin As MARGINS) As Long |
MARGINS的vb形式定义:
| Public Type MARGINS m_Left As Long m_Right As Long m_Top As Long m_Button As Long End Type |
其中MARGINS中的各个成员为需要扩展的边框大小(单位:像素),如果要把磨砂玻璃效果铺满整个边框(本文以此为例),全部成员可设置为-1
知道了这些,我们现在就可以动手了。
我们在窗体的Form_Load事件里写上:
| Dim mg As MARGINS, en As Long mg.m_Left = -1 mg.m_Button = -1 mg.m_Right = -1 mg.m_Top = -1 DwmIsCompositionEnabled en If en Then DwmExtendFrameIntoClientArea Me.hwnd, mg End If |
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
相关专题
·用VB制作一个简单的MP3播放器 (6821次浏览)
·IP地址与子网掩码(二) (3206次浏览)
·IP地址与子网掩码(三) (2854次浏览)
·在VB下设计开发实时的数据采集曲线 (2708次浏览)
·VB中使用WinSock控件编写网络程序 (2665次浏览)
·VB程序界面设计经验点滴 (1178次浏览)
·VB报表设计中使用天宇报表控件 (1052次浏览)
·获取webbrowser控件 网页的源码(收藏) (1041次浏览)
·VB中使用DirectX库的简明教程 (1020次浏览)
·教你用Visual Basic制作安装程序 (563次浏览)
·IP地址与子网掩码(二) (3206次浏览)
·IP地址与子网掩码(三) (2854次浏览)
·在VB下设计开发实时的数据采集曲线 (2708次浏览)
·VB中使用WinSock控件编写网络程序 (2665次浏览)
·VB程序界面设计经验点滴 (1178次浏览)
·VB报表设计中使用天宇报表控件 (1052次浏览)
·获取webbrowser控件 网页的源码(收藏) (1041次浏览)
·VB中使用DirectX库的简明教程 (1020次浏览)
·教你用Visual Basic制作安装程序 (563次浏览)
·VB急速密码生成---RndString 10-30
·vb文件系统控件的使用 10-09
·vb Frame 控件的使用 10-09
·vb实现隐藏Mouse 10-09
·vb建立与读取.ini文件 10-09
·用VB编写托盘程序 10-09
·VB5报表设计器在人事管理软件中的应用 10-09
·用vb编写贪食蛇 10-09
·一个用VB编写的监控别人上网的软件例子 10-09
·vb如何控制鼠标 10-09
·vb文件系统控件的使用 10-09
·vb Frame 控件的使用 10-09
·vb实现隐藏Mouse 10-09
·vb建立与读取.ini文件 10-09
·用VB编写托盘程序 10-09
·VB5报表设计器在人事管理软件中的应用 10-09
·用vb编写贪食蛇 10-09
·一个用VB编写的监控别人上网的软件例子 10-09
·vb如何控制鼠标 10-09
最新论坛文章
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
站内频道文章精选
百度推荐,商机无限
搜索您感兴趣的内容



