资料交流 QQ:1004595314@qq.com
--API 实例解析--使窗体右上角的 X 按钮失效--
窗体右上角的 X 按钮通常用来关闭一个程序,这个小 X 按钮实际上是和系统菜单的“关闭”菜单项关联
在一起的,什么?不知道什么是系统菜单,系统菜单是指我们点击窗体左上角的小图标时所弹出的菜单,其
中好象有“恢复”、“移动”、“最大化”、“最小化”、“关闭”这么几个按钮。这个菜单用普通的方法是不能编
辑和改变的,但是我们可以通过 API 函数 GetSystemMenu 来得到它的句柄,然后通过菜单相关的 API 函数就
能改变它了,下面一起看看怎么做吧。
为了学习方便,提供的源码已经作了详细的中文注释,看看源码框中的代码:
'-------------------------------------------
' 使窗体右上角的 X 按钮失效
'-------------------------------------------
' 洪恩在线 求知无限
'-------------------------------------------
'程序说明:
'本例利用 API 函数 GetSystemMenu 得到系统菜单的句柄
'X 按钮是系统菜单的一菜单项,然后用 RemoveMenu 函数
'删去这一菜单项,也就是使 X 按钮失效了。
'-------------------------------------------
'【VB 声明】
' Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
'【说明】
' 取得指定窗口的系统菜单的句柄。在 vb 环境,“系统菜单”的正式名称为“控制菜单”,即单击窗口左上
角的控制框时出现的菜单
'【返回值】
' Long,如执行成功,返回系统菜单的句柄;零意味着出错。如 bRevert 设为 TRUE,也会返回零(简单的
恢复原始的系统菜单)
'【备注】
' 在 vb 里使用:系统菜单会向窗口发送一条 WM_SYSCOMMAND 消息,而不是 WM_COMMAND 消息
'【参数表】
' hwnd ----------- Long,窗口的句柄
' bRevert -------- Long,如设为 TRUE,表示接收原始的系统菜单
Private Declare Function GetSystemMenu Lib "user32" ( _
ByVal hwnd As Integer, _
ByVal bRevert As Integer _
) As Integer
'-------------------------------------------
'【VB 声明】
' Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal
wFlags As Long) As Long
'【说明】
' 删除指定的菜单条目。如删除的条目属于一个弹出式菜单,那么这个函数不会同时删除弹出式菜单。首先
应该用 GetSubMenu 函数取得弹出式菜单的句柄,再在以后将其删除
'【返回值】
' Long,非零表示成功,零表示失败。会设置 GetLastError
'【备注】
' 强烈建议大家使用 vb 菜单的 visible 属性从菜单中删除条目,而不要用这个函数,否则会造成指定菜单中
评论1