用VB6.0在Vista下实现全磨砂玻璃窗口

用VB6.0在Vista下实现全磨砂玻璃窗口,第1张

用VB6.0在Vista下实现全磨砂玻璃窗口,第2张

用过Windows Vista的用户都会对Vista windows的毛玻璃效果印象深刻。如果你在Windows Vista下用过Windows Media Player 11,你会发现微软把这种效果扩展到了WMP11的底部区域,让WMP的底部按钮区域变成了“玻璃丝带”,如图:

实际上,Vista窗口的毛玻璃效果并不局限于窗口的边框(非客户端区域),而是可以随意延伸,甚至遍布整个窗口。下面我们来看看如何使用VB6来实现这个扩展。

Vista中毛玻璃效果的实现主要依靠一组名为桌面窗口管理器(dwm)的API,这些API都是以DWM开头,存在于dwmapi.dll中(这个文件是Vista独有的)。顾名思义,这些API是专门用来实现Vista windows的特效的。由于篇幅所限,这里只介绍与本文关系最密切的两个函数:DwmIsCompositionEnabled和DwmExtendFrameIntoClientArea。

第一个函数DwmIsCompositionEnabled用于确定系统的磨砂玻璃构图效果是否已经开启,因为该效果可以由用户关闭,虽然用户关闭构图效果时你可以在程序中单独使用构图效果。

DwmIsCompositionEnabled的原型是:

HRESULT DwmIsCompositionEnabled(BOOL * pf enabled)

其中pfEnabled是一个输出参数,它告诉下面的程序是否打开了合成效果。

这个函数的VB声明是:

公共声明函数DwmIsCompositionEnabled Lib " dw mapi . dll "(ByRef enabled ptr As Long)为Long

这里注意,C++中的BOOL类型在vb中必须翻译成Long而不是Boolean,否则会得到错误的结果。

DwmExtendFrameIntoClientArea函数用于将磨砂边框扩展到表单的工作区,这样整个表单看起来就像一张工作表。

这个函数的原型是:

HRESULT DwmExtendFrameIntoClientArea(HWND HWND,const MARGINS *margins)

其中hWnd是目标窗口句柄,margins是边距结构指针。

利润率结构被定义为:

typedef struct _ MARGINS
{
int cxLeftWidth;
int cxRightWidth;
int cyTopHeight;
int cyBottomHeight;
}边距,* PMARGINS


该函数的vb引用是:

公共声明函数dwmextend frameintoclientarea lib " dw mapi . dll "的vb形式定义(byval hwnd as long,margin as margins)as long

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

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 用VB6.0在Vista下实现全磨砂玻璃窗口

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情