源文件在枕善居的 http://www.mndsoft.com/blog/article.asp?id=859 中。
可以用VB作出Vista的效果,很漂亮。但是美中不足,例程中移动窗口时,窗口显示的图像消失,停止移动窗口后图像才显示。其原因是移动主窗口时隐藏了另一个有图像的窗口。经过一番研究,修改了这个遗憾。移动Aero窗体时,不用隐藏同时可以移动skin窗体。这样看起来只有一个窗体。在Aero窗体:
添加全局声明:
    Private gblAeroIsMoving  As Boolean
    Private gblAeroMoveX     As Single
    Private gblAeroMoveY     As Single
    Private Declare Function GetActiveWindow Lib "user32" () As Long修改Picture1_MouseDown过程:
    '只留下以下代码,其余的注释掉
    MakeTrans (TheSystemDir() & "\VistaW.png")
    SetOnTop Skin.hWnd, True
    MakeTrans (TheSystemDir() & "\Vista.png")
    '这两个 MakeTrans 有什么意义还没有搞懂,似乎没有也一样
    
    '加入以下代码
    gblAeroIsMoving = True
    gblAeroMoveX = X
    gblAeroMoveY = Y添加过程:
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If gblAeroIsMoving = True Then
        Me.Move Me.Left + X - gblAeroMoveX, Me.Top + Y - gblAeroMoveY
        Skin.Move (Me.Left + X - gblAeroMoveX) + 198, (Me.Top + Y - gblAeroMoveY) + 220
    End If
End SubPrivate Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    gblAeroIsMoving = False
End Sub添加一个Timer,Interval为100
这种方法一定很笨,但如果没有,如果改变活动窗口,Skin窗口还会一直在最前面
Private Sub Timer1_Timer()
    If GetActiveWindow = Me.hwnd Then
        SetOnTop Skin.hwnd, True
    Else
        SetOnTop Skin.hwnd, False
    End If
End Sub
经过我这样修改,两个窗体中的 MoveForm 函数可以删除了(不理解作者为什么不把完全一样的函数放在模块)。以下的过程也可以删除:
    Skin窗体的 Command2_Click,包括这个按钮
    API声明 Public Declare Function ReleaseCapture Lib "user32" () As Long现在剩下的问题就是,点击Aero窗体的上面移动窗体时,图像抖动。点击上面的关闭等按钮,图像也抖动。
但我想不出更好的办法了。那位同好能够继续完善?