📄 form1.frm
字号:
VERSION 5.00
Begin VB.Form Form1
BorderStyle = 1 'Fixed Single
Caption = "Form1"
ClientHeight = 2790
ClientLeft = 5760
ClientTop = 3675
ClientWidth = 5490
Icon = "Form1.frx":0000
LinkTopic = "Form1"
MaxButton = 0 'False
ScaleHeight = 2790
ScaleWidth = 5490
Begin VB.Label Label1
Caption = $"Form1.frx":030A
BeginProperty Font
Name = "宋体"
Size = 12
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 1095
Left = 120
TabIndex = 0
Top = 240
Width = 5055
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
'-------------------------------------------
' 一个改变系统菜单的例子
'-------------------------------------------
' 洪恩在线 求知无限
'-------------------------------------------
'程序说明:
'系统菜单是点击窗体右上角图标时所弹出的菜单,这个
'菜单的选项一般是固定的,而本例通过API函数的调用
'改变了系统菜单的选项,在其中加入了新的菜单项。
'程序实现有两个关键:
'1、通过AppendMenu和GetSystemMenu两个API函数的
'应用,在系统菜单上添加项目;
'2、通过子类化窗体技术的应用,当我们点击添加的条
'时,能得到消息并做出响应。
'-------------------------------------------
Option Explicit
Private Sub Form_Load()
OldWindowProc = GetWindowLong(Form1.hwnd, GWL_WNDPROC)
' 取得窗口函数的地址 标记 GWL_WNDPROC 表示要取得 该窗口的窗口函数的地址
Call SetWindowLong(Form1.hwnd, GWL_WNDPROC, AddressOf WindowProc)
' 用 WindowProc函数 代替 窗口函数 处理消息,标记 GWL_WNDPROC 表示要设置 该窗口的窗口函数的地址
' 其实际效果是一旦操作系统向窗体发送消息,都会跳转到 WindowProc函数 中进行判断和处理
'**********************这段文字要理解*******************************************
' 这里要仔细理解一下,我们为窗体新指定了窗体函数地址,也就是说操作系统发送给窗体的
'消息将被 WindowProc函数 所截获(而改变前消息是被默认的 窗体函数 所获得并作相应处理的)
' 这样我们在 WindowProc函数 中对所截获的消息进行判断,会有三种情况:
'<1>如果是需要通过程序来处理的消息就通过 WindowProc函数 中的相应语句处理;
'<2>如果是要原来的 窗体函数 来处理则把这个消息传递给原窗体函数(其实是指针指向的改变);
'<3>如果不是我们需要的消息,也传递给原 窗体函数 来处理。
'*******************************************************************************
'得到窗体的系统菜单的句柄
SysMenuHwnd = GetSystemMenu(Form1.hwnd, False)
'在系统菜单上添加条目,两个相关的函数DeleteMenu、ModifyMenu同样用来修改菜单项
Call AppendMenu(SysMenuHwnd, MF_SEPARATOR, 2000, vbNullString) '插入一条分隔线
Call AppendMenu(SysMenuHwnd, MF_STRING, 2001, "帮助(&A)") '插入“帮助”项
Call AppendMenu(SysMenuHwnd, MF_SEPARATOR, 2002, vbNullString) '插入一条分隔线
Call AppendMenu(SysMenuHwnd, MF_STRING, 2003, "恢复(&R)") '插入“恢复”项
End Sub
Private Sub Form_Unload(Cancel As Integer)
'如果当前的窗体属性已经被改变,则恢复原来的设置
If OldWindowProc <> GetWindowLong(Form1.hwnd, GWL_WNDPROC) Then
Call SetWindowLong(Form1.hwnd, GWL_WNDPROC, OldWindowProc)
End If
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -