如何让窗体上的还原按钮Enabled,只可以最小化和最大化?

windwindwind 2003-08-19 04:09:37
如何让窗体上的还原按钮Enabled,只可以最小化和最大化?
...全文
35 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
windwindwind 2003-08-19
  • 打赏
  • 举报
回复
哈哈好啦!谢谢大家,我会给你们加分的!
windwindwind 2003-08-19
  • 打赏
  • 举报
回复
这么多高手回答我的问题,我感动死了!

不过我试了试,还是不行呀:(
Sean918 2003-08-19
  • 打赏
  • 举报
回复
楼上  ch21st(风尘鸟) 的也可以试试,就是去掉系统菜单里面的东西
Sean918 2003-08-19
  • 打赏
  • 举报
回复
哎。。。好久没用VB了。。。
=============================
'form1:
Option Explicit

Private Sub Form_Load()
Me.WindowState = 2
prevWndProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
SetWindowLong Me.hwnd, GWL_WNDPROC, AddressOf WndProc
End Sub

Private Sub Form_Unload(Cancel As Integer)
SetWindowLong Me.hwnd, GWL_WNDPROC, prevWndProc
End Sub

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'module1:
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Public Const GWL_WNDPROC = (-4)
Public Const WM_SYSCOMMAND = &H112
Public Const SC_RESTORE = &HF120&

Public prevWndProc As Long ''''ĬÈÏ´°¿Ú³ÌÐòµØÖ·

Public Function WndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
On Error GoTo ShowErr

If Msg = WM_SYSCOMMAND Then
If wParam = SC_RESTORE Then
Exit Function
Else
WndProc = CallWindowProc(prevWndProc, hwnd, Msg, wParam, lParam)
End If
End If

WndProc = CallWindowProc(prevWndProc, hwnd, Msg, wParam, lParam)
Exit Function
ShowErr:
WndProc = CallWindowProc(prevWndProc, hwnd, Msg, wParam, lParam)
Exit Function
End Function

====================================================================
试试吧,应该是对的
道素 2003-08-19
  • 打赏
  • 举报
回复
Option Explicit

Const MF_GRAYED As Long = &H1&
Const SC_MAXIMIZE = &HF030
Const SC_MINIMIZE = &HF020
Const SC_MOVE = &HF010
Const SC_RESTORE = &HF120
Const SC_SIZE = &HF000
Const SC_Close = &HF060

Const MF_BYCOMMAND = 0


Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
Private Declare Function DeleteMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Private Sub Form_Load()

Dim hMenu As Long

hMenu = GetSystemMenu(Me.hwnd, 0)
Call DeleteMenu(hMenu, SC_RESTORE, MF_BYCOMMAND Or MF_GRAYED)

End Sub

这是楼主要求的一部分,去掉还原,只能最大化最小化
我的代码仅仅去掉还原,可以切换最大化和最小化,如果需要去掉别的,你自己改一下就可以,都声明好了,代码也容易看懂
superego 2003-08-19
  • 打赏
  • 举报
回复
WindowState设为2 - Maximized

然后,在窗体属性栏里设置 MaxButton 为false
onedream 2003-08-19
  • 打赏
  • 举报
回复
Public Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert 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 SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Public Const GWL_STYLE = (-16)
Public Const WS_SYSMENU = &H80000
Public Const WS_MAXIMIZEBOX = &H10000
Public Const MF_BYPOSITION = &H400&
'把windowstate=2其他属性正常
Private Sub Form_Load()
'屏蔽窗体最大化按钮
Dim Win_Style As Long
Dim HsysMenu As Long
Win_Style = GetWindowLong(hwnd, GWL_STYLE) And Not WS_MAXIMIZEBOX
SetWindowLong hwnd, GWL_STYLE, Win_Style
'屏蔽鼠标拖动
HsysMenu = GetSystemMenu(Me.hwnd, False)
RemoveMenu HsysMenu, 1, MF_BYPOSITION

End Sub
Private Sub Form_Resize()
'不让窗体恢复正常状态
'SysInfo为系统信息控件
If Me.WindowState <> 1 Then
Me.Top = SysInfo.WorkAreaTop
Me.Height = SysInfo.WorkAreaHeight
Me.Left = SysInfo.WorkAreaLeft
Me.Width = SysInfo.WorkAreaWidth
End If
End Sub
这个是我自己做的,不知道是不是楼主的意思
windwindwind 2003-08-19
  • 打赏
  • 举报
回复
我是想,窗口可最小化,也可以最大化,但是不能被还原。谁能告诉我怎么做呀?谢谢!
windwindwind 2003-08-19
  • 打赏
  • 举报
回复
MaxButton设为False?在哪里设呀?
AustinLei 2003-08-19
  • 打赏
  • 举报
回复
MaxButton设为False
WindowState设为2 - Maximized
jornet 2003-08-19
  • 打赏
  • 举报
回复
应该属性可以设置吧!
另外可以用截取窗体的消息函数,不让系统处理关闭的消息函数就ok了

1,451

社区成员

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

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