您现在的位置:中国下载站学院中心网络编程Visual Basic教程Visual Basic开发技巧 → 文章列表

VB中使窗体右上角的X按钮失效

作者:佚名  来源:不详  发布时间:2006-12-29 13:28:52   

减小字体 增大字体

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

-------------------------------------------
使窗体右上角的X按钮失效
-------------------------------------------
程序说明:
本例利用API函数GetSystemMenu得到系统菜单的句柄
X按钮是系统菜单的一菜单项,然后用RemoveMenu函数
删去这一菜单项,也就是使X按钮失效了。
-------------------------------------------
【VB声明】

PrivateDeclareFunctionGetSystemMenuLib"user32"(ByValhwndAsLong,ByValbRevertAsLong)AsLong

【说明】
取得指定窗口的系统菜单的句柄。在vb环境,“系统菜单”的正式名称为“控制菜单”,即单击窗口左上角的控制框时出现的菜单

【返回值】
Long,如执行成功,返回系统菜单的句柄;零意味着出错。如bRevert设为TRUE,也会返回零(简单的恢复原始的系统菜单)

【备注】
在vb里使用:系统菜单会向窗口发送一条WM_SYSCOMMAND消息,而不是WM_COMMAND消息

【参数表】
hwnd-----------Long,窗口的句柄

bRevert--------Long,如设为TRUE,表示接收原始的系统菜单

PrivateDeclareFunctionGetSystemMenuLib"user32"(_
ByValhwndAsInteger,_
ByValbRevertAsInteger_
)AsInteger

【VB声明】

PrivateDeclareFunctionRemoveMenuLib"user32"(ByValhMenuAsLong,ByValnPositionAsLong,ByValwFlagsAsLong)AsLong

【说明】
删除指定的菜单条目。如删除的条目属于一个弹出式菜单,那么这个函数不会同时删除弹出式菜单。首先应该用GetSubMenu函数取得弹出式菜单的句柄,再在以后将其删除

【返回值】
Long,非零表示成功,零表示失败。会设置GetLastError

【备注】
强烈建议大家使用vb菜单的visible属性从菜单中删除条目,而不要用这个函数,否则会造成指定菜单中其他菜单条目的visible属性对错误的菜单条目产生影响

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

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

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

PrivateDeclareFunctionRemoveMenuLib"user32"(_
ByValhMenuAsInteger,_
ByValnPositionAsInteger,_
ByValwFlagsAsInteger_
)AsInteger

PrivateSubCommand1_Click()
UnloadMe
EndSub

PrivateSubForm_Load()
DimRAsInteger
MyMenu=GetSystemMenu(Me.hwnd,0)
RemoveMenuMyMenu,&HF060,R
EndSub

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

   PrivateDeclareFunctionGetSystemMenuLib"user32"(ByValhwndAsLong,ByValbRevertAsLong)AsLong

   PrivateDeclareFunctionRemoveMenuLib"user32"(ByValhMenuAsLong,ByValnPositionAsLong,ByValwFlagsAsLong)AsLong
其中各GetSystemMenu参数的意义如下表:

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

  而RemoveMenu参数的意义如下表:

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

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

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

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

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

->

itbulo.com/post.php?action=newthread&fid=51&extra=page%3D1" title="如有错误,麻烦请及时告诉我们,谢谢。" target="_blank">我要纠错】【itbulo.com/" target="_blank">进入论坛交流】【关闭此页】【iTbulo.net/" class="lblue" target="_blank">进入博客】

在百度中搜索更多VB中使窗体右上角的X按钮失效相关网页 转贴于:中国下载站

  • 上一篇文章:VB中调用WindowsAPI的注意事项
  • 下一篇文章:VB中让窗体始终处于最前面
  • 阅读统计:[]
  • 中国下载站】【设为主页】【收藏本页】【打印本文】【回到顶部】【关闭此页

    相关文章
    文章评论(评论内容只代表网友观点,与本站立场无关!)

    用户名: 查看更多评论

    分 值:100分 85分 70分 55分 40分 25分 10分 0分

    内 容:

             (注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码


    设为首页 - 关于我们 - 广告服务 - 网站地图 - 加入收藏 - 网站声明 - 网站帮助 - 友情链接

    • Copyright (C) 2006-2008 www.cndownz.com All Rights Reserved.
      中国下载站 版权所有. 粤ICP备05141802号. 对本站有任何建议、意见或投诉,请来信:cndownzcom@yahoo.com.cn.
      喜欢中国下载站(cndownz.com),请把中国下载站(cndownz.com)告诉你QQ上的5位好友,多谢支持!