你为什么一定要对系统的那几个按钮进行编程,如果一定要那样做的话就用API吧
其实你只要把标题栏拿掉,自己画上几个按钮就可以了,你想他怎么样都可以啊
其实你只要把标题栏拿掉,自己画上几个按钮就可以了,你想他怎么样都可以啊
解决方案 »
- 关于VB模拟拖放一个文件到别的程序
- VB如何把采集到的数据保存到txt文档中?
- 请大神帮忙,点击某个账号,显示该条记录的折线图,万分感谢
- 如何在listview中显示文件关联图标
- 怎样删除文件和编辑excel文件?
- 如何一下子读入整个文件的内容?
- 我要UltraEdit32,提供者,30分有奖.mail to:[email protected]
- 关于sstab控件
- 害得我又要发贴子!高手请进!
- <a onclick="check()" style="cursor: pointer;"> </a>
- MsFlexGrid控件更新问题!!!救命呀!
- 在运行程序时,出现“运行时错误 3000”。如何解决?
把45分给我,答案如下:
Option Explicit
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
'如果你使用如下代码不能使你的程序达到预定目标,可能你将窗体的。controlbox 属性设为 False 了。Private Sub MDIForm_Load()
Me.Top = 0
Me.Left = 0
Me.WindowState = 2
Dim hMenu As Long
Dim ret As Long
hMenu = GetSystemMenu(Me.hwnd, False)
ret = DeleteMenu(hMenu, 6, &H400&) '关闭
ret = DeleteMenu(hMenu, 5, &H400&) '横分割线
ret = DeleteMenu(hMenu, 4, &H400&) '最大化
ret = DeleteMenu(hMenu, 3, &H400&) '最小化
ret = DeleteMenu(hMenu, 2, &H400&) '大小
ret = DeleteMenu(hMenu, 1, &H400&) '移动
ret = DeleteMenu(hMenu, 0, &H400&) '恢复
Form1.Show
End Sub'注意,对于MDI窗体,虽然以上代码可以使窗体控制菜单功能失效,但如果您鼠标按压最大最小化按钮,程序还是会产生阻塞现象,定时器不工作。如果您找到更好的办法,记得告诉我。交个朋友,我做工控,QQ:5043160
Public Const GWL_USERDATA = (-21)
Public Const GWL_WNDPROC = -4
Public Const WM_SYSCOLORCHANGE = &H15
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 hwnd'发送信息到ToobBar
Case VbcontrolWin.hwnd
VbcontrolWin.ProcMsg hwnd, uMsg, wParam, lParam, 0&End Select'check if we want to pass the message or eat it.
If Nodef = True Then
WindowProc = CallWindowProc(NextProcs, hwnd, uMsg, wParam, ByVal lParam)
Else
Nodef = False
Nodef = True
End IfEnd Function================================Public Sub ProcMsg(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long, Result As Long)Dim msgStruct As msg
Dim hdr As NMHDR
Dim ttt As ToolTipText
Dim MinMax As MINMAXINFO
Dim OldParam As Long
Dim ll As LongOn Error Resume NextSelect Case uMsgCase WM_SYSCOMMAND
If wParam = 61458 Then
If Me.Tag = "DOCKED" Then
Nodef = False
'MDIForm1.KillDOCK
'MDIForm1.UnDockShow
End If
End IfCase WM_EXITSIZEMOVE, WM_NCLBUTTONDOWN
Call ShowWindow(Me.hwnd, SW_SHOW)
Call SendMessage(Me.hwnd, WM_NCACTIVATE, 1, 0)
Case WM_NCRBUTTONUP
PopupMenu toolbar '
略
。
Private Sub MDIForm_Load ()
Dim NewForm As New Form1 ' Form1 的新实例。
NewForm.Caption = "Form2" ' 设置标题并显示。
End SubPrivate Sub FileExit_Click ()
Unload MDIForm1 ' 退出应用。
End SubPrivate Sub MDIForm_QueryUnload (Cancel As Integer, UnloadMode As Integer)
Dim Msg ' 声明变量。
' 设置信息文本。
Msg = "Do you really want to exit the application?"
' 如果用户单击 No 按钮,则停止QueryUnload。
If MsgBox(Msg, vbQuestion + vbYesNo, Me.Caption) = vbNo Then Cancel = True
End Sub' 粘贴到 Form1的声明部分。
Private Sub Form_QueryUnload (Cancel As Integer, UnloadMode As Integer)
Dim Msg ' 声明变量。
If UnloadMode > 0 Then
' 如果正在退出应用。
Msg = "Do you really want to exit the application?"
Else
' 如果正好在关闭窗体。
Msg = "Do you really want to close the form?"
End If
' 如果用户单击No按钮,则停止QueryUnload。
If MsgBox(Msg, vbQuestion + vbYesNo, Me.Caption) = vbNo Then Cancel = True
End Sub
DELETEMENU函数如果要用改变系统菜单系统欲处理函数,
可以拦截消息,然后写代码,
可以见MSDN 中ADDRESSOF函数的说明,那里有一个HOOK的例子,钩住消息,
那个例子中只要改一点就行了