上一题下一题
跳转到
 
 
  世界如此多姿,发展如此迅速,窥一斑未必还能知全豹。但正如万花筒一样,每一个管窥都色彩斑斓。  
 
 
  知识通道 | 学习首页 | 教师首页 | PK首页 | 知识创造首页 | 企业首页 | 登录
 

 

    

 

本文对应知识领域
VB中使窗体右上角的X按钮失效
作者:未知 申领版权
2010年11月15日 共有 1091 次访问 【添加到收藏夹】 【我要附加题目
受欢迎度:

 

    
为了学习方便,下面先给出.net' class='wordstyle'>源码,并且已经作了详细的中文注释:
    -------------------------------------------
    使窗体右上角的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属性从菜单中删除条目,而不要用这个函数,否则会造成指定菜单中其他菜单条目的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按钮是不是已经不可点击了,系统菜单中的“关闭”项也消失了,很有趣,不过一定记着为程序留一个“退出”按钮哦!
相关新闻

您可能对这些感兴趣  

用VB做定时断线程序
VisualBasic中的界面设计原则和编程技巧
VB6.0与Windows API 间的呼叫技巧
制作可以自动隐藏的弹出式菜单
ListBox中的字符串超长显示的解决方法
VB中的Unicode 和 Ansi 格式
优化程序显示速度
Visual Basic 产生渐层的 Form 背景
用VB实现客户——服务器(TCP/IP)
用VB制作注册软件的方法

题目筛选器
日期:
类型:
状态:
得分: <=
分类:
作者:
职业:
关键字:
搜索

 
 
 
  焦点事件
 
  知识体系
 
  职业列表
 
 
  最热文章
 
 
  最多引用文章
 
 
  最新文章
 
 
 
 
网站介绍 | 广告服务 | 招聘信息 | 保护隐私权 | 免责条款 | 法律顾问 | 意见反馈
版权所有 不得转载
沪ICP备 10203777 号 联系电话:021-54428255
  帮助提示    
《我的太学》是一种全新的应用,您在操作中遇到疑问或者问题,请拨打电话13564659895,15921448526。
《我的太学》