当把mouse移到窗体的左下角或是右下角时,mouse变成可以改变窗体大小的箭头,有什么办法让它不变呢?也就是不给用户改变窗体大小 ,但要有最大化与最小化按钮.

解决方案 »

  1.   

    用timer1
    检测mouse的坐标
    if mouse.x and mouse.y then
    设置mouse为原来的图标
      

  2.   

    '窗体
    Option Explicit
    Private Sub Form_Load()
        Me.Width = 400 * 15
        Me.Height = 200 * 15
        Call SubClass(Me.hwnd)
    End Sub
    Private Sub Form_Unload(Cancel As Integer)
        Call UnSubClass(Me.hwnd)
    End Sub'模块
    Option Explicit
    Public defWindowProc As Long
    Public minX As Long
    Public minY As Long
    Public maxX As Long
    Public maxY As LongPublic Const GWL_WNDPROC As Long = (-4)
    Public Const WM_GETMINMAXINFO As Long = &H24Public Type POINTAPI
        x As Long
        y As Long
    End TypeType MINMAXINFO
        ptReserved As POINTAPI
        ptMaxSize As POINTAPI
        ptMaxPosition As POINTAPI
        ptMinTrackSize As POINTAPI
        ptMaxTrackSize As POINTAPI
    End TypePublic Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)Public Sub SubClass(hwnd As Long)
        On Error Resume Next
        defWindowProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc)
    End Sub
    Public Sub UnSubClass(hwnd As Long)   If defWindowProc Then
          SetWindowLong hwnd, GWL_WNDPROC, defWindowProc
          defWindowProc = 0
       End If
       
    End Sub
    Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        On Error Resume Next
        Select Case uMsg
            Case WM_GETMINMAXINFO
                Dim MMI As MINMAXINFO
                CopyMemory MMI, ByVal lParam, LenB(MMI)
                With MMI
                    .ptMinTrackSize.x = 400
                    .ptMinTrackSize.y = 200
                    .ptMaxTrackSize.x = 400
                    .ptMaxTrackSize.y = 200
                End With
                CopyMemory ByVal lParam, MMI, LenB(MMI)
                WindowProc = 0
            Case Else
                WindowProc = CallWindowProc(defWindowProc, hwnd, uMsg, wParam, lParam)
        End Select
    End Function
      

  3.   

    你把窗体的bodystyle设成不能调整就行了,我忘了是哪个了~~:P
      

  4.   

    TO JennyVenus(): 我看过你的这个方法,知道这样可以,但是有一个问题是:  这样mouse还是会变成箭头,怎么可以阻止这个呢??
    To lhxtx(再见理想):  我看了,你的不行,因为对于标题区,不是窗体的,不用其它的方法是不可以访问的。 但在那里还是会变成箭头。 而且对其它的下面两个角落,这样做也没有见交效。
      

  5.   

    最简单的办法,把窗体的bodystyle属性改为其它值,试试就知道了。
      

  6.   

    设置窗体的BorderStyle为1,MaxButton=True,MinButton=True
      

  7.   

    我试到了最简单的解决办法:
      设置窗体的BorderStyle为1,MaxButton=false,MinButton=True不过最注意一点是:改BorderStyle时,千万要用记事本或是其它的东西来打开窗体文件,而不直接在VB中改,因为那样会把最小化与最大化搞不见的。
      

  8.   

    很简单的
    只要在form的属性BorderStyle中选择1-FixedSingle就行了
      

  9.   

    9494 把 BorderStyle 改成 1 或 3 就行啦, :)