当前位置:编程学习 > VB >>

谁能帮我解释一下这里的代码是什么意思?

这些内容是在标准模块中声明的
Public Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lparam As Long) As Long
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Public Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long


Public Const WS_MINIMIZEBOX = &H20000
Public Const WS_VISIBLE = &H10000000
Public Const GWL_STYLE = (-16)
Public Const SW_MINIMIZE = 6
Rem enumwindows 函数将遍历的窗口句柄传递到hwnd参数中。

Public Function Enumwindowspro(ByVal hwnd As Long, ByVal lparam As Long) As Long
    Dim a As Long
    Dim aa As Long
    aa = GetWindowLong(hwnd, GWL_STYLE)
    '如果窗口具有最小化按钮并且窗口是可见的就将该窗口最小化
    If ((aa And WS_MINIMIZEBOX) = WS_MINIMIZEBOX) Then
        If ((aa And WS_VISIBLE)) Then
            If ShowWindow(hwnd, SW_MINIMIZE) Then
            End If
        End If
    End If
    Enumwindowspro = True
End Function
下面的这些是在窗体的代码窗口中的:

Private Sub cmdExit_Click()
    Unload Me
    End
End Sub
Private Sub winmin_Click()
    Dim a As Long
    a = EnumWindows(AddressOf Enumwindowspro, 0)
End Sub
这个程序要完成的功能就是最小化桌面上的窗体
我有几个地方不明白:
1、aa = GetWindowLong(hwnd, GWL_STYLE)
   这里,这个函数功能是什么,api手册上说的很模糊,能不能不解释一下,尤其是他的返回值的意思。
2、a = EnumWindows(AddressOf Enumwindowspro, 0)
   还有这个函数的功能说是遍历所有窗体,但是传递AddressOf Enumwindowspro这个是什么意思?,同时Enumwindowspro这个函数里的句柄是如何得到的阿? --------------------编程问答-------------------- 1、简单来说就是获得一个对象(如窗口)的信息,具体获得什么信息,看后面的参数
aa = GetWindowLong(hwnd, GWL_STYLE),就是获取对象的风格,比如是否平面效果啊什么的,得看具体情况,不能一概而论

2、AddressOf就是传说中的回调,常见于子类、钩子等以及任何需要的场合,EnumWindows本身就需要这么一个回调函数。

个人理解,见谅 --------------------编程问答-------------------- 首先谢谢你的解释阿
呵呵
但是我还是有点不太懂
1、GetWindowLong(hwnd, GWL_STYLE),是不是就把所有与窗体风格有关的信息全部返回来了。
你看下面的这个表达式
((aa And WS_MINIMIZEBOX) = WS_MINIMIZEBOX
括号里面的aa应该可以和任何类型的ws_参数进行and运算吧?这是不是就可以说明该函数带回了所有与窗体风格有关的信息呢?
2、还有能不能说清楚一点,那个AddressOf究竟回调的是什么东东阿?以及EnumWindows遍历窗体的返回结果是什么啊?它有什么意义呢?
谢谢 --------------------编程问答-------------------- 1 如果该窗口没有最小化按钮,哪么((aa And WS_MINIMIZEBOX) = WS_MINIMIZEBOX表达式的值为false
2 EnumWindows返回的参数传给Enumwindowspro(ByVal hwnd As Long, ByVal lparam As Long)中的hwnd,lparam。hwnd是枚举的窗口句柄,lparam由程序员规定
补充:VB ,  API
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,