Option Explicit
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Const GWL_STYLE = (-16)
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Const WS_MINIMIZE = &H20000000      '´°¿Ú×îС»¯Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
   Dim lwnd As Long
    lwnd = GetWindowLong(Me.hwnd, GWL_STYLE)
    lwnd = lwnd Or WS_MINIMIZE
    Call SetWindowLong(Me.hwnd, -16, lwnd)
End Sub

解决方案 »

  1.   

    http://baike.baidu.com/view/1080272.htm
    ......
      指定的窗口数据是在缓存中保存的,因此在调用SetWindowLong之后再调用SetWindowPos函数才能使SetWindowLong函数所作的改变生效。
    ...... 
      

  2.   

        我加入这句还是一样啊?Call SetWindowPos(Me.hwnd, 0, 0, 0, 0, 0, 3)(我是菜鸟)
      

  3.   

    直接设置窗口的样式即可。设置BorderStyle=1
      

  4.   

    SetWindowPos只能设置窗体大小、位置和Z序,不能最小化设置BorderStyle吧
      

  5.   

    GetWindowLong改变窗口样式,例如有没有最大化按钮,是否在任务栏显示按钮等.
      

  6.   

    我记得在哪....看见过说,setwindowlong实现不了窗口最大最小化恢复等窗口操作
    还是用 showwindow 吧
    setwindowlong 修改窗口属性后一般需要刷新
      

  7.   

    用不着这么复杂,发个消息就OK了:
    Option Explicit
    Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
    Private Const WM_SYSCOMMAND As Long = &H112&
    Private Const SC_MINIMIZE As Long = &HF020&'最小化窗口
    Private Sub Command1_Click()
        Call SendMessage(Me.hwnd, WM_SYSCOMMAND, SC_MINIMIZE, ByVal 0&)
    End Sub
      

  8.   

    请问CloseWindow不是能最小化吗。。