ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 3441|回复: 4

[求助]如何隐藏各表右上角的 三个控制按纽?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2005-4-9 07:18 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:UI界面定制
请问,如何取消或隐藏各工作表右上角上的 “还原/最大化” 按纽,及另 2 个按纽??? 注意:我问的是工作表标题栏上的控制按纽,而不是 excel 标题栏上的!
[此贴子已经被作者于2005-4-9 7:19:07编辑过]

TA的精华主题

TA的得分主题

发表于 2005-4-9 07:36 | 显示全部楼层

使窗体右上角的X按钮失效删除系统菜单 窗体右上角的X按钮通常用来关闭一个程序,这个小X按钮实际上是和系统菜单的“关闭”菜单项关联在一起的,什么?不知道什么是系统菜单,系统菜单是指我们点击窗体左上角的小图标时所弹出的菜单,其中好象有“恢复”、“移动”、“最大化”、“最小化”、“关闭”这么几个按钮。这个菜单用普通的方法是不能编辑和改变的,但是我们可以通过API函数GetSystemMenu来得到它的句柄,然后通过菜单相关的API函数就能改变它了,下面一起看看怎么做吧。

  为了学习方便,下面先给出源码,并且已经作了详细的中文注释:

程序说明: 本例利用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属性从菜单中删除条目,而不要用这个函数,否则会造成指定菜单中其他菜单条目的visible属性对错误的菜单条目产生影响

【参数表】 hMenu ---------- Long,菜单的句柄

nPosition ------ Long,欲改变的菜单条目的标识符。如在wFlags参数中指定了MF_BYCOMMAND,这个参数就代表欲改变的菜单条目的命令ID。如设置的是MF_BYPOSITION,这个参数就代表菜单条目在菜单中的位置(第一个条目的位置为零)

wFlags --------- Long,常数MF_BYCOMMAND或MF_BYPOSITION,取决于nPosition参数

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

Private Sub Command1_Click() Unload Me End Sub

Private Sub Form_Load() Dim R As Integer MyMenu = GetSystemMenu(Me.hwnd, 0) RemoveMenu MyMenu, &HF060, R End Sub

  程序中用到了两个API函数GetSystemMenu、RemoveMenu,其中GetSystemMenu函数用来得到系统菜单的句柄,RemoveMenu用来删除指定的菜单条目,我们先来看看这个函数的声明和参数:

   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 其中各GetSystemMenu参数的意义如下表:

参数 意义 hwnd Long 系统菜单所在窗口的句柄 bRevert Long 如设为TRUE,表示恢复原始的系统菜单 返回值 Long 如执行成功,返回系统菜单的句柄;零意味着出错。如bRevert设为TRUE,也会返回零(简单的恢复原始的系统菜单)

  而RemoveMenu参数的意义如下表:

参数 意义 hMenu Long 菜单的句柄 nPosition Long 欲改变的菜单条目的标识符。如在wFlags参数中指定了MF_BYCOMMAND,这个参数就代表欲改变的菜单条目的命令ID。如设置的是MF_BYPOSITION,这个参数就代表菜单条目在菜单中的位置(第一个条目的位置为零) wFlags Long 常数MF_BYCOMMAND=&H0&或MF_BYPOSITION=&H400&,取决于nPosition参数 返回值 Long,非零表示成功,零表示失败

  然后就可以在程序中使用这两个函数了,我们在窗体的Form_Load()过程中加入如下代码:

   MyMenu = GetSystemMenu(Me.hwnd,0)    得到系统菜单的句柄,Me.hwnd表示当前窗体的句柄

   RemoveMenu MyMenu, &HF060, MF_BYCOMMAND 移去“关闭”菜单项,&HF060“关闭”菜单项的命令ID

  接着我们运行程序,看看窗体右上角的X按钮是不是已经不可点击了,系统菜单中的“关闭”项也消失了,很有趣,不过一定记着为程序留一个“退出”按钮哦!

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-4-9 07:43 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

谢谢楼上的详细解答!

RemoveMenu MyMenu, &HF060, MF_BYCOMMAND 

请问,这第三个参数是表示什么?

在你给的事例中举例为删除“关闭”按纽,我不知道 这个 “关闭”按纽在菜单中的 id ,所以,我也不知道 “恢复/最大化” 按纽该什么删除???

另,我只想在我的簿中,禁止 用这个按纽,在其他簿中应恢复原样,不知怎么做 ?

请这位兄弟帮忙,就我的簿中删除“恢复/最大化”按纽,其他簿中恢复系统菜单,给个完整代码,好吗?

谢谢!

[此贴子已经被作者于2005-4-9 7:48:40编辑过]

TA的精华主题

TA的得分主题

发表于 2005-4-9 09:19 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

只能模拟了

Dim CustomMenu As CommandBar Dim MenuItem As CommandBarControl

Private Sub Workbook_Activate() CustomMenu.Enabled = True Application.CommandBars("Worksheet Menu Bar").Enabled = False End Sub

Private Sub Workbook_Deactivate() CustomMenu.Enabled = False Application.CommandBars("Worksheet Menu Bar").Enabled = True End Sub

Private Sub Workbook_Open() 'If Not CustomMenu Is Nothing Then Application.ScreenUpdating = False Set CustomMenu = Application.CommandBars.Add(Name:="MyBar", _ Position:=msoBarTop, MenuBar:=msoBarTypeNormal, temporary:=True) For Each MenuItem In Application.CommandBars("Worksheet Menu Bar").Controls MenuItem.Copy CustomMenu Next Application.CommandBars("Worksheet Menu Bar").Enabled = False With Application.CommandBars("MyBar") .Enabled = True .Visible = True .Top = 0 .Left = 0 End With Application.ScreenUpdating = True End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-4-9 23:24 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-2 23:49 , Processed in 0.020454 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表