对枕善居中 Vista 界面模仿窗体示例(修正版)的进一步修改解决方案

对枕善居中 Vista 界面模仿窗体示例(修正版)的进一步修改
源文件在枕善居的   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   Sub

Private   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窗体的上面移动窗体时,图像抖动。点击上面的关闭等按钮,图像也抖动。
但我想不出更好的办法了。那位同好能够继续完善?


------解决方案--------------------
关注中!先顶
------解决方案--------------------
学习
------解决方案--------------------