VB中使窗体右上角的X按钮失效_VB.net_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

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

作者:黑客防线网安VB教程基地 来源:黑客防线网安VB教程基地 浏览次数:0

本篇关键词:失效按钮菜单参数
黑客防线网安网讯:为了学习方便,下面先给出源码,并且已经作了详细的中文注释:-------------------------------------------  使窗体右上角的X按钮失效  ------------------------------------------- ...
为了学习方便下面先给出源码并且已经作了详细的中文注释:

-------------------------------------------
  使窗体右上角的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按钮是不是已经不可点击了,系统菜单中的“关闭”项也消失了,很有趣,不过一定记着为程序留一个“退出”按钮哦!

->

    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-14593-1.html
网站维护教程更新时间:2012-04-03 01:10:16  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer