整理了一下昨晚的测试代码分两种情况:1.你的窗体没有菜单,下面就可以在运行的时候改变窗体的borderstyle了: Private Sub Command1_Click() Form1.BorderStyle = 0 Form1.Caption = "123" End SubPrivate Sub Command2_Click() Form1.BorderStyle = 1 Form1.Caption = "456" End Sub2.你的窗体有菜单,这时用上面的方法不行,要用api: '模块中: Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong 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 DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long Public Const GWL_STYLE = (-16) Public Const WS_CAPTION = &HC00000 ' WS_BORDER Or WS_DLGFRAME Public Const WS_SYSMENU = &H80000 Public Const WS_THICKFRAME = &H40000'程序中: Private Sub Command1_Click() Dim dwsty As Long dwsty = GetWindowLong(Me.hwnd, GWL_STYLE) dwsty = dwsty - WS_SYSMENU - WS_CAPTION - WS_THICKFRAME dwsty = SetWindowLong(Me.hwnd, GWL_STYLE, dwsty) DrawMenuBar (Me.hwnd) End SubPrivate Sub Command2_Click() Dim dwsty As Long dwsty = GetWindowLong(Me.hwnd, GWL_STYLE) dwsty = dwsty Or WS_SYSMENU dwsty = dwsty Or WS_CAPTION dwsty = dwsty Or WS_THICKFRAME dwsty = SetWindowLong(Me.hwnd, GWL_STYLE, dwsty) DrawMenuBar (Me.hwnd) End Sub这样,你就会得到一个borderstyle=0但却有菜单功能的窗体了。。 对于你的实际需求,是想borderstyle=0的时候隐藏菜单,这个好办,在把窗体的borderstyle改变的时候先把菜单的visiable设为false就可以了,更狠一点的可以用api整个把它删掉不过,就技术角度来说,我倒觉得一个borderstyle=0但却有菜单功能的窗体更有意思。。xp sp2+vb6 sp5下测试通过。
当最大化的时候不显示标题,菜单,不是最大化窗体是这些都显示
有点想看片的工具,当按shift+enter显示最大时,只是看片窗口,当再按shift+enter就还原
干脆原窗口的菜单栏、边框等都自己做,就用BorderStyle = 0窗口。
======================
msdn说的并不一定就是完全正确的
form的borderstyle在运行时是可以改变的,但并不适用于有菜单的窗体。。
用getwindowlong取得窗体的style,然后减去WS_SYSMENU、 WS_CAPTION、 WS_THICKFRAME之类的东西再setwindowlong,你就会得到一个borderstyle=0但有菜单的窗体。
你能讲明白一点吗
Private Sub Command1_Click()
Form1.BorderStyle = 0
Form1.Caption = "123"
End SubPrivate Sub Command2_Click()
Form1.BorderStyle = 1
Form1.Caption = "456"
End Sub2.你的窗体有菜单,这时用上面的方法不行,要用api:
'模块中:
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong 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 DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long
Public Const GWL_STYLE = (-16)
Public Const WS_CAPTION = &HC00000 ' WS_BORDER Or WS_DLGFRAME
Public Const WS_SYSMENU = &H80000
Public Const WS_THICKFRAME = &H40000'程序中:
Private Sub Command1_Click()
Dim dwsty As Long
dwsty = GetWindowLong(Me.hwnd, GWL_STYLE)
dwsty = dwsty - WS_SYSMENU - WS_CAPTION - WS_THICKFRAME
dwsty = SetWindowLong(Me.hwnd, GWL_STYLE, dwsty)
DrawMenuBar (Me.hwnd)
End SubPrivate Sub Command2_Click()
Dim dwsty As Long
dwsty = GetWindowLong(Me.hwnd, GWL_STYLE)
dwsty = dwsty Or WS_SYSMENU
dwsty = dwsty Or WS_CAPTION
dwsty = dwsty Or WS_THICKFRAME
dwsty = SetWindowLong(Me.hwnd, GWL_STYLE, dwsty)
DrawMenuBar (Me.hwnd)
End Sub这样,你就会得到一个borderstyle=0但却有菜单功能的窗体了。。
对于你的实际需求,是想borderstyle=0的时候隐藏菜单,这个好办,在把窗体的borderstyle改变的时候先把菜单的visiable设为false就可以了,更狠一点的可以用api整个把它删掉不过,就技术角度来说,我倒觉得一个borderstyle=0但却有菜单功能的窗体更有意思。。xp sp2+vb6 sp5下测试通过。