在vb的MDI主窗体中,怎样才能把窗体的“最大化”和“最小化”去掉。还有怎样才能让窗体不能自由拖动。

guoshaoning 2005-03-06 08:43:18
在vb的MDI主窗体中,怎样才能把窗体的“最大化”和“最小化”去掉。
还有怎样才能让窗体不能自由拖动(也就是固定窗体的大小)。
...全文
765 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
裸男 2005-03-09
  • 打赏
  • 举报
回复
我刚才说的那个是使窗体不能拖动(即不可以更改位置),如果要使窗体不能更改大小,则方法如下

Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long

Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long

Private Const SC_SIZE = &HF000&

Private Const MF_REMOVE = &H1000&

Private Sub Form_Load()
Dim MyMenu As Long
MyMenu = GetSystemMenu(Me.hwnd, False)
RemoveMenu MyMenu, SC_SIZE, MF_REMOVE
End Sub
whyglinux 2005-03-09
  • 打赏
  • 举报
回复
// 至于自动拉伸的问题偶也不知道怎么解决,等待....

窗体改变大小的时候会产生Resize事件,因此也可以在MDIForm的Resize事件中处理,将窗体的四个属性值(Top、Left、Width、Height)恢复成原来的值就可以了。
daisy8675 2005-03-09
  • 打赏
  • 举报
回复
請在 MDIForm 的宣告區中加入以下宣告

#If Win32 Then
  Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
  (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
  Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
  (ByVal hwnd As Long, ByVal nIndex As Long) As Long
#Else
  Private Declare Function SetWindowLong Lib "User" (ByVal hwnd As Integer, _
  ByVal nIndex As Integer, ByVal dwNewLong As Long) As Long
  Private Declare Function GetWindowLong Lib "User" (ByVal hwnd As Integer, _
  ByVal nIndex As Integer) As Long
#End If

Const WS_MINIMIZEBOX = &H20000 '最小化
Const WS_MAXIMIZEBOX = &H10000 '最大化
Const GWL_STYLE = (-16)

'在 MDIForm 的 MDIForm_Load 事件中加入以下程式碼
Sub MDIForm_Load()
  Dim lWnd As Long
  lWnd = GetWindowLong(Me.hwnd, GWL_STYLE)
  lWnd = lWnd And Not (WS_MINIMIZEBOX) '最小化
  lWnd = lWnd And Not (WS_MAXIMIZEBOX) '最大化
  lWnd = SetWindowLong(Me.hwnd, GWL_STYLE, lWnd)
End Sub

--------------------------------------------------------------------------------

裸男 2005-03-09
  • 打赏
  • 举报
回复

如果想让窗体不可自由拖动,可以使用以下方法:

Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long

Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long

Private Const SC_MOVE = &HF010&

Private Const MF_REMOVE = &H1000&

Private Sub Form_Load()
Dim MyMenu As Long
MyMenu = GetSystemMenu(Me.hwnd, False)
RemoveMenu MyMenu, SC_MOVE, MF_REMOVE
End Sub
guoshaoning 2005-03-08
  • 打赏
  • 举报
回复
最大化、最小化的问题我试过了好用。不过自由拖动的问题还是不行!等待。。。。
  • 打赏
  • 举报
回复
BorderStyle=1
MaxButton和MinButton 属性可用

BorderStyle=3
MaxButton和MinButton 属性不可用
Zygodactyous 2005-03-07
  • 打赏
  • 举报
回复
至于自动拉伸的问题偶也不知道怎么解决,等待....
老汉 2005-03-07
  • 打赏
  • 举报
回复
chendjin(累了就休息) ( ) 正解。

对于MDI窗体的设置,只能使用API函数了。
cy1988 2005-03-06
  • 打赏
  • 举报
回复
自己做一个皮肤遮住吧
裸男 2005-03-06
  • 打赏
  • 举报
回复

普通窗口的话,可以直接在属性中设定,
如果是MDI的窗体,那么最大化、最小化须用到API函数。
chendjin 2005-03-06
  • 打赏
  • 举报
回复
Option Explicit

'==去掉mdisysrm最大、最小化按钮函数申明===========
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Const WS_MINIMIZEBOX = &H20000
Const WS_MAXIMIZEBOX = &H10000
Const WS_CAPTION = &HC00000
Const GWL_STYLE = (-16)
Const MF_REMOVE = &H1000&

Private Sub MDIForm_Load()
'=======去掉窗体最大、最小化按钮=======
Dim lWnd As Long
lWnd = GetWindowLong(Me.hwnd, GWL_STYLE)
lWnd = lWnd And Not (WS_CAPTION)
lWnd = SetWindowLong(Me.hwnd, GWL_STYLE, lWnd)

End Sub

Private Sub MDIForm_DblClick()
End
End Sub
guoshaoning 2005-03-06
  • 打赏
  • 举报
回复
大哥们!要是在属性里可以设置!就不用费劲到这来忙了。第一个大哥的方法应该能实现去掉。最大化,和最小化,但是不知道能不能控制定死窗体不让窗体拖动大小。
w3k 2005-03-06
  • 打赏
  • 举报
回复
窗口属性中将BorderStyle设为3
tztz520 2005-03-06
  • 打赏
  • 举报
回复
在窗口属性中将BorderStyle设为3就可以了
qyqmhh 2005-03-06
  • 打赏
  • 举报
回复
在属性窗口中都有这些设置吧!

7,789

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧